http://nabetani.sakura.ne.jp/hena/ord3ynode/
第3回はqiitaの記事がないようです。
左右後ろに進み、どのような道筋を辿ったかを算出します。
全方向を持たせておくという原始的方法で解決。
'BA'が決まれば'CA''DA'は傾ければいいだけなので算出は可能なのですが、面倒になったのでもういいやー的な。
後ろに戻る場合も$nextに持たせておけばforループ内でわざわざ分岐する必要もないのですが、まあそちらも面倒なのでいいや的に。
かかった時間は30分程度。あっさり。
「オフラインリアルタイムどう書く」の一覧
PR
第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分程度。あっさり。
「オフラインリアルタイムどう書く」の一覧