忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/23 16:51 |
PHP5.3.7 「第12回オフラインリアルタイムどう書くの問題」をPHPで解く
http://qiita.com/Nabetani/items/f3cca410428f90333e28
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


2013/07/12 23:51 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2013/07/14 | HOME | PHP5.3.7 「第9回オフラインリアルタイムどう書くの問題」をPHPで解く>>
忍者ブログ[PR]