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