Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

esolangAdvent Calendar 2022

Day 20

PietでHello World

Last updated at Posted at 2022-12-19

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を出力するコードを見ていきましょう。

Hello_World.png

終了までに実行されたコマンドを確認しようと思いましたが莫大になったので各自確認してみてください。

実行環境はこちらです。
他の実行環境では動作が異なる場合があります。

さて、インタプリタが読んでいく方向を転換の方法はいくつかあります。
一つは端または黒色のcodelにぶつかること。
もう一つは、pointerコマンドです。
さて、あなたが鮮やかなpietのコードを書きたい場合は積極的に黒を使おうとはしないでしょう。
そのような時にはpointerコマンドを使うわけですが、pointerコマンドで必ず現在の進行方向に対して右へ90度曲がるようにしたい場合は、push、pointerの順にコマンドを実行するようにしたら良いです。

また、push→pushの順でコマンドを行うのとpush→dupを行うのはスタックの上では同様の動作ですが、それぞれを使い分ける必要があります。

その一つはcodelが干渉する場合です。
もし、隣接するcodelが不幸にも同じ色になるとそのcodelはひとつのカラーブロックとみなされます。
そうすると意図しない動作が発生する場合があります。
二つ目は見栄えの問題です。
例えばpushコマンドはそれを行うごとに一段階色が暗くなります。
例えばあなたが明るいイメージで画像を作ることを望む場合はすでに明るい色であればdupを、そうでなければpushを使うなどの使い分けを行うと良いでしょう。
これはaddを使うべきかmulを使うべきかといった問題やpopを適宜使うべきかなどにも繋がります。
ただ無意味なコマンドを追加しすぎるとコードの見た目はよくなるのに可読性は下がるという他の言語ではなかなか体験できない現象が発生します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Comments

No comments

Let's comment your feelings that are more than good

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?