Smallfuck ist eine Brainfuck-ähnliche Sprache mit 1-Bit-Zellen. Es hat die folgenden Anweisungen:
> 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 fügt noch eine Anweisung hinzu:
? Nondeterministically set the current bit to 0 or 1.
Ein Whatfuck-Programm nimmt keine Eingabe entgegen. Es kann zu einer von drei Möglichkeiten führen: 1
(akzeptieren), 0
(ablehnen) oder es kann niemals aufhören.
Das Programm führt dazu, dass 1
eine für ?
s ausgewählte Folge von Bits vorhanden ist, was dazu führt, dass das Programm 1
als aktuelles Bit endet .
Das Programm endet mit, 0
wenn alle möglichen Auswahlmöglichkeiten mit dem aktuellen Bit enden 0
.
Wenn einige Auswahlmöglichkeiten nicht beendet werden und alle Auswahlmöglichkeiten damit beendet werden 0
, wird das Programm niemals beendet.
Ihr Dolmetscher sollte alle Möglichkeiten gleichzeitig ausführen. Sie können es nicht 0
zuerst versuchen und dann versuchen 1
, da einige Programme nicht beendet werden, wenn sie sollten. *[?*]*
Wird zum Beispiel mit der Auswahl akzeptieren 1
, aber niemals beenden, wenn Sie immer wählen 0
.
Als Beispiel ist hier ein Python 2-Interpreter, den ich geschrieben habe, nicht Golf
Regeln
Ihr Dolmetscher muss ein whatfuck-Programm von stdin akzeptieren und das Ergebnis ausdrucken.
Sie können davon ausgehen, dass das whatfuck-Programm nur Zeichen enthält
[]<>*?
Das Array von Bits ist an beiden Enden unbegrenzt.
Der kürzeste Code gewinnt.
Einige Testfälle
Dies schlägt fehl, wenn Ihr Code immer 0
zuerst versucht
*[?*]*
1
Gibt es eine Teilmenge, {-7,-3, 5, 8}
deren Summe 3 ist?
*<<<<<?[<<<<<<<<<<<<<<]?[<<<<<<]?[>>>>>>>>>>]?[>>>>>>>>>>>>>>>>]<
1
Gibt es eine Teilmenge, {-7,-3, 5, 8}
deren Summe 4 ist?
*<<<<<<<?[<<<<<<<<<<<<<<]?[<<<<<<]?[>>>>>>>>>>]?[>>>>>>>>>>>>>>>>]<
0
Gibt es eine Möglichkeit, boolesche Werte zuzuweisen a
, b
und zwar c
so
(a XOR b) AND (a XOR c) AND (b XOR c)
ist wahr?
?[*>*>*<<]?[*>*>>*<<<]?[*>>*>*<<<]>[*>[*>[*>*<]<]<]>>>
0
quelle
t+=(c=='>')-(c=='<');
durcht+=c=='>';t-=c=='<';
, ein weiteres durch ErsetzenB=B+[t]*(c=='*')
durchB+=[t]*(c=='*')
und ein drittes durch Ersetzenp+=1+F.get(p,0)*(1-b)-R.get(p,0)*b;
durchp+=1+F.get(p,0)*-~-b-R.get(p,0)*b;
. Gute Antwort! (Entschuldigung, ich weiß, dass diese Antwort super alt ist!)Unendliches Band ahoi!
Haskell, 516
quelle
Python (
405399379)Es nimmt die Eingabe in einer Zeile, aber ich "kann annehmen, dass das whatfuck-Programm nur Zeichen enthält
[]<>*?
" und newline ist nicht in dieser Liste: P.quelle
.append(item)
->+=[item]
Entfernen Siek
alle Anrufe und ersetzen Sie sie durcha+=[...]
, um einige Zeichen zu speichern.+=item,
was noch kürzer ist.