PietでHello Worldする
PietでHello Worldをしていきますが、難易度の評価は難しいです。
愚直に書いていくだけではあるのですが、良いコードにするとなるとなかなか難しいかもしれません。
Hello Worldを考える
そもそもHello World\n
を出力するには何が必要でしょうか。
Pietでは文字の出力はout(char)
コマンドで行います。
UnicodeにおいてHello World\n
のそれぞれに対応する整数は以下の通りです。
H 72
e 101
l 108
l 108
o 111
32
W 87
o 111
r 114
l 108
d 100
\n 10
Hello Worldを考える(コード編)
Pietは分岐がない場合直線上にコードを書けばとても簡単にコードをかけます。
ただそうすると非常に横長のコードになるのでそれを巻いたような渦巻き型のコードや、コードを畳んだ蛇型のコードになることが多い気はします。
ただ、結局コードとして成り立てばいいのでそこまで気にする必要はありません。
なにも気にしないでコードを書くと自分がどこのコードを書いているかを見失う可能性があるので気をつけましょう。
とりあえずHello World\n
を出力するコードを見ていきましょう。
終了までに実行されたコマンドを確認しようと思いましたが莫大になったので各自確認してみてください。
実行環境はこちらです。
他の実行環境では動作が異なる場合があります。
さて、インタプリタが読んでいく方向を転換の方法はいくつかあります。
一つは端または黒色のcodelにぶつかること。
もう一つは、pointerコマンドです。
さて、あなたが鮮やかなpietのコードを書きたい場合は積極的に黒を使おうとはしないでしょう。
そのような時にはpointerコマンドを使うわけですが、pointerコマンドで必ず現在の進行方向に対して右へ90度曲がるようにしたい場合は、push、pointerの順にコマンドを実行するようにしたら良いです。
また、push→push
の順でコマンドを行うのとpush→dup
を行うのはスタックの上では同様の動作ですが、それぞれを使い分ける必要があります。
その一つはcodelが干渉する場合です。
もし、隣接するcodelが不幸にも同じ色になるとそのcodelはひとつのカラーブロックとみなされます。
そうすると意図しない動作が発生する場合があります。
二つ目は見栄えの問題です。
例えばpush
コマンドはそれを行うごとに一段階色が暗くなります。
例えばあなたが明るいイメージで画像を作ることを望む場合はすでに明るい色であればdup
を、そうでなければpush
を使うなどの使い分けを行うと良いでしょう。
これはadd
を使うべきかmul
を使うべきかといった問題やpop
を適宜使うべきかなどにも繋がります。
ただ無意味なコマンドを追加しすぎるとコードの見た目はよくなるのに可読性は下がるという他の言語ではなかなか体験できない現象が発生します。