Mam problem z cyber klubem, który prosi o wydrukowanie:
ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
Używanie Brainf ** k w 29 bajtach lub mniej bez użycia znaku „,”.
Mam działający kod:
++++++++++[>++++++>+++++++++<<-]>-->.<[>-.<-]
Jednak moja pętla jest za długa, wysyłając mi 16 bajtów ponad limit.
Czy istnieje bardziej skuteczny sposób na ustawienie drugiej i trzeciej komórki na 58 i 90, aby móc uruchomić drugą pętlę? Czy jest lepszy sposób, aby zrobić to wszystko razem, czego po prostu nie widzę?
-.
się.-
, upuszczając>.<
.+[--->++<]>++++[.-]
19 bajtów, ale drukuje również znaki kontrolne ...Odpowiedzi:
2724 bajtówSpędziłem cały dzień w zasadzie na pisaniu brutalnego forcerka i obserwowaniu wyników. Teraz mogę wrócić do prawdziwej pracy ...Kolejny dzień brutalnego zmuszania później ...Wypróbuj online!
Komponent
++[<++[++<]>>>+]
inicjuje taśmę doktóry jest po prostu idealny do tego, czego potrzebujemy!
źródło
+[[>++<<]>->+>+]<[-<-.>]
30 bajtów
Wypróbuj online!
85 i 171 są dość łatwe do wygenerowania w przelotnym mózgu (modułowe odwrotności 3 i -3 ). 85 jest dość bliskie 90 , a 171 jest dość bliskie 177 ( 59,3 ), który jest tutaj używany. Przy odrobinie włamań jestem w stanie wyprodukować 88 i 176 .
Jednak wciąż brakuje o jeden bajt celu.
Inne sugestie
Ogólnie rzecz biorąc, krótsze jest iterowanie po liście, mnożenie przez stałą, a nie w drugą stronę. Jest to szczególnie prawdziwe w przypadku 3 lub więcej wartości. Na przykład:
można zapisać jako:
Były tylko dwie wartości wewnętrzne, więc w tym przypadku nie jest to duża poprawa. W rzeczywistości tylko refaktoryzacja jest o jeden bajt krótsza:
Mnożenie 30 przez 2 i 3 , a nie 10 przez 6 i 9 . Zgodnie z sugestią Martina Büttnera jest to już 38 bajtów, bez większych zmian w oryginale:
źródło
34 bajty
Zapisałem ci 11 bajtów, ale wciąż o 5 bajtów za długo ...
Spędziłem już godziny, mam nadzieję, że ktoś może to poprawić.
źródło