『ラングトンのアリの描画』投稿
『どう書く?org』への投稿
今回は『ラングトンのアリ』と呼ばれるセル・オートマトンの問題。
お題:
ラングトンのアリを描画してください。
以下投稿したコード。言語はいつものPHP。
方角の循環、セルの反転、アリの移動はそれぞれ工夫したつもり。
シンプルにまとまっていると思う。
<?php
function lang_ant($w, $h)
{
$world = array_fill(0, $h, array_fill(0, $w, 1));
$x = (int)($w/2);
$y = (int)($h/2);
$dct = 0; /* 0:N 1:E 2:S 3:W */
$stp_ant = array(‘$x++;’, ‘$y++;’, ‘$x–;’, ‘$y–;’);
$chg_dct = array(‘$dct = (((++$dct)%4)+2)%4;’, ‘$dct = (++$dct)%4;’);
$print_world = array(‘0’, ‘ ’);
for ( $i = 0; $i < 20000; $i++) {
eval($chg_dct[$world[$y][$x]]);
eval($stp_ant[$dct]);
if ($x<0 || $w<=$x || $y<0 || $h<=$y) {
break;
}
$world[$y][$x] = (++$world[$y][$x])%2;
}
foreach ( $world as $cels) {
foreach ($cels as $cel) {
echo $print_world[$cel];
}
echo “<br />”;
}
}
?>
投稿:
http://ja.doukaku.org/comment/9373/
ラングトンのアリ – Wikipedia
JavaScriptでラングトンの蟻
http://www.songmu.jp/riji/archives/2009/07/javascript_1.html