こんにちはBrainfuck!

Brainfuck-チューリングは完全な言語です。つまり、その上にプログラムを書くことができ、まったく書くことができます:)そして、「Hello World」またはむしろいくつかを書きます;)



はじめに



Brainfuckは8チームのみで構成されています。







通訳者





Brainfuckで記述されたプログラムを実行するには、次を使用できます。





こんにちはBrainfuck!





テキスト「Hello World!」を出力する最初のBrainfuckプログラムを作成しましょう。 アルゴリズムは簡単です:

1.目的の文字に等しくなるまでセルの値を増やします

2.セルに値を表示します(シンボル)

3.次のセルに移動する

4.すべての文字が表示されるまで繰り返します。



結果:

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++。> ++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++

+++++++++++++。> +++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++。> ++++++ +++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++。> +++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++

+++++++++++++++++++++++。> +++++++++++++++++++++++++++ ++++++。> +++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++。> ++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++

+++++++++++++++。> +++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++ 。> +++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++。>

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++

+++++++++++++++++++。> ++++++++++++++++++++++++++++++ ++++。





また、phpでアルゴリズムを実装します。スクリプトはBrainfuckのソースコードを生成し、目的のテキストを表示します。

$ text =“ Hello、world!”;

$ length = strlen($ text);

for($ i = 0; $ i <$ length; $ i ++){

$ curr = ord($ text [$ i]);

for($ j = 1; $ j <= $ curr; $ j ++){

エコー "+";

if($ j == $ curr&$ i!= $ length-1){

echo "。>";

} elseif($ j == $ curr){

エコー "。";

}

}





「Hello World!」サイズがかなり大きいので、最適化してみましょう。 毎回新しいセルに移動して、最初から目的の文字への「パス」を開始する必要はありません-セルの現在の値を使用できます。 新しいアルゴリズム:

1.目的の文字に等しくなるまでセルの値を増やします

2.セルに値を表示します(シンボル)

3.次の目的の文字が現在の文字よりも大きい場合は、セルの値を増やし、少ない場合は目的の文字が得られるまで値を減らします

4.セルに値を表示します(シンボル)

5.すべての文字が表示されるまで、手順3から繰り返します



結果:

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++。+++++++++

++++++++++++++++++++++。+++++++ .. +++ .--------------- -------------------------------

---------------------------------。+++++++++++++++++ +++++++++++++++++++++++++++++++++

++++++++。+++++++++++++++++++++++++。+++。------ .----- ---.---------------------------

----------------------------------------。




すでに小さい:)同様のソースを生成するphpコードは次のとおりです。

$ text =“ Hello、world!”;

$ length = strlen($ text);

$ curr = 0;

for($ i = 0; $ i <$ length; $ i ++){

$ delta = ord($ text [$ i])-$ curr;

$ curr = ord($ text [$ i]);

if($ delta <0){

$ op = "-";

$ delta = abs($ delta);

} else {

$ op = "+";

}

for($ j = 1; $ j <= $ delta; $ j ++){

echo $ op;

}

エコー "。";

}





Brainfuckで結果のコードを最適化することは可能ですか? できます! ここで再びいくつかのセルを使用しますが、乗算を実装して使用します。 そして、これまで使用されていなかったチームが[そして]これに役立ちます。 乗算-合計を使用して、5 * 10 = 10 + 10 + 10 + 10 + 10 + 10。 つまり、セルへの10の追加を5回繰り返す必要があります。 プログラムアルゴリズム:

1. 10に等しくなるまでセルの値を増やします-サイクルのカウンター、乗数

2.サイクルが始まります[

3. n-目的の文字のコードを10で整数除算した結果に等しくなるまで、セルの値を増やします。

4.次のセルに移動します

5.すべてのキャラクターについてステップ3〜4を繰り返します。

6.サイクルカウンターを減らす(最初のセル)

7.サイクルは終了しました]

8.カウンターの次のセルに移動します。

9.セルに目的の文字のコードの整数除算の10による余りを追加します(セルの「H」の場合は70になり、2 = 72%を追加する必要があります10.つまり、最終的に「H」=(72/10)+(72% 10))

11.セル(シンボル)に値を表示し、次のセルに移動します

12.すべてのキャラクターについてステップ9〜11を繰り返します。



結果:

++++++++++ [+ +++++++> +++++++++++ +++++++++++ +++++++++ ++> +++++++++++> +++> ++++++++> +++

++++++++> +++++++++++> +++++++++++ +++++++++++ +++ <<<< <<<<<<<<-]> ++。> +。> ++++++++。> ++++++++。> +。> ++。> +++++ ++。> +。> ++++。> ++++++++。>。> +++。



出来上がり! PHPジェネレーターコード:

$ text =“ Hello、world!”;

$ length = strlen($ text);

echo "++++++++++ [";

for($ i = 0; $ i <$ length; $ i ++){

エコー ">";

$ ops = floor(ord($ text [$ i])/ 10);

for($ j = 1; $ j <= $ ops; $ j ++){

エコー "+";

}

}

for($ i = 0; $ i <$ length; $ i ++){

エコー "<";

}

echo "-]";

for($ i = 0; $ i <$ length; $ i ++){

エコー ">";

$ ops = ord($ text [$ i])%10;

for($ j = 1; $ j <= $ ops; $ j ++){

エコー "+";

}

エコー "。";

}





まとめ





ここに、Brainfuckのこのような興味深い素晴らしい言語があります:)結論として、私はBrainfuck自身について書かれたジェネレータを提供します。 このプログラムは入力されたテキストを読み取り、このテキストを印刷するBrainfuck(最適化された)コードを生成します。

>>>>>>>> ++++++++++++++++++++++++++++++++++++++++++++++ +>

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++

+++++++++++++++++++++++++++++++++++> ++++++++++++++++ ++

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++

+++++++++++++++++++++++++ +++++++++++++++++++++++++++ ++

+++++++++++++++++++++++++++++++++++++++ +++++++++++++++ ++

++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++

++++++++++++++++++++++++++++++++++++++++++ <<<<<<<<<<<< <<

、---------- [++++++++++ >>>>>>>> .......... >>。>>。<<<< <<

<<<< [-] ++++++++++ << [> + >>>> + <<<<<-] >>>>> [<<<<< + >>>> >-

] <<<< >> [-]> [-] << [>> +> + <<<-] >>> [<<< + >>>-] >> [-] <<<<< <[

>>>> + >> + <<<<<<-] >>>>>> [<<<<<< + >>>>>>-] <<< [>> +> + <<< -]

>>> [<<< + >>>-] [-] << [>> [-] <[> [-] + <[-]] <[-]]> [-]> [<<< <<

<-> >>->>> [-] <<<<<< [>>>> + >> + <<<<<<-] >>>>>> [<<<<<< +> >>

>>>-] <<< [>> +> + <<<-] >>> [<<< + >>>-] [-] << [>> [-] <[> [-] + <[

-]] <[-]]> [-]>] <<<<<< [>> + <[>> +> + <<<-] >>> [<<< + >>>-]> > [

-] <<<<<< [>>>> + >> + <<<<<<-] >>>>>> [<<<<<< + >>>>-] <<< [>

> +> + <<<-] >>> [<<< + >>>-] [-] << [>> [-] <[> [-] + <[-]] <[-]] > [

-]> [<<<<< <-> >>->>> [-] <<<<<< [>>>> + >> + <<<<<<-] >>>>>> [<

<<<<< + >>>>>>-] <<< [>> +> + <<<-] >>> [<<< + >>>-] [-] << [>> [ -]

<[> [-] + <[-]] <[-]]> [-]>] <<<<<<> >>> [> +> + <<-] >> [<< + >> -]

[-] + <[> [-] << [<<->>-] << [>> + <<-] >>> [-]]> [<<< + <[-] >>> > [

-]] <<< [->>>>>。<<<<<] >>>>>>>>>>。<<<<。>>。>。<<<<<<<<< [ ->

>>>。<<<<] >>>>>>>>>>。<<<<。<。>>。>>。<<<<<<<<<<<<<<、--- -

-----]



All Articles