忍者ブログ
[PR]
×

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


share

2025/04/04 20:40 |
PHP5.5.0 「第3回オフラインリアルタイムどう書くの問題」をPHPで解く
http://nabetani.sakura.ne.jp/hena/ord3ynode/
第3回はqiitaの記事がないようです。

左右後ろに進み、どのような道筋を辿ったかを算出します。
01<?php
02 
03    class YNODE{
04         
05        // 次の方向
06        private $next = [
07            'BA' => ['r'=>'C', 'l'=>'D'], 'CA' => ['r'=>'D', 'l'=>'B'], 'DA' => ['r'=>'B', 'l'=>'C'],
08            'AB' => ['r'=>'E', 'l'=>'C'], 'CB' => ['r'=>'A', 'l'=>'E'], 'EB' => ['r'=>'C', 'l'=>'A'],
09            'AC' => ['r'=>'B', 'l'=>'F'], 'BC' => ['r'=>'F', 'l'=>'A'], 'FC' => ['r'=>'A', 'l'=>'B'],
10            'AD' => ['r'=>'F', 'l'=>'E'], 'ED' => ['r'=>'A', 'l'=>'F'], 'FD' => ['r'=>'E', 'l'=>'A'],
11            'BE' => ['r'=>'D', 'l'=>'F'], 'DE' => ['r'=>'F', 'l'=>'B'], 'FE' => ['r'=>'B', 'l'=>'D'],
12            'CF' => ['r'=>'E', 'l'=>'D'], 'DF' => ['r'=>'C', 'l'=>'E'], 'EF' => ['r'=>'D', 'l'=>'C'],
13        ];
14         
15        /**
16        * 進んだルートを求める
17        * @param  String 「rrrrbllrlrbrbrr」みたいな文字
18        * @return String 「ACBACABCFDEDADFC」みたいな数値
19        */
20        public function get($input){
21            // 現在進んでる方向
22            $nowRoute = 'BA';
23            // 返り値
24            $ret = 'A';
25             
26            for($i=0; $i<strlen($input); $i++){
27                // bだったら後ろに戻る
28                if($input[$i] === 'b'){
29                    $ret .= $nowRoute[0];
30                    $nowRoute = strrev($nowRoute);
31                    continue;
32                }
33                 
34                // 次に進む
35                $next = $this->next[$nowRoute][$input[$i]];
36                $ret .= $next;
37                $nowRoute = $nowRoute[1] . $next;
38            }
39             
40            return $ret;
41        }
42         
43    }
44     
45    // テスト
46    $test = [
47        ['b', 'AB'],
48        /* 省略 */
49    ];
50 
51    $ynode = new YNODE();
52    foreach($test as $key=>$data){
53        $answer = $ynode->get($data[0]);
54        if($answer !== $data[1]){
55            print('えらー');
56        }
57    }
全方向を持たせておくという原始的方法で解決。
'BA'が決まれば'CA''DA'は傾ければいいだけなので算出は可能なのですが、面倒になったのでもういいやー的な。
後ろに戻る場合も$nextに持たせておけばforループ内でわざわざ分岐する必要もないのですが、まあそちらも面倒なのでいいや的に。

かかった時間は30分程度。あっさり。


「オフラインリアルタイムどう書く」の一覧


PR

share

2013/09/09 22:07 | Comments(0) | PHP

コメント

コメントを投稿する






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



<<PHP5.5.0 「第13回オフラインリアルタイムどう書くの問題」をPHPで解く | HOME | 買ったものリスト 2013/09/08>>
忍者ブログ[PR]