『あみだくじ』投稿

| コメント(0) | トラックバック(0)
 どう書く?orgに投稿。

 お題はあみだくじです。

次のような書式で与えられた「あみだくじ」があります。
(あみだくじはコード中に埋め込んでも、標準入力や外部ファイルから読み込んでも、書きやすい方法でかまいません)

A B C D E
| | |-| |
|-| | |-|
| |-| |-|
|-| |-| |
|-| | | |
このあみだくじをたどって

A B C D E
| | |-| |
|-| | |-|
| |-| |-|
|-| |-| |
|-| | | |
B D C A E
のように結果を表示させるプログラムを作ってください。
 以下、投稿したコード。選択した言語はPHP。ファイルパスを渡すと結果付きで返却する。

<?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('<pre>%s</pre>', Amida('./amida.txt'));
このような形で使用する。

 strtr()、初めて使用した。
 if内の入れ替え処理、よくあるバッファを用いたものより、直感的にわかりやすくなっている(かも)。

関連記事

トラックバック(0)

このブログ記事を参照しているブログ一覧: 『あみだくじ』投稿

このブログ記事に対するトラックバックURL: http://www.ivoryworks.com/cgi-bin/weblog/mt-tb.cgi/45

コメントする

アーカイブ

あわせて読みたいブログパーツ