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;。正解です。(申し訳ありませんが、私はこの答えが古いことを知っています!)