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