http://qiita.com/Nabetani/items/f3cca410428f90333e28
http://nabetani.sakura.ne.jp/hena/ord12rotdice/
さいころを転がして出た目を記録します。
単純に考えれば配列に全ての面を入れておけばいいだけなので、その方針にしたがって実装します。
世の中にはすごいことを考える人もいますが、私ががんばってこういうコードを書いたとして、後から見直したら絶対意味がわからない自信がある。
まあ、実は昔同じことをやったことがあるので、そのときの知識を流用しただけです。
やったことがなければもう少しかかってたかと思われます。
$nextは、さいころが転がったときに、どの面がどの方向に移動するかを表す表です。
北(N)に転がったとしたら、そのときに上を向いていた面(方向0)は北(方向5)に向き直る、という形です。
ksortが微妙だな。
こいつは参照渡しなので$dice = ksort(array_combine($next[$input[$i]], $dice))とか書けないんですよね。
「オフラインリアルタイムどう書く」の一覧
http://nabetani.sakura.ne.jp/hena/ord12rotdice/
さいころを転がして出た目を記録します。
単純に考えれば配列に全ての面を入れておけばいいだけなので、その方針にしたがって実装します。
世の中にはすごいことを考える人もいますが、私ががんばってこういうコードを書いたとして、後から見直したら絶対意味がわからない自信がある。
<?php
class DICE{
/**
* さいころをコロコロして歩いた目を返す
* @param String 「NNESWWS」みたいな文字列
* @return String 「15635624」みたいな文字列
*/
public function get($input){
// 初期値 順に上下東西南北
$dice = [1, 6, 4, 3, 5, 2];
$ret = (string)$dice[0];
// 進む方向
$next = [
'N' => [5,4,2,3,0,1]
,'S' => [4,5,2,3,1,0]
,'W' => [3,2,0,1,5,6]
,'E' => [2,3,1,0,5,6]
];
// 順番に進むだけ
for($i=0; $i<strlen($input); $i++){
$dice = array_combine($next[$input[$i]], $dice);
ksort($dice);
$ret .= $dice[0];
}
// 終了
return $ret;
}
}
// テスト
$test = [
['NNESWWS', '15635624'],
/* 省略 */
];
$dice = new DICE();
foreach($test as $key=>$data){
$answer = $dice->get($data[0]);
if($answer !== $data[1]){
print('えらー');
}
}
20分くらいですぐに終わりました。まあ、実は昔同じことをやったことがあるので、そのときの知識を流用しただけです。
やったことがなければもう少しかかってたかと思われます。
$nextは、さいころが転がったときに、どの面がどの方向に移動するかを表す表です。
北(N)に転がったとしたら、そのときに上を向いていた面(方向0)は北(方向5)に向き直る、という形です。
ksortが微妙だな。
こいつは参照渡しなので$dice = ksort(array_combine($next[$input[$i]], $dice))とか書けないんですよね。
「オフラインリアルタイムどう書く」の一覧
PR