『あみだくじ』投稿
どう書く?orgに投稿。
お題はあみだくじです。
次のような書式で与えられた「あみだくじ」があります。(あみだくじはコード中に埋め込んでも、標準入力や外部ファイルから読み込んでも、書きやすい方法でかまいません)
A B C D E
| | |-| |
|-| | |-|
| |-| |-|
|-| |-| |
|-| | | |
このあみだくじをたどって
A B C D E
| | |-| |
|-| | |-|
| |-| |-|
|-| |-| |
|-| | | |
B D C A E
のように結果を表示させるプログラムを作ってください。
以下、投稿したコード。選択した言語はPHP。ファイルパスを渡すと結果付きで返却する。
function Amida($file_path)
{
if (!file_exists($file_path)) {
return NULL;
}
$lines = file($file_path);
$org = array_shift($lines);
$p = $org;
foreach ($lines as $line) {
for ($i = 1; $i < strlen(trim($line)); $i+=2) {
if ($line[$i] == '-') {
$sub = array($p[$i+1]=>$p[$i-1], $p[$i-1]=>$p[$i+1]);
$p = strtr($p, $sub);
}
}
}
return $org.implode(”, $lines).$p;
}
echo sprintf(‘%s’, Amida(‘./amida.txt’));このような形で使用する。
strtr()、初めて使用した。 if内の入れ替え処理、よくあるバッファを用いたものより、直感的にわかりやすくなっている(かも)。