http://qiita.com/Nabetani/items/1de39df381dfeee305ab
http://nabetani.sakura.ne.jp/hena/ord12aloroturtle/
道なりの亀、という問題を見つけました。
我らがPHPで解いてる人が誰もいなかったのでやってみました。
かかった時間はたぶん1時間くらいです。
きちんと計っとけばよかった。
「オフラインリアルタイムどう書く」の一覧
http://nabetani.sakura.ne.jp/hena/ord12aloroturtle/
道なりの亀、という問題を見つけました。
我らがPHPで解いてる人が誰もいなかったのでやってみました。
かかった時間はたぶん1時間くらいです。
きちんと計っとけばよかった。
<?php class KAME{ // マップ private $mapArray = [ 'ABCDEFGHIJK', 'LMNOPQRSTUV', 'WXYZabcdefg' ,'hij?????765', 'klm?????432', 'nop?????10z' ,'qrs?????yxw', 'tuv?????vut']; // 一歩進む先 private $directionTo = [[1, 0], [0, 1], [-1, 0], [0, -1]]; // 現在地 private $nowX = 0; private $nowY = 0; // 向いてる方向 private $direction = 0; // →0↓1←2↑3 /** * 辿ったルートを取得 * @param String 辿る道順 * @param String 辿ったルート */ public function get($route){ $this->reset(); $ret = 'A'; foreach(str_split($route) as $now){ if($now === 'R'){ $this->turnRight(); continue; }elseif($now === 'L'){ $this->turnLeft(); continue; }else{ $ret .= $this->getRoute(hexdec($now)); if(substr($ret, -1) === '?'){return $ret;} continue; } } return $ret; } /** * 辿ったルートを取得 * @param int 何歩進むか * @param String 辿ったルートを表す文字列 */ private function getRoute($steps){ $ret = ''; // 歩数分繰り返し for($i=0; $i<$steps; $i++){ // 一歩進む $this->nowX += $this->directionTo[$this->direction][0]; $this->nowY += $this->directionTo[$this->direction][1]; // 進んだ先の値を取得 if(!isset($this->mapArray[$this->nowY][$this->nowX])){ return $ret . '?'; } $kame = $this->mapArray[$this->nowY][$this->nowX]; // 進んだ先が場外であれば終了 if($kame==='?'){ return $ret . '?'; } // 前回進んだ先が'tuv'であれば現在地と方向を変換 $this->routeChange($kame); // ルートを積む $ret .= $kame; } return $ret; } /** * 現在地が'tuv'の何れかである場合、現在地と方向を変更する必要がある * @param 現在地 */ private function routeChange($kame){ // tuv以外なら何もしない if(strpos('tuv', $kame) === false){ return; } // それ以外なら位置を変更、方向は反転 $this->nowX = (10 - $this->nowX); $this->turnRight(); $this->turnRight(); } /** * 右を向く */ private function turnRight(){ if(++$this->direction >= 4){$this->direction = 0;} } /** * 左を向く */ private function turnLeft(){ if(--$this->direction <= -1){$this->direction = 3;} } /** * リセット */ private function reset(){ $this->nowX = 0; $this->nowY = 0; $this->direction = 0; } } // 以下はテスト $test = []; $test[] = [ "2RcL3LL22", "ABCNYjmpsvy147edcbcdef" ]; $test[] = [ "L3R4L5RR5R3L5", "A?" ]; $test[] = [ "2ReLLe", "ABCNYjmpsvy147eTITe741yvspmjYNC" ]; $test[] = [ "1ReRRe", "ABMXilorux036fUJUf630xuroliXMB" ]; $test[] = [ "ReRRe", "ALWhknqtwz25gVKVg52zwtqnkhWLA" ]; $test[] = [ "f", "ABCDEFGHIJK?" ]; $test[] = [ "Rf", "ALWhknqtwz25gVK?" ]; $test[] = [ "1Rf", "ABMXilorux036fUJ?" ]; $test[] = [ "2Rf", "ABCNYjmpsvy147eTI?" ]; $test[] = [ "aR1RaL1LaR1R2L1L2", "ABCDEFGHIJKVUTSRQPONMLWXYZabcdefg567432" ]; $test[] = [ "2R1R2L1L2R1R2L1L2R1R2L1L2R1R2L1L2", "ABCNMLWXYjihklmponqrsvutwxy" ]; $test[] = [ "2R4R2L4L2R4R2L4L2R4R2L4L2", "ABCNYjmlknqtwxy147efgVK?" ]; $test[] = [ "R1L2R4R2L4L2R4R2L4L2R4R2L4L2", "ALMNYjmponqtwz0147eTUVK?" ]; $test[] = [ "R2L2R4R2L4L2R4R2L4L2R4R2L4L2", "ALWXYjmpsrqtwz2347eTIJK?" ]; $test[] = [ "R3L2R4R2L4L2R4R2L4L2R4R2L4L2", "ALWhijmpsvutwz2567eTI?" ]; $test[] = [ "R5L2L5L1LaR1L4L5", "ALWhknopmjYNCBMXilorux0325gVKJIHGF" ]; $test[] = [ "1R2L4L2R4R2L4L2R4", "ABMXYZabQFGHIJUfg?" ]; $test[] = [ "2R2L4L2R4R2L4L2R4", "ABCNYZabcRGHIJKVg?" ]; $test[] = [ "3R2L4L2R4R2L4L2R4", "ABCDOZabcdSHIJK?" ]; $test[] = [ "4R2L4L2R4R2L4L2R4", "ABCDEPabcdeTIJK?" ]; $test[] = [ "5R2L4L2R4R2L4L2R4", "ABCDEFQbcdefUJK?" ]; $test[] = [ "LLL1RRR1LLL1RRR2R1", "ALMXYZ?" ]; $test[] = [ "R3RRR3", "ALWhij?" ]; $test[] = [ "1LLL4RRR1LR1RL1", "ABMXilm?" ]; $test[] = [ "R2L1R2L1R3R4", "ALWXilmpsvut?" ]; $test[] = [ "7R4f47LLLc6R9L", "ABCDEFGHSd?" ]; $test[] = [ "5RR868L8448LL4R6", "ABCDEFEDCBA?" ]; $test[] = [ "42Rd1RLLa7L5", "ABCDEFGRc?" ]; $test[] = [ "RRLL6RLR1L5d12LaLRRL529L", "ABCDEFGRSTUV?" ]; $test[] = [ "RLR7L6LL1LRRRcRL52R", "ALWhknqtuv?" ]; $test[] = [ "1RLR8RLR1R437L99636R", "ABMXiloruxwtqnkhWLA?" ]; $test[] = [ "LLL2L3La9Le5LRR", "ALWXYZOD?" ]; $test[] = [ "R1LcRR491", "ALMNOPQRSTUV?" ]; $test[] = [ "R8L1R1R512L8RLLReRf", "ALWhknqtwx0z?" ]; $test[] = [ "1RcL8f1L29a5", "ABMXilorux036fedcbaZYXW?" ]; $test[] = [ "R822LeL46LL39LL", "ALWhknqtwz25gfedcbaZYXW?" ]; $test[] = [ "9R3L5LRRLb5R3L7cLLLR4L", "ABCDEFGHIJUf65?" ]; $test[] = [ "7LLRRR2R3R69Lf76eR2L", "ABCDEFGHSdcbaPE?" ]; $test[] = [ "8RRRLL3Le", "ABCDEFGHITe765?" ]; $test[] = [ "8R5RLL6LbL4LL5bL", "ABCDEFGHITe7410z?" ]; $test[] = [ "6LR2R1LR5LRLRL484L63", "ABCDEFGHITe741yxw?" ]; $kame = new KAME(); foreach($test as $key=>$data){ $route = $kame->get($data[0]); if($route !== $data[1]){ print('えらー'); } }
「オフラインリアルタイムどう書く」の一覧
PR