http://qiita.com/Nabetani/items/0ddde0164a745cd09c34
http://nabetani.sakura.ne.jp/hena/ord5railsontiles/
順番的には「第5回オフラインリアルタイムどう書くの問題」なのですが、難しすぎて解けないのでとりあえずパスして次に。
いや、解いたには解いたんですが500行とかになってしまったのでこれはあかん。
懐かしチクタクバンバン。
ただしこちらはパネルは動きません。
進むラインを求めます。
ただ普通に0~8とすると2→3の移動がOKとみなされてしまうため、侵入許可パネルという微妙なプロパティを作る羽目になりました。
あとPHPは
private $okPanel = array_flip([10, 11, 12, 23, 24, 25, 36, 37, 38]);
とか書けないから微妙にめんどい。
かかった時間は1時間くらい。
完成した後で考えなおしてみたら'ABC-DEF-GHI'の位置とかでやったほうがずっと簡単そうだった。
まあいいか。
「オフラインリアルタイムどう書く」の一覧
http://nabetani.sakura.ne.jp/hena/ord5railsontiles/
順番的には「第5回オフラインリアルタイムどう書くの問題」なのですが、難しすぎて解けないのでとりあえずパスして次に。
いや、解いたには解いたんですが500行とかになってしまったのでこれはあかん。
懐かしチクタクバンバン。
ただしこちらはパネルは動きません。
進むラインを求めます。
<?php class TICKTUCK{ // 入力方向から次の入力方向を求める ←0↑1→2↓3 private $panel = [ 0=>[0=>0, 1=>1, 2=>2, 3=>3], 1=>[0=>1, 1=>0, 2=>3, 3=>2], 2=>[0=>3, 1=>2, 2=>1, 3=>0], ]; // 入力方向による現在値の変化 ←-1↑-13→+1↓+13 private $direction = [0=>1, 1=>13, 2=>-1, 3=>-13 ]; // 侵入許可パネル private $okPanel = [10=>1, 11=>1, 12=>1, 23=>1, 24=>1, 25=>1, 36=>1, 37=>1, 38=>1]; /** * チクタクバンバン * @param String 「101221102」みたいな文字列 * @return String 「BEDGHIFEH」みたいな文字列 */ public function get($input){ // 現在地 $nowPanel = 11; // 現在の方向 $nowDirection = 1; // 進んだ順 $ret = ''; do{ // 現在地 $ret .= chr(65 + $nowPanel%10); // 次の方向を求める $nowDirection = $this->panel[$input[$nowPanel%10]][$nowDirection]; // 次の現在地を求める $nowPanel += $this->direction[$nowDirection]; // 進める限り繰り返し }while(isset($this->okPanel[$nowPanel])); return $ret; } } // テスト $test = [ ['101221102','BEDGHIFEH'], /* 省略 */ ]; $ticktuck = new TICKTUCK(); foreach($test as $key=>$data){ $answer = $ticktuck->get($data[0]); if($answer !== $data[1]){ print('えらー'); } }パネルのA~Iをそれぞれ0~8に割り当て、パネルの形状によって移動する次のパネルを求める、という基本的には単純な作りです。
ただ普通に0~8とすると2→3の移動がOKとみなされてしまうため、侵入許可パネルという微妙なプロパティを作る羽目になりました。
あとPHPは
private $okPanel = array_flip([10, 11, 12, 23, 24, 25, 36, 37, 38]);
とか書けないから微妙にめんどい。
かかった時間は1時間くらい。
完成した後で考えなおしてみたら'ABC-DEF-GHI'の位置とかでやったほうがずっと簡単そうだった。
まあいいか。
「オフラインリアルタイムどう書く」の一覧
PR