難解プログラミング言語を整える
専門Pietを整える。
= 色のマス目がそのままプログラムになる言語 Piet を、塗って実行して1歩ずつ確かめるツール
Piet が初めての方は、先に そもそも Piet とは・命令の決まり方 をどうぞ。
① マス目を塗る
色を選んでマスをクリック(タップ)すると塗れます。なぞると続けて塗れます。左上のマスから動き出します。
自作の小さな例(クリックでマス目に入る)
色(略号の数字は 1=薄い・2=ふつう・3=濃い。W=白・K=黒)
② 実行して出力を見る
入力命令(数を読む・文字を読む)は、下の標準入力欄の文字を使います。
出力
「実行」を押すと、ここに出力が出ます。
③ 1歩ずつ動かす
いるブロックを太い枠で囲み、次に出る口を丸い矢印で示します。
歩数:0
DP(進む向き): CC(左右の選び方):
いるブロック:
直前の動き:
次の動き:
スタック(左が一番上)
出力(途中経過)
④ 画像を読み込む・PNGで保存する
手元のPNGなどをこの端末の中で読み、1マスの大きさ(codel)を指定してマス目にします。送信はしません。
そもそも Piet とは
色の変わり方が命令になる、絵のままのプログラミング言語。
Piet(ピート)は、オーストラリアの David Morgan-Mar 氏が2002年に作った言語です。名前は画家のピエト・モンドリアンにちなんでいます。プログラムは文字ではなく、色のついたマス目(画像)です。図鑑の Piet のページも参照してください。
使える色は、赤・黄・緑・水色・青・紫の6色相に、薄い・ふつう・濃いの3段階を掛けた18色と、白・黒の合わせて20色です。同じ色でつながったマスのかたまりをブロックと呼び、実行はブロックからブロックへ移っていきます。
動き方
- 左上のマスのブロックから始まります。DP(右・下・左・上)が進む向き、CC(左・右)が出口の選び方です。最初は DP=右、CC=左です。
- ブロックのDP側の端のうち、CCの側にいちばん寄ったマスから、次のブロックへ移ります。
- 黒のマスや盤の端にぶつかると、CCを反転→DPを時計回りに回す、を交互に行って出口を探します。8回続けて出られなければ停止します。
- 白のマスは命令なしで通り抜け、DPの向きにまっすぐ滑って次の色のブロックに入ります。
命令の決まり方
移った先との色相が何段進んだか(赤→黄→緑→水色→青→紫→赤の順)と明度が何段濃くなったか(薄い→ふつう→濃い→薄い)で、次の表のとおり命令が決まります。数は「出たブロックのマス数」で、積む(push)命令で初めてスタックに入ります。
| 色相の進み\明度の進み | 0段 | 1段 | 2段 |
|---|
このページの対応範囲
- 仕様の17命令(積む・捨てる・足す・引く・掛ける・割る・余り・否定・比較・向き・左右・複製・回転・数を読む・文字を読む・数を出力・文字を出力)はすべて動きます。
- 仕様で実装に任されている所は次の選び方です。割り算は切り下げ(余りは仕様どおり割る数と同じ符号)、0で割る命令は無視、結果が 253 を超える計算は無視、実行できない命令(スタック不足・深さが負か大きすぎる roll・入力なし)は無視して次へ進みます。
- 20色以外の色は、画像を読み込むときに最も近い標準色へ寄せます(実行は標準色だけ)。
- 最大 128×128 マス、1回の実行は100万歩まで。無限に回るプログラムも止まります。
出典: 公式仕様 dangermouse.net/esoteric/piet.html(David Morgan-Mar)、 esolangs.org/wiki/Piet。プリセットはこのページ用に自作した小さな例です。 プログラムの終わりは、最後のブロックの出口をすべて黒か端でふさぐ形にしています(手前のブロックへ通じる出口が残ると、そちらへ戻ります)。
このツールについて
Piet は、色のついたマス目の並びがそのままプログラムになる言語です。マス目を塗って実行し、いまどのブロックにいて次にどの命令が働くかを1歩ずつ確かめられます。画像はこの端末の中だけで処理します(送信ゼロ)。
マス目を塗って実行し、色の変わり方がどの命令になるかを1歩ずつ確かめる。画像の読み込みと保存も端末内で完結。
主な機能
- 20色のマス目エディタ(クリック・タップ・なぞって塗れる)
- 仕様の17命令・白の通過・黒と端での向き変えに対応
- ブロックの枠・DP/CC・スタック・次の命令を1歩ずつ表示
- 手元のPNGをcodel指定でマス目に変換、マス目をPNGで保存
- 色の略号をマスに出す切り替え(色が見分けにくい人向け)
よくある質問
Q. Piet とは何ですか?
A. 2002年に David Morgan-Mar 氏が作った、色のついたマス目がそのままプログラムになる言語です。名前は画家のモンドリアンにちなんでいます。命令は、ブロックからブロックへ移るときの色相と明度の変化で決まります。
Q. 数はどうやってスタックに入れるのですか?
A. 出たブロックのマス数が値になります。色が「同じ色相で1段濃く」なる移動(積む命令)のときだけ、そのブロックのマス数をスタックに入れます。5を入れたければ5マスのブロックを作ります。
Q. 画像を読み込むと外部に送られますか?
A. 送られません。画像はこの端末のブラウザの中だけで読み、マス目に変換します。codel(1マスの大きさ)は推定もでき、手で指定もできます。標準の20色にない色は最も近い色に寄せます。
Q. プログラムが止まらないときは?
A. 1回の実行は100万歩までで自動的に止まり、停止ボタンでも止められます。Piet は黒や端にぶつかると向きを変えて出口を探し、8回続けて出られなければ停止します。白の中を回り続ける場合も停止します。
Q. 仕様で決まっていない所はどう動きますか?
A. 割り算は切り下げ、0で割る命令・スタック不足・深さが不正な roll・入力が無い読み込みは無視して次へ進みます。計算結果が 2 の 53 乗を超える場合も無視します。ページの解説に一覧があります。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。