今更ながら、どう書く?orgのアカウントを登録してきました。ラングトンの蟻のコードが割と綺麗にまとまったので、投稿したくなったんです(笑)。
で、さっそく投稿したのが次の2つ。
- ラングトンの蟻 #9398
!東=0 !南=1 !西=2 !北=3 線スタイルは`透明` 必要な 間、蟻を進めて0.01秒待つ ■ブロック ・{整数}W{=5} ・{整数}H{=5} ・色取得(X,Yの)〜 X*W,Y*Wを点取得 ・プロット(X,YにCOLを)〜 塗り色はCOL X*W,Y*Hから(X+1)*W,(Y+1)*Hへ四角 ■蟻 +ブロック ・{整数}向き{=2} ・{整数}X{=40} ・{整数}Y{=40} ・進む〜 COLとは整数=X,Yの色取得 向き=(向き-2*(COL==白色)+5)%4 X,Yに(COLの反転色)をプロット X=X-(向き==西)+(向き==東) Y=Y-(向き==南)+(向き==北) ●反転色(COLの) 白色-COLを戻す
- ラングトンの蟻 #9399
!ブロック幅 =3 !ブロック高さ=3 !世界幅 =150 !世界高さ=120 !東=0 !南=1 !西=2 !北=3 !色数 =4 !基準色=黒色 !STEPBY=500 ルールは『RLLR』 ルールの色配列は「{基準色},{赤色},{青色},{緑色}」を`,`で区切ったもの 母艦について クライアントW=ブロックのW*世界幅 クライアントH=ブロックのH*世界高 スタイルは`枠固定` 基準色で画面クリア STEPとは整数 線スタイルは`透明` 必要な 間 蟻を進める。 もしSTEP%STEPBYが0ならば 0.01秒待つ 母艦は「step: {STEP}」 STEPに1を直接足す ■ルール ・{配列}ルール配列 ・テキスト ←ルール設定 デフォルト ・ルール設定(V)〜 Vを文字列分解して反復 ルール配列[回数-1]=2*(対象==`R`)-1 # Rなら1、それ以外は-1 ・{非公開}色配列 ■ブロック ・{非公開}W{=3} ・{非公開}H{=3} ・色取得(X,Yの)〜 X*W,Y*Wを点取得 ・プロット(X,YにCOLを)〜 塗り色はCOL X*W,Y*Hから(X+1)*W,(Y+1)*Hへ四角 ■蟻 +ブロック ・{整数}向き{=0} ・{整数}X{=75} ・{整数}Y{=50} ・進む〜 COLとは整数=X,Yの色取得 COLで向きを方向転換する COLを色循環する X,YにCOLをプロット Xに(向き==東)-(向き==西)を世界幅でMOD加算 Yに(向き==南)-(向き==北)を世界高でMOD加算 ●方向転換する({整数}COLで{参照渡し}DIRを) Iとは整数=ルールの色配列でCOLを配列検索 もしIが(-1)ならばI=0 DIRに(ルールのルール配列[I])を4でMOD加算する ●色循環する({参照渡し}COLを) COLORSとは配列=ルールの色配列 Iとは整数=COLORSでCOLを配列検索 COL=COLORS[(I+1)%色数] # Z/CZ上でAにBを直接足す ●MOD加算({参照渡し}Aに{整数}Bを{整数}Cで) A=(A+B+C)%C
2つ目はともかく、1つ目はなかなかスッキリしていて見通しの良いコードではないでしょうか?「もし」文を使うのが嫌で論理計算使ってますがf(^^; 1つ目が30行、発展版の2つ目が75行です。
バイナリクロックとかまだ未投稿みたいだし、地味に着々と投稿を増やしていきたいと思います。