Joe jest twoim przeciętnym programistą BF. Ma zamiar sprawdzić zmiany swojego kodu w repozytorium, gdy otrzyma telefon od swojego szefa. „Joe! Maszyna nowego klienta jest zepsuta! Interpretator ustawia wszystkie komórki na losowe wartości przed wykonaniem programu. Nie ma czasu na naprawę, twój kod będzie musiał sobie z tym poradzić.” Joe nie myśli o tym zbyt wiele i ma zamiar napisać program, który wyzeruje pierwszy milion komórek, gdy jego szef ponownie mu przerywa - „... i nie myśl o użyciu brutalnej siły, kod musi być tak mały, jak to możliwe. ” Teraz musisz pomóc biednemu Joe!
Dane techniczne
- Otrzymasz jakiś poprawny kod pieprzenia mózgu jako dane wejściowe
- Twój program następnie zmodyfikuje kod, aby działał na losowym interpretatorze pieprzenia mózgu
- Oznacza to, że przed wykonaniem programu komórki można ustawić na dowolną wartość.
- Nowy program powinien mieć dokładnie takie samo zachowanie bez względu na warunki początkowe.
- Interpretator będzie miał maksymalną wartość 255 z owinięciem i taśmę o nieskończonej długości.
Punktacja
Twój wynik to 10-krotność wielkości kompilatora w bajtach plus suma rozmiarów przypadków testowych . Najniższy wynik oczywiście wygrywa. Aby złagodzić optymalizację przypadków testowych, zastrzegam sobie prawo do zmiany przypadków testowych, jeśli coś podejrzewam, i prawdopodobnie zrobi to przed wyborem zwycięzcy.
Przypadki testowe
(Mam je ze strony esolangs i tej strony: http://www.hevanet.com/cristofd/brainfuck/ ). Również dzięki @Sparr za ostatni przypadek testowy.
- Witaj świecie:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
- Odwrotne wejście:
>,[>,]<[.<]
- Powers of Two (Infinite Stream):
>++++++++++>>+<+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<]>.>[->[ <++>-[<++>-[<++>-[<++>-[<-------->>[-]++<-[<++>-]]]]]]<[>+<-]+>>]<<]
- Kwadraty poniżej 10000:
++++[>+++++<-]>[<+++++>-]+<+[>[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+>>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]<<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]
- Strumień Fibonacciego:
>++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<]
- Sekwencja ASCII do danych wejściowych:
,[.[>+<-]>-]
(Ta wymaga różnych liczb komórek w zależności od danych wejściowych)
Odpowiedzi:
sed, 46-bajtowy kompilator
Dopiero po napisaniu programu nie zauważyłem, że wyjście miało być golfem, więc wybiorę krótki kompilator. Również testowanie było zbyt pracochłonne, więc proszę powiadomić, jeśli nie działa poprawnie :)
źródło
C ++
Rozmiar kompilatora: 630 bajtów (-10 bajtów dzięki Zacharýowi)
Rozmiar wyniku kompilacji Hello World: 139
Kwadrat poniżej 10000: 319
Kompilator:
Randomizowany tłumacz pieprzony mózg:
Niektóre uwagi:
źródło
pii
naP
i zmieniając definicjęR
nam[p<0?p%30000+30000:p]
oraz odpowiednio modyfikując wszystkie połączenia / odniesienia do nich. Zmodyfikował także przypadki testowe. Nie sprawdziłem tego, ale może zaoszczędzić trochę bajtów, aby zdefiniować coś30000
, ponieważ tak często go używasz.R
dom[p<0?p%S+S:p]
pracy?R
powinno zaoszczędzić kilka bajtów.rs , 33 bajty, wynik: 2659
Przeważnie tylko prosty port
sed
odpowiedzi.źródło