Brainfuckコードを書くとき、デバッグを促進するために必要以上に長くする必要があると感じることがあります。><
そこにa を入れるだけでそれを行うことができますが、それは何が楽しいですか?コードを読んでいる人を混乱させるために、NOPeyをもっと長くする必要があります。
Brainfuckの簡単な紹介
Brainfuckは、1993年にUrbanMüllerによって作成された難解なプログラミング言語であり、極端なミニマリズムが特徴です。(ウィキペディア)
Brainfuckは、8つのコマンドに基づく言語です+-><,.[]
。コードはチューリングマシンのようなもので実行されます。値を変更できる無限のテープです。この課題では、最初の4つに焦点を当てます。
+ increment the value at the pointer
- decrement the value at the pointer
> move the pointer right
< move the pointer left
Brainfuck NOP
Brainfuck NOPは、任意の状態から実行されたときに状態に変化をもたらさない一連のBrainfuckキャラクターです。これらは上記の4文字で構成されています。
チャレンジ
課題は、実行されたときに、指定された長さのランダムなBrainfuck NOPを生成するプログラムまたは関数を作成することです。
入力
入力として非負の偶数整数を受け取りますn
。(NOPは奇数には不可能ですn
。)
出力
あなたは長さのランダムなBrainfuck NOPを出力しますn
。
ルール
- NOPの定義:プログラムの出力がBrainfuckプログラムの任意のポイントに挿入された場合、そのプログラムの動作は決して変化してはなりません。つまり、インタープリターの状態を変更してはなりません。
- たとえば
+>-<
、2つのセルの値を元に戻すことなく変更するため、これは正しくないことに注意してください。投稿する前にこれらのソリューションをテストしてください。 - また、これ
+>-<->+<
はNOPであり、を削除するだけでは何にも削減できないことに注意してください><
<>
+-
-+
。したがって、これらを相互に挿入するだけのアルゴリズムは使用できません。
- たとえば
- 長さのすべての有効なNOPには
n
、出力に表示されるゼロ以外のチャンスが必要です。ただし、分布は均一である必要はありません。 - 問題のブレインファックインタープリターには、任意精度セルの二重無限テープがあります。つまり、両方向に無限に移動し、各セルを無制限にインクリメント/デクリメントできます。
- プログラムは、私のマシンで= 100の場合、1分以内に
n
終了する必要があるため、可能なすべてのNOPを生成して選択することはありません。 - 無効な入力(非整数、負、奇数など)が与えられた場合、クラッシュを含め、好きなことを行うことができます。
得点
これはcode-golfであるため、バイト単位の最短回答が優先されます。
例
以下は、n
= 4の有効な出力です。
++-- +-+- +--+ --++ -+-+ -++-
>><< ><>< ><<> <<>> <><> <>><
><+- ><-+ <>+- <>-+
>+-< >-+< <+-> <-+>
+><- -><+ +<>- -<>+
+->< -+>< +-<> -+<>
以下に、n
= 20のいくつかの可能な出力を示します。
+>>->+<->-<<<->>++<<
>+>-<+<->+-<>->+<-<+
+--+-++--++-+--+-++-
>>>>>>>>>+-<<<<<<<<<
.
副作用,
があり、を使用しないと回復できない値を上書きします[]
。しかし[]
、値をゼロに設定することになります。また[]
、影響を受けるセルが最初からゼロであったことが確実でない限り、これは値を上書きします(したがって、回復するために別のものが必要になります)。ただし、そのようなセルをのようなもので検索する必要があり[>]
、元の位置に確実に戻ることは不可能です。
+-<>
:あなたが尋ねたようにa