http://nabetani.sakura.ne.jp/hena/ord3ynode/
第3回はqiitaの記事がないようです。
左右後ろに進み、どのような道筋を辿ったかを算出します。
'BA'が決まれば'CA''DA'は傾ければいいだけなので算出は可能なのですが、面倒になったのでもういいやー的な。
後ろに戻る場合も$nextに持たせておけばforループ内でわざわざ分岐する必要もないのですが、まあそちらも面倒なのでいいや的に。
かかった時間は30分程度。あっさり。
「オフラインリアルタイムどう書く」の一覧
第3回はqiitaの記事がないようです。
左右後ろに進み、どのような道筋を辿ったかを算出します。
<?php class YNODE{ // 次の方向 private $next = [ 'BA' => ['r'=>'C', 'l'=>'D'], 'CA' => ['r'=>'D', 'l'=>'B'], 'DA' => ['r'=>'B', 'l'=>'C'], 'AB' => ['r'=>'E', 'l'=>'C'], 'CB' => ['r'=>'A', 'l'=>'E'], 'EB' => ['r'=>'C', 'l'=>'A'], 'AC' => ['r'=>'B', 'l'=>'F'], 'BC' => ['r'=>'F', 'l'=>'A'], 'FC' => ['r'=>'A', 'l'=>'B'], 'AD' => ['r'=>'F', 'l'=>'E'], 'ED' => ['r'=>'A', 'l'=>'F'], 'FD' => ['r'=>'E', 'l'=>'A'], 'BE' => ['r'=>'D', 'l'=>'F'], 'DE' => ['r'=>'F', 'l'=>'B'], 'FE' => ['r'=>'B', 'l'=>'D'], 'CF' => ['r'=>'E', 'l'=>'D'], 'DF' => ['r'=>'C', 'l'=>'E'], 'EF' => ['r'=>'D', 'l'=>'C'], ]; /** * 進んだルートを求める * @param String 「rrrrbllrlrbrbrr」みたいな文字 * @return String 「ACBACABCFDEDADFC」みたいな数値 */ public function get($input){ // 現在進んでる方向 $nowRoute = 'BA'; // 返り値 $ret = 'A'; for($i=0; $i<strlen($input); $i++){ // bだったら後ろに戻る if($input[$i] === 'b'){ $ret .= $nowRoute[0]; $nowRoute = strrev($nowRoute); continue; } // 次に進む $next = $this->next[$nowRoute][$input[$i]]; $ret .= $next; $nowRoute = $nowRoute[1] . $next; } return $ret; } } // テスト $test = [ ['b', 'AB'], /* 省略 */ ]; $ynode = new YNODE(); foreach($test as $key=>$data){ $answer = $ynode->get($data[0]); if($answer !== $data[1]){ print('えらー'); } }全方向を持たせておくという原始的方法で解決。
'BA'が決まれば'CA''DA'は傾ければいいだけなので算出は可能なのですが、面倒になったのでもういいやー的な。
後ろに戻る場合も$nextに持たせておけばforループ内でわざわざ分岐する必要もないのですが、まあそちらも面倒なのでいいや的に。
かかった時間は30分程度。あっさり。
「オフラインリアルタイムどう書く」の一覧
PR