Smallfuckは、1ビットのセルを備えたブレインファックのような言語です。次の指示があります。
> Increment the pointer
< Decrement the pointer
* Flip the current bit
[ If the current bit is not set, jump to the instruction after the matching ]
] If the current bit is set, jump to the instruction after the matching [
( or just jump unconditionally to matching [ )
Whatfuckはもう1つの命令を追加します。
? Nondeterministically set the current bit to 0 or 1.
whatfuckプログラムは入力を取りません。1
(受け入れ)、0
(拒否)の3つの可能性のいずれかが発生する可能性があり、停止することはありません。
プログラムは1
、?
s に対して選択されたビットのシーケンスが存在する場合に発生します。これにより、プログラム1
は現在のビットとして終了します。
0
すべての可能な選択肢が現在のビット0
で終了する場合、プログラムは終了します。
一部の選択肢が終了せず、終了するすべての選択肢がで終了する0
場合、プログラムは終了しません。
通訳者はすべての可能性を同時に実行する必要があります。一部のプログラムは必要なときに終了しないため、0
最初に試行してからを試行することはできません1
。たとえば、*[?*]*
は選択1
で受け入れますが、常に選択した場合は終了しません0
。
例として、これは私が書いたpython 2インタープリターですが、ゴルフではありません
ルール
通訳者はstdinからwhatfuckプログラムを受け入れ、その結果を出力する必要があります。
whatfuckプログラムには文字のみが含まれていると想定できます。
[]<>*?
ビットの配列は両端で無制限です。
最短のコードが勝ちます。
いくつかのテストケース
コードが常に0
最初に試行する場合、これは失敗します
*[?*]*
1
{-7,-3, 5, 8}
合計が3のサブセットはありますか?
*<<<<<?[<<<<<<<<<<<<<<]?[<<<<<<]?[>>>>>>>>>>]?[>>>>>>>>>>>>>>>>]<
1
{-7,-3, 5, 8}
合計が4のサブセットはありますか?
*<<<<<<<?[<<<<<<<<<<<<<<]?[<<<<<<]?[>>>>>>>>>>]?[>>>>>>>>>>>>>>>>]<
0
ブール値を代入する方法があるa
、b
とc
なるように
(a XOR b) AND (a XOR c) AND (b XOR c)
本当ですか?
?[*>*>*<<]?[*>*>>*<<<]?[*>>*>*<<<]>[*>[*>[*>*<]<]<]>>>
0
t+=(c=='>')-(c=='<');
でt+=c=='>';t-=c=='<';
置換することによって、別の、B=B+[t]*(c=='*')
とB+=[t]*(c=='*')
、と置き換えることにより第三p+=1+F.get(p,0)*(1-b)-R.get(p,0)*b;
とp+=1+F.get(p,0)*-~-b-R.get(p,0)*b;
。正解です。(申し訳ありませんが、私はこの答えが古いことを知っています!)