Wyzwanie polega na przekształceniu tekstu wejściowego w kod wyładowania mózgowego, który wyśle tekst.
Samouczek wzięty stąd za zgodą tutaj
Brain-Flak ma dwa stosy, znane jako „lewy” i „prawy”. Aktywny stos zaczyna się od lewej. Jeśli pusty stos zostanie wyskakujący, zwróci 0. To wszystko. Żadnych innych zmiennych. Po uruchomieniu programu każdy argument wiersza poleceń jest przekazywany do aktywnego stosu.
Jedynymi poprawnymi znakami w programie Brain-Flak są ()[]{}<>
i zawsze muszą być zrównoważone. Istnieją dwa rodzaje funkcji: Nilady i Monady . Nilad to funkcja, która zajmuje 0 argumenty. Oto wszystkie nilady:
()
Ocenia jeden.[]
Ocenia wysokość obecnego stosu.{}
Pop aktywny stos. Ocenia wartość wyskakującą.<>
Przełącz aktywny stos. Ocenia zero.
Są one łączone razem podczas oceny. Gdybyśmy mieli „3” nad aktywnym stosem, ten fragment:
()(){}
oceniałby na, 1 + 1 + active.pop()
co ocenia na 5.
Monady biorą jeden argument, kawałek kodu Brain-Flak. Oto wszystkie monady:
(n)
Naciśnij 'n' na aktywnym stosie.[n]
Ocenia ujemne „n”{foo}
Podczas gdy zero nie znajduje się na szczycie stosu, zrób foo.<foo>
Wykonaj foo, ale oceń go na 0.
Funkcje te zwrócą również wartość w nich, więc
(()()())
Popchnie 3 ale
((()()()))
Popchnie 3 dwa razy .
{}
Oceni do sumy wszystkich tras. Więc gdybyśmy mieli „3” i „4” na górze stosu:
{{}}
oceniłby jako 7.
Po zakończeniu wykonywania programu drukowana jest każda wartość pozostawiona na aktywnym stosie, z nową linią pomiędzy. Wartości na drugim stosie są ignorowane.
Zasady
- Możesz założyć, że Brain-Flak działa bez ascii. (
-A
) - Kod flakowania mózgu NIE może wymagać wprowadzania
- Obowiązują wszystkie standardowe zasady
- Kod musi zostać uruchomiony w ciągu 1 minuty dla dowolnego wejścia do 1024 bajtów w TIO. (Jeśli wyjście TIO nie jest dostępne, dostarcz tłumacza i uruchomię go na moim komputerze (mój komputer powinien być w stanie zbliżyć się do TIO)).
- Musisz obsługiwać wprowadzanie dowolnej długości.
- Możesz pobrać dane z pliku.
- Optymalizacja przypadków testowych jest niedozwolona
- Wymagana jest deterministyczna wydajność
- Programy nie muszą być czyszczone w stosie
Przypadki testowe (wypróbuj na nich swój kod, faktyczne wyniki punktacji zostaną opublikowane w ciągu 1-2 tygodni po opublikowaniu wyzwania)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
The meaning of brain-flak is to flak your brain with pain.
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
To be, or not to be, that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles
And by opposing end them. To die-to sleep,
No more; and by a sleep to say we die
<your brain-flak code here>
The fitness pacer test is a multi stage test. Avacado Avacado Avacadad Avacadad carrot.bat carrot.jar carrot.carrot Quack Quack Quack Quack Quack Quack Quack Quack Quack downgoat doawngoat down down gaot
This challenge came from a online program that turned text into brain-fuck. However brain-fuck has limitations and it is not nearly as cool as brain-flak. I really am looking forward to cool programs :) I am glad you took the time to read this and look forward to seeing your answer.
Zwycięski
Aby wygrać, musisz podać całkowitą długość kodu ataku mózgowego podanego przez każdy z przypadków testowych, który zostanie wydany 1-2 tygodnie po dacie publikacji. Wygrywa najkrótsza długość całkowita.
UWAGA!!!!!!:
To nie jest kod-golf , długość kodu nie wpłynie w żaden sposób na końcowy wynik. Docenione jest tworzenie czytelnego kodu. Dzięki!
<your brain-flak code here>
1000, jest nagradzana. Których nie mogę wysłać na inny dzień, ups; nie zauważyłem, jak to było nowe.Odpowiedzi:
Brain-Flak , 130 bajtów
Wypróbuj online!
Wyjście dla
<your brain-flak code here>
: 5045 bajtówWypróbuj online!
źródło
Python 3 , 17744 bajty
Edycja: Dodałem kilka opcji, aby pomóc golfowi w bezpiecznych sytuacjach.
Wypróbuj online!
Prostyrekurencyjny rozwiązanie, które będę kontynuować dalszej poprawy. Robi to bardzo dobrze przy mniejszych nakładach, ale przegrywa z odpowiedzią Ruby MegaTom na dłuższe nakłady.Uwagi:
[]
stają się bezużyteczne (choć można je wyłączyć, komentując kilka wierszy i poprawiając je tylko ookoło 100 bajtów).Ponieważ jest to algorytm rekurencyjny, będzie on trwał dłużej dla znaków o dużych wartościach. Na przykład znak ÿ (wartość 255) zajmuje 9 sekund, aby ocenić, przy czym każdy przypadek testowy jednocześnie zajmuje 1,6 sekundy.Wbudowana pamięć podręczna![]
)-
. To wycięło kilka bajtów i dużo czasu, biorąc pod uwagę wartość tego myślnika, wyniosło 8212: o.Przykładowe wyniki:
<your brain-flak code here>
(312 bajtów):Wypróbuj online!
Hello, World!
( 142 bajty [Uwaga:obecnypoprzedni najlepszy wynosił 148 bajtów , a teraz 136 bajtów]):Wypróbuj online!
źródło
Ruby , 17398 bajtów dla wszystkich (nowych) przypadków testowych
Wypróbuj online!
<your brain-flak code here>
,362358 bajtówWypróbuj online!
źródło
Must run under 1 minute for inputs up to 1024 bytes
zasadę (choć teraz jest znacznie szybsza)cache
, notcash
; pPython 3 , 16222 bajtów
Wypróbuj online!
Najpierw poniżej 1000 dla
<your brain-flak code here>
: DBrain-Flak , 448 bajtów
Wypróbuj online!
(pierwotnie 827 dla
<your brain-flak code here>
)źródło
05AB1E , za dużo bajtów (Moje pierwsze BF cokolwiek)
Wypróbuj online!
Niezwykle podstawowa próba gry w golfa przy użyciu gotowego kodu „mnożenia” Brain-flak. Wszystko to polega na znalezieniu pary dzielników o najmniejszej sumie dla każdego punktu kodowego ASCII, a następnie wypycha obie pary dzielników jako liczby. Kod Brainflak
({}<>)({<({}[()])><>({})<>}{}<><{}>)
jest następnie dodawany i wykonywany w pętli, aż wszystkie wartości znajdą się na alternatywnym stosie.Lista osób, którym dziękuję:
(()())(()()())
=((()())())
(-252 bytes
)-927 bytes
).Przykład golfowego z
<your brain-flak code here>
przy347032182291 bajtów:Brain-Flak , 2291 bajtów
Wypróbuj online!
Każdy rząd reprezentuje jedną postać, która gra w golfa, co jest o 60% lepsze niż podstawowe rozwiązanie, które napisałem , i idąc, wiedząc dosłownie nic o Brainflak, czuję, że jest to dobra podstawa tego, czego nie należy robić. Zaraz zdobędę odpowiedź, w środku czegoś innego i jestem pewien, że mogę to poprawić. (Uwzględniam nowe wiersze w liczbie bajtów, ponieważ nie oczekuję, że to wygra).
źródło
(()()()())(()()()()())
i((()()()())())
2) Mnożenie przez stałą może być znacznie krótsze niżpush(); multiply();
. Na przykład, aby podwoić liczbę, możesz(({}){})
zamiast tego zrobić(()())({}<>)({<({}[()])><>({})<>}{}<><{}>)
. Ale to nie jest okropny punkt odniesienia. Jeśli chcesz uzyskać więcej informacji, zawsze chętnie rozmawiam na trzecim stosieBrain-Flak
Wypróbuj online!
Dane wyjściowe dla
<your brain-flak code here>
582 bajtów:źródło