http://qiita.com/Nabetani/items/55641767510c2f9f235f
http://nabetani.sakura.ne.jp/hena/ord10haniwa/
第10回はハニカム歩きです。
ていうかこれ、第12回の道なりの亀と同じだよな。
http://yuubiseiharukana.blog.shinobi.jp/Entry/1191/
ただし進行方向が6方向と、二次元配列で解くには少々面倒になっています。
ということで手っ取り早く進行先を全部持たせることにします。
<?php
class HONEYCOMB{
// はにかむ構造
private $next = [
'A' => 'BCDEFG','B' => 'HICAGS','C' => 'IJKDAB','D' => 'CKLMEA','E' => 'ADMNOF','F' => 'GAEOPQ',
'G' => 'SBAFQR','H' => 'TUIBSk','I' => 'UVJCBH','J' => 'VWXKCI','K' => 'JXYLDC','L' => 'KYZaMD',
'M' => 'DLabNE','N' => 'EMbcdO','O' => 'FENdeP','P' => 'QFOefg','Q' => 'RGFPgh','R' => 'jSGQhi',
'S' => 'kHBGRj','T' => '!!UHk!','U' => '!!VIHT','V' => '!!WJIU','W' => '!!!XJV','X' => 'W!!YKJ',
'Y' => 'X!!ZLK','Z' => 'Y!!!aL','a' => 'LZ!!bM','b' => 'Ma!!cN','c' => 'Nb!!!d','d' => 'ONc!!e',
'e' => 'POd!!f','f' => 'gPe!!!','g' => 'hQPf!!','h' => 'iRQg!!','i' => '!jRh!!','j' => '!kSRi!','k' => '!THSj!'
];
/**
* はにかむ構造を解いて返す
* @param String 「135004」みたいな文字列
* @return String 「ACDABHS」みたいな文字列
*/
public function get($route){
$ret = $now = 'A';
foreach(str_split($route) as $val){
$next = $this->next[$now][$val];
$ret.= $next;
// !の場合は先に進まない
if($next !== '!'){
$now = $next;
}
}
return $ret;
}
}
// テスト
$test = [
[ '135004', 'ACDABHS' ],
/* 省略 */
];
$honeycomb = new HONEYCOMB();
foreach($test as $key=>$data){
$answer = $honeycomb->get($data[0]);
if($answer !== $data[1]){
print('えらー');
}
}
今回はえらい簡単でした。
20分くらいで終わった。
もしかしたら第12回もこの方法でやった方が簡単だったかもしれぬ。