難解な言語のピエト



グラフィック難解な言語のカテゴリでは、Pietが最も有名です。 そのプログラムは抽象主義の絵画のように見えます。多色の画像が演算子として使用されます。 カラフルなアルゴリズムは美しく見えますが、言語の難解な性質のため、実際の実用的な問題を解決するための適応はまだ不十分です。

助けて


難解なプログラミング言語(ESN)は、実験または研究として作成されます。 そのため、開発者は言語の可能性を探ります。 時々彼らはただ楽しんでいます。 いずれにせよ、これは脳のためのトレーニングであり、ほとんどの人は気にしません。



ENPは特定の汎用目的です。 難解な言語は、ほとんどの場合、著者だけが理解するという事実に基づいています。 この場合も、そのような言語を学ぶことは科学目的のみであるべきであるという事実に戻ります。 たとえば、プログラミング競技会で問題を特に美しく解決できます-できます。 Esolangs.orgには、 1,000以上のそのような言語に関する情報が含まれています。

ソー・ピート:ストーリー


この言語は、David Morgan-Marによって発明され、アーティストのPete Mondrian(元の名前はPiet Mondrian )にちなんで命名されました。 その考えは、言語のプログラムが抽象主義のように見えるということでした。

説明


言語は特定です。 いくつかの実装が利用可能です。 20の使用可能な色の間の遷移はコマンドです。 Peteの各プログラムは、ピクセルに分割された2次元の画像です。 興味深い詳細:エラーは単に無視されます。 つまり、不可能なコマンドを記述しても、コンパイラーはそれを停止しません。 場合によっては、デバッグ時間を短縮できます。

言語モデル要素


言語モデルには3つの要素が含まれています。プログラムは、ピクセルで構成される2次元画像です。 後者は任意の色にすることができます。 このプログラムには20人しか参加していません。



ピートにはブロックがあります。 これらは同じ色のピクセルの接続セットです。 ブロックは、プログラムのテキストを構築する上で最小の部分です。 拡大されたときに単一のブロックに対応するピクセルのグループはコーデルです。 詳細な検討と正確さのために拡大が必要です。

ピートの記憶はスタックとして構成されています。 言語データ型は整数です。 これが唯一のタイプです。 文字の処理は、ASCIIコードの形式で行われます。

この言語には、複雑な構造を持つ命令ポインターがあります。


命令ポインターがプログラムをどのように通過するか


現在のブロックのエッジが検索されます(ブロックの形状が複雑な場合は、断続的になります)。 方向の最も極端なピクセルが選択されます。 選択したピクセルから次のピクセルにポインターが移動します。

次のコマンドは、現在のブロックを変更するときの色の変更です。 ポインターの方向は、ブロックを変更する一般的な場合と同じままです。 ポインターが黒いブロックと「衝突」すると、方向が変わります。 それらは、Peteで書かれたプログラムで自然な制約と制御構造の役割を果たします。

そのため、ポインターが黒いブロックに達すると、方向が変わります。 プログラムが色付きのブロックを見つけるまで、有効な検索が実行されます。 方向と「手動」を変更できます。 コマンド:switchおよびpointerはこれを行います。

チームと色の間の移行を一致させる


最初の列-影の変化、残りの部分-明るさの変化。 それぞれゼロ、1つ暗い、2つ暗い。
0-押すポップ
1加える引く掛ける
2割るmodじゃない
3大きいポインタスイッチ
4複製するロールin(int)
5in(char)out(int)out(char)

基本的なコマンドのリストと説明


push-前のブロックのピクセル数をスタックに追加します;
pop-スタックから要素を抽出してスローします。
減算、加算、除算、乗算、mod-算術演算はスタックの2つの上位要素で実行され、結果はスタックに書き込まれます。
not-スタックの一番上の要素の値を読み取り、ゼロ(値がゼロでない場合)または他の場合は1に置き換えます。
大きい -2ピースの量で上位要素を抽出し、最初に大きい場合はスタック1に、大きい場合は0をスタックに追加します。

残りのチームはここにいます

ここでピート紹介を読んでください。


フィボナッチ数






画像のプログラムは、最初の100個のフィボナッチ数を表示します。 各エンコーダーの1つの画像には1ピクセル、もう1つの画像には121ピクセルがあります。黒い線はプログラムの進行状況を示しています。 左上隅から始めます。 エラーが含まれる場合があります。 どれが見つかりますか?

ユークリッドアルゴリズム




クリント・ヘロンによる投稿。 プログラムの目標は、整数のペアの最大の共通因子を決定することです。 行番号は作成者自身のタグであり、中央は操作、右側の列はスタックのおおよその値です。

プログラムリスト

01: m = in(number) m 02: n = in(number) nm 03: dup nnm 04: push 3 3nnm 05: push 1 13nnm 06: roll nmn 07: r = m % n rn 08: dup rrn 09: push 1 1rrn 10: greater 0rn 11: not 1rn 12: switch (stay left if it's not greater than 1, otherwise turn right) rn LEFT PATH L1: dup rrn GUIDE TO OLD CODE AT 03: RIGHT PATH R1: pop n R2: out(number) 

そして、これは階乗を計算するためのコードです。



ここでいくつかのより興味深い抽象的な写真。

異なる言語で書かれた通訳者


C- npietで

Npietは、「。gif」、「。ppm」、「。png」の形式のプログラムを処理するインタープリターです。 ディストリビューションには、npieteditと呼ばれる視覚的なプログラムエディターが含まれています。



これにより、ブロック内の次の色を自動的に選択できます。 エディターは、現在のブロックの色と必要なコマンドを考慮します。 アーカイブには翻訳者foogol-> Pietもあります。

» C ++のインタープリター
» Rubyの通訳
» AuotHotkeyの通訳
» Pythonに関するPeteのインタープリターテキストファイル-タスクは複雑になっています。
» Piet on Pearlの通訳ドキュメント 。 英語で。
» その他のツール

Source: https://habr.com/ru/post/J313152/


All Articles