Wszyscy znamy, a przynajmniej słyszeliśmy o pieprzeniu mózgu , jednym z najbardziej znanych i wpływowych języków ezoterycznych. Podczas gdy obecnie większość implementacji używa nieskończonej taśmy, oryginalny kompilator Urban Müller miał taśmę 30000 komórek. Mało znanym faktem * jest to, że na końcu taśmy znajduje się specjalna wartość, z którą prawie nigdy nie wchodzi się w interakcję w typowym programie do pieprzenia mózgu.
Chociaż możesz wydrukować tę wartość za pomocą 29999 >
si A .
, brainfuck jest znany z krótkich i zwięzłych rozwiązań, więc Twoim celem jest wydrukowanie tej wartości z minimalną liczbą znaków.
*fikcja
Zasady:
- Odświeżenie instrukcji pieprzenia mózgu:
+
/-
: Zwiększanie / zmniejszanie bieżącej komórki, zawijanie od 255 do 0, gdy 255 jest zwiększane i odwrotnie<
/>
: Przesuń wskaźnik w lewo / w prawo na taśmie.
: Wydrukuj wartość bieżącej komórki.[
: Przejdź do odpowiedniego,]
jeśli wartość w komórce wynosi 0]
: Przejdź do odpowiedniego,[
jeśli wartość w komórce nie jest równa 0
- W tym przypadku
,
(Pobierz dane wejściowe) nic nie robi, ponieważ oryginalny kompilator pozostawia komórkę bez zmian w EOF, a ten program nie powinien otrzymywać żadnych danych wejściowych. - Taśma jest początkowo wypełniona wszystkimi zerami, z wyjątkiem komórki 30000, która zawiera nieznaną wartość
- Wskaźnik zaczyna się od komórki 1 i powinien kończyć się na komórce 30000 po wydrukowaniu go.
- Komórki po lewej stronie 1 i po prawej stronie 30000 mają niezdefiniowane zachowanie, więc rozwiązania nie powinny odwiedzać tych komórek.
- Należy zauważyć, że wartość na 30000
tomoże być 0, więc po prostu zapętlenie aż trafisz niezerowej komórka nie będzie działać. - Powinieneś wydrukować tylko wartość z komórki 30000
- Najkrótsze rozwiązanie wygrywa!
- Tie-breaker jest bardziej wydajnym programem (wykonuje się w najmniejszej liczbie kroków), po którym następuje najszybszy czas przesyłania.
Wskazówka: Esolanging Fruit sugeruje użycie https://copy.sh/brainfuck do przetestowania kodu. Specyfikacje są zgodne z opisem w tym wyzwaniu i możesz wybrać tę abort
opcję, aby program zatrzymał się, jeśli przekroczy on granice.
.
. Wygrałem.Odpowiedzi:
54 bajtów
119 x 252 = 29988. Prosto zagnieżdżona pętla.
Użyłem tego narzędzia do sprawdzenia, czy wskaźnik zatrzymuje się na 29999.
źródło
50 bajtów
Wypróbuj tutaj!
Pierwsza sekcja (
>+[>+[<]>->+]>-<<
) ustawia taśmę jakoNastępna sekcja (
[>>-------[[>]+[<]>-]<<-]
) iteruje 121 razy, dodając 2491
s na końcu taśmy za każdym razem. Jeśli jesteś szybki w matematyce, możesz zauważyć, że 121 * 249 wyników w 301291
s, ale pierwsza iteracja ma resztę 110 do załatwienia i dołącza (110-7
) 1031
s do taśmy, co oznacza, że jest tylko 299831
s. Ostateczna taśma wygląda następująco:I finał
>>>[>]>.
do wydrukowania wartości.Kilka innych ważnych algorytmów:
źródło
81
To przesuwa się o 150 komórek 200 razy.
Jest to znacznie dłużej, niż chciałbym, i istnieje poważna przeszkoda w grze w golfa:
Nie wiem już, dlaczego pracuję.
Jest to zaśmiecone rekompensatami za off-by-one do tego stopnia, że niektóre z nich prawdopodobnie mogłyby się anulować. Dodałem i usunąłem różne segmenty tak bardzo, że nie pamiętam już, dlaczego umieszczam pewne rzeczy tam, gdzie one są (na przykład, dlaczego pierwsza część inicjuje komórki taśm na 199 i 151 zamiast 200 i 150?).
Oto i tak moja skomentowana wersja tej potworności, w nadziei, że ja (lub ktoś inny) może się im przydać:
źródło
.
, czy to pomogłoby?