Twoim wyzwaniem jest zminimalizowanie kodu Brainfuck zgodnie z następującymi zasadami:
- Usuń wszystko, co nie jest jednym z
+-><[].,
. - Dla każdej grupy z rzędu
+
lub-
znaków, jeśli ilość+
S i-
S jest taki sam, należy je usunąć. - Zrób to samo co powyżej, ale używając
>
i<
. - Usuń sekwencje
+-><
znaków, jeśli nic nie robią. Na przykład powinieneś usunąć+>-<->+<
. (Może to być najtrudniejszy i najtrudniejszy do wdrożenia.) Upewnij się, że nie otrzymujesz żadnych fałszywych alarmów, takich jak+>-<+>-<
, których nie należy usuwać.
Przypadki testowe:
Wkład
++++++[->++++++<]>. prints a $
[-]< resets tape
>,[>,]<[.<] reverses NUL terminated input string
++-->><< does nothing
Wydajność
++++++[->++++++<]>.[-],[>,]<[.<]
Wkład
Should disappear: ++>>+<+++<->-->-<<->-<
Should disappear: +++>-<--->+<
Should stay: +++>-<+>---<
Wydajność
+++>-<+>---<
Możesz zaakceptować wejście i wyjście, jakkolwiek chcesz - stdin / stdout, funkcja itp., Ale wejście może nie być zakodowane na stałe.
To jest golf-golf , więc wygra najkrótszy kod w liczbie znaków.
+++>-<+>---<
? Można go skrócić, aby uniknąć niepotrzebnego ruchu wskaźnika, ale oczekiwany wynik pozostawia go bez zmian. Rozumiem na podstawie zarówno pytania, jak i odpowiedzi, że Klamka jest fajna, a specyfikacja jest luźna; musimy wyeliminować wszelkie ciągłe +-><
sekwencje no-op , jak to wyraźnie zaznaczono, a poza tym dopuszczalne jest dodatkowe minimalizowanie, jak w twoim przykładzie ++>>++<<--
, i możemy również dokonywać zmian, o ile nie zmieniają one funkcjonalności kodu, np. >+<+
w +>+<
.
+>-<->+<
. (Może to być najtrudniejszy i najtrudniejszy do wdrożenia.) Upewnij się, że nie otrzymujesz żadnych fałszywych trafień, takich jak +>-<+>-<
, których nie należy usuwać ”. - to trochę niejasne
++>>++<<--
powinien generować>>++<<
, a to nie było objęte. Dodaj więcej przypadków testowych.