Twoim zadaniem jest napisanie kodu zerującego bieżącą komórkę w wariancie Brainfuck, który, każda komórka, może zawierać podpisaną liczbę całkowitą o dowolnie dużej wielkości, zamiast normalnej wartości od 0 do 255.
Można założyć, istnieje l komórki do lewej i r komórek na prawo od bieżącej komórki, które są początkowo zero. Program możesz przejść tylko te l + r +1 komórek. Po swoimi końcami kod powinien on opuścić l + r dodatkowe komórki zero i wskaźnik do bieżącej komórki w pierwotnej pozycji.
Nie możesz używać żadnego wejścia / wyjścia.
Kod z najmniejszym l + r wygrywa. W przypadku remisu wygrywa najkrótszy kod. Zaleca się również podanie złożoności czasowej programu w celach informacyjnych, gdzie n jest wartością bezwzględną oryginalnej liczby całkowitej w bieżącej komórce.
Użyteczne narzędzia
Możesz przetestować program Brainfuck w tej odmianie, używając tego interpretera na TIO przez mbomb007 .
Możesz również użyć interpretera w tej odpowiedzi przez boothby (inne odpowiedzi w Pythonie prawdopodobnie również działają, ale nie testowałem).
źródło
Odpowiedzi:
l + r = 0 + 2 = 2,
555351 bajtówl + r = 1 + 2 = 3,
4644 bajtówMój własny algorytm. Wskaźnik powinien zaczynać się od liczby, którą należy wyzerować. Złożoność czasowa wynosi O (n ^ 2).
Jak to działa:
n
.n+1
.n+1-2 = n-1
n-1+3 = n+2
.n+2-4 = n-2
.Powtarzamy ten proces, zwiększając przyrost / spadek z każdym krokiem, aż otrzymamy zero.
źródło
l + r = 0 + 2 = 2; 58 bajtów
Złożoność wynosi O (n ^ 2).
Oto mój generator programu testującego, więc możesz zobaczyć, że próbowałem go przetestować na wypadek, gdyby nie działał ...
źródło