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.