Ihre Herausforderung besteht darin, den Brainfuck- Code gemäß diesen Regeln zu minimieren :
- Entfernen Sie alles, was nicht dazu gehört
+-><[].,
. - Wenn die Anzahl von s und s für eine Gruppe von aufeinanderfolgenden Zeichen
+
oder-
Zeichen gleich ist, entfernen Sie sie.+
-
- Machen Sie dasselbe wie oben, aber mit
>
und<
. - Entfernen Sie die
+-><
Zeichenfolgen, wenn Sie nichts tun. Zum Beispiel sollten Sie entfernen+>-<->+<
. (Dies kann die schwierigste und schwierigste Implementierung sein.) Stellen Sie sicher, dass Sie keine falsch positiven Ergebnisse erhalten+>-<+>-<
, die nicht entfernt werden sollten.
Testfälle:
Eingang
++++++[->++++++<]>. prints a $
[-]< resets tape
>,[>,]<[.<] reverses NUL terminated input string
++-->><< does nothing
Ausgabe
++++++[->++++++<]>.[-],[>,]<[.<]
Eingang
Should disappear: ++>>+<+++<->-->-<<->-<
Should disappear: +++>-<--->+<
Should stay: +++>-<+>---<
Ausgabe
+++>-<+>---<
Sie können Eingaben und Ausgaben akzeptieren, wie Sie möchten - stdin / stdout, eine Funktion usw., aber die Eingaben sind möglicherweise nicht fest codiert.
Dies ist Code-Golf , also gewinnt der kürzeste Code in der Anzahl der Zeichen.
+++>-<+>---<
? Sie kann verkürzt werden, um unnötige Zeigerbewegungen zu vermeiden. Die erwartete Ausgabe lässt sie jedoch unverändert. Mein Verständnis basiert darauf, sowohl die Frage als auch die Antworten zu betrachten, dass Doorknob cool ist, wenn die Spezifikation locker genommen wird; Wir müssen alle zusammenhängenden No-Op- +-><
Sequenzen entfernen, wie explizit angegeben, und darüber hinaus ist es zulässig, zusätzliche Minimierungen wie in Ihrem Beispiel vorzunehmen. ++>>++<<--
Wir können auch Neuanordnungen vornehmen, solange sie die Funktionalität des Codes nicht ändern, z. B. >+<+
in +>+<
.
+>-<->+<
. (Dies ist möglicherweise die schwierigste und schwierigste Implementierung.) Stellen Sie sicher, dass Sie keine falsch positiven Ergebnisse erhalten +>-<+>-<
, z. was nicht entfernt werden sollte. " - das ist irgendwie vage
++>>++<<--
sollte ausgeben>>++<<
, und das wurde nicht abgedeckt. Bitte fügen Sie weitere Testfälle hinzu.