「Piet」の版間の差分

編集の要約なし
imported>Administrator
 
(他の1人の利用者による、間の1版が非表示)
2行目: 2行目:


==概要==
==概要==
* 画像の左上の画素から右側に[[実行]]される。
* 画像の左上の[[画素]]から右側に[[実行]]される。
* 「ソースコード」にはあらかじめ決められた20色を使用する。
* 「[[ソースコード]]」にはあらかじめ決められた20色を使用する。
* 白黒以外の色から別の白黒以外の色に実行位置が移るとき、その色の組み合わせに対応する[[命令]]が実行される。
* 白黒以外の色から別の白黒以外の色に実行位置が移るとき、その色の組み合わせに対応する[[命令]]が実行される。
* 実行位置の次の色への移動は、一定の法則に従って今の色が四方向に連続している領域の「隅」から行われる。
* 実行位置の次の色への移動は、一定の法則に従って今の色が四方向に連続している領域の「隅」から行われる。
9行目: 9行目:
* 画像の外側や黒色の画素には移動できない。
* 画像の外側や黒色の画素には移動できない。
* 前に進めなくなったら基本的に時計回りに曲がろうとし、何回曲がっても次の領域に進めなくなったら終了する。
* 前に進めなくなったら基本的に時計回りに曲がろうとし、何回曲がっても次の領域に進めなくなったら終了する。
* データの保存や計算はすべて[[スタック]]上で行う。
* [[データ]]の保存や計算はすべて[[スタック]]上で行う。
* スタックに数値をプッシュする命令を使用するとき、プッシュされる値として命令の実行直前にいた領域の面積が使用される。
* [[スタック]]に数値をプッシュする命令を使用するとき、プッシュされる値として命令の実行直前にいた領域の面積が使用される。


ここで述べたのはあくまで概要である。正式な仕様は[http://www.dangermouse.net/esoteric/piet.html 公式ページ]で確認してほしい。
ここで述べたのはあくまで概要である。正式な仕様は[http://www.dangermouse.net/esoteric/piet.html 公式ページ]で確認してほしい。
18行目: 18行目:
右の画像は、与えられた整数が[[コラッツの問題]]の計算で1になるまでのステップ数を計算するPietプログラムである。
右の画像は、与えられた整数が[[コラッツの問題]]の計算で1になるまでのステップ数を計算するPietプログラムである。


このプログラムを起動すると、整数の入力を求められる。
この[[プログラム]]を起動すると、[[整数]]の入力を求められる。
標準入力から整数を入力すると、その整数がコラッツの問題の計算で1になるまでのステップ数が出力され、
[[標準入力]]から[[整数]]を入力すると、その整数が[[コラッツの問題]]の計算で1になるまでのステップ数が出力され、
その後改行が出力される。
その後[[改行]]が出力される。
 
ただし、計算の途中で[[オーバーフロー]]を検知した場合は-1が出力される。
ただし、計算の途中で[[オーバーフロー]]を検知した場合は-1が出力される。


==テクニック==
==テクニック==
ここで紹介するテクニックは、主にPiet[[初心者]]を対象としたものです。
ここで紹介するテクニックは、主にPiet[[初心者]]を対象としたものです。
中級者以降は自分で考え、芸術的なコードの作成を目指す方がいいでしょう。
中級者以降は自分で考え、芸術的な[[コード]]の作成を目指す方がいいでしょう。
(この記述は中級者以降がここで紹介するテクニックを利用することを禁止するものではありません)
(この記述は中級者以降がここで紹介するテクニックを利用することを禁止するものではありません)


38行目: 39行目:
* そもそも領域の幅を1ピクセルにし、「どっちの隅」と考える必要をなくす。
* そもそも領域の幅を1ピクセルにし、「どっちの隅」と考える必要をなくす。


また、プログラムの実行とは関係ない領域を黒で埋めておくと、流れがわかりやすくなるでしょう。
また、[[プログラム]]の実行とは関係ない領域を黒で埋めておくと、流れがわかりやすくなるでしょう。


===分岐は2方向にする===
===分岐は2方向にする===