LoginSignup
0
0

More than 5 years have passed since last update.

「第10回オフラインリアルタイムどう書くの問題」をPHPで解く

Last updated at Posted at 2013-07-05

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回もこの方法でやった方が簡単だったかもしれぬ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0