Jaki jest najlepszy kod BrainFuck (pod względem wielkości kodu), aby wydrukować „A” 1000 razy?
Moje podejście to:
- ustaw „A” na p [0]
- ustaw 255 na p [1], aby wyświetlić 255 'A', 3 razy
- ustaw 235 na p [1], aby wyświetlić 235 „A”
To nie jest skuteczne, ale nie mogę znaleźć sposobu na jednoczesne używanie liczników holowania, jak na mnożeniu
Czy istnieje lepsze podejście niż pomnożenie?
Bardziej ogólne pytanie: czy istnieje zasada mnożenia przez dużą liczbę najmniejszym możliwym kodem?
+
znaków lub po prostu najwyższą zwięzłość?Odpowiedzi:
Metoda, której obecnie używasz, to 39 bajtów:
>>+++[<-[-<.>]>-]++++[<----->-]<-[-<.>]
(nie w tym uzyskanieA
) ( Wypróbuj online! )(zapętl 3 razy, za każdym razem ustaw licznik na 255 i wydrukuj tyle razy, a następnie odejmij 20, odejmij 1 i wydrukuj tyle razy)
Jednak znacznie krótsza jest pętla 250 razy i drukowanie 4 razy za każdym razem (dzięki jimmy23013 za optymalizację tego w porównaniu z moim oryginalnym rozwiązaniem loop-4 loop-250 print-1):
>------[<....>-]
(16 bajtów)Jeśli twoje komórki są niezwiązane (zakładam, że są 8-bitowe, inaczej prawdopodobnie nie spróbowałbyś użyć 255 do gry w golfa):
>>++++++++++[<++++++++++[<..........>-]>-]
(42 bajty).źródło
....
byłoby krótsze.47 bajtów (bez niedomiarów)
Właśnie zrobiłem to rozwiązanie w 47 bajtach. Próbowałem to zrobić w inny sposób niż normalnie próbowałem zaoszczędzić miejsce, żonglując licznikami między dwiema wartościami. Zakłada się, że A jest wstępnie załadowany do p [4].
Wyjaśniono
źródło
najkrótszym sposobem na uzyskanie liczby 65 dla „A” jest
>+[+[<]>>+<+]>
, a następnie dodajesz HyperNeutrino>------[<....>-]
na końcu tego. więc pełny kod staje się>+[+[<]>>+<+]>>------[<....>-]
(30 bajtów)źródło
>+[+[<]>>+<+]------[>....<-]