Wprowadzenie
Compute to ezoteryczny język żartów.
Compute nie ma wymaganej składni i ma moc rozwiązywania wszelkich problemów. Jest wystarczająco inteligentny, aby interpretować dowolny język ludzki (angielski, hiszpański, łacina itp.), Dowolny język programowania (C ++, Java, brainfuck itp.) Lub dowolny rodzaj danych, o których możesz pomyśleć. Jedynym minusem jest to, że absolutnie nie ma we / wy.
Niektóre przykładowe programy
Hello World
Podstawowy program Hello World
What is love?
Określa, że miłość to (kochanie, nie rań mnie).
When will we ever graduate?
Określa dokładną datę tej witryny, aby wyjść z wersji beta.
Wyzwanie
Twoim zadaniem jest napisanie pełnego tłumacza. Brzmi to dość ciężko, ale należy pamiętać, że Compute absolutnie nie ma I / O. Twój interpreter będzie spał tylko sekundę na każdą linię w programie wejściowym, a \n\nDone.
potem na wyjściu (jest to jedyny wyjątek od braku wejścia / wyjścia).
Oficjalnego tłumacza można znaleźć na dole tej strony .
Zauważ, że oficjalny tłumacz wstrzymuje jedną sekundę na każdy znak w danym kodzie źródłowym. Aby uniknąć długiego czasu oczekiwania podczas testowania tłumacza merytorycznymi pytaniami, trzymamy się linii tego wyzwania.
Zasady
- Dane wejściowe mogą zawierać wiele wierszy oddzielonych znakiem a
\n
. Zawsze będzie co najmniej jedna linia. - W przeciwieństwie do oficjalnej implementacji nie musisz pobierać pliku jako danych wejściowych. Możesz wziąć program Compute w dowolnej formie danych wejściowych.
- Jedyne dozwolone wyjście to
\n\nDone.
. Końcowy znak nowej linii jest dozwolony. - Dozwolona funkcja lub pełny program.
- Domyślne reguły wejścia / wyjścia.
- Obowiązują standardowe luki .
- To jest golf-golf, więc wygrywa najniższa liczba bajtów. Tiebreaker to wcześniejsze zgłoszenie.
źródło
Odpowiedzi:
05AB1E ,
16151413 bajtówKod:
Wyjaśnienie:
Ta część odpowiada
"\n\nDone."
:Wypróbuj online!
Wykorzystuje kodowanie CP-1252 .
źródło
Oracja , 117 bajtów
Wytłumaczmy to. Po pierwsze, transponuje się to do:
Nadal jesteś zdezorientowany? Powiedzmy to tak:
Importuje moduł
time
.Jest to pętla while, której warunkiem jest
input()
.Nasz program musi teraz oddychać i
inhale
choć jest mniej zdrowy, jest bardziej golfowy.Now
weź najnowszy zaimportowany moduł i dołącz.sleep(1)
do niego.Wyjdźmy z pętli while.
Drukuje dwie nowe linie.
Rozpoczyna przechwytywanie ciągu.
Dodaje
Done.
do przechwyconego ciągu.Kończy przechwytywanie ciągu.
źródło
JavaScript REPL Shell, 38 bajtów
Jako funkcja, która akceptuje program jako argument ciągu i zwraca wynik:
29 bajtów, jeśli funkcja może zaakceptować dane wejściowe w postaci tablicy wierszy lub jeśli powinna spać 1 sekundę na znak:
34 bajty, jeśli powinno to również przypominać program i jawnie wydrukować Gotowe:
Działa to dla mnie w samodzielnym tłumaczu Spidermonkey.
źródło
JavaScript ES6,
4645 bajtówDzięki ӍѲꝆΛҐӍΛПҒЦꝆ za zapisanie jednego bajtu
Zakłada tablicę jako dane wejściowe.
Jak zauważyli zarówno ӍѲꝆΛҐӍΛПҒЦꝆ, jak i edc65 , możesz napisać, ale nie zachowa żadnych bajtów:
źródło
1e3
jest lepszy niż10e2
.1e3 is better than 10e2
nie mogę uwierzyć, że to przeoczyłem.Bash + coreutils, 28
Śpi 1 sekundę na każdą linię.
wc -c
Zamiast tego użyj dla każdego bajtu lubwc -m
zamiast każdego znaku.źródło
Pyth,
1514 bajtów(Możesz wypróbować online , ale naprawdę nie ma sensu tego robić).
źródło
Done
(co jest dość zabawne, ponieważ powiedziałeś komuś to samo w innej odpowiedzi): PPerl, 21 + 1 = 22 bajtów
Wymaga
-p
flagi:źródło
Python 3, 58 bajtów
źródło
MATL , 17 bajtów
Końcowa pusta linia (po której następuje nowa linia) służy do oznaczenia końca danych wejściowych. Jest to potrzebne w MATL, ponieważ wejście jest interaktywne, a każde wejście kończy się nową linią.
Wypróbuj online!
źródło
Done
?QBasic, 54 bajty
Pobiera wiersz po wierszu z danych wprowadzonych przez użytkownika, zakończony pustą linią. Przestrzega litery prawa, choć być może nie ducha, przerywając 1 sekundę po przeczytaniu każdej linii. (Specyfikacja nie mówi technicznie, że wszystkie pauzy muszą nastąpić po zakończeniu wprowadzania danych.) Jeśli jest to uważane za zbyt podejrzane, oto 64-bajtowa wersja, która zatrzymuje się po wprowadzeniu całego programu:
Wersja premiowa z plikiem I / O (87 bajtów):
źródło
Rubinowy, 32 bajty
Czyta ze standardowego.
źródło
OCaml, 61 bajtów
Zakłada, że dane wejściowe to lista.
źródło
Galaretka , 12 bajtów (niekonkurencyjna)
Wypróbuj online!
Uwaga: Nie sugeruj wstawiania
⁷⁷
skompresowanego łańcucha, spowoduje to, że będzie on dłuższy (“¡OÑL[Ṁ»
).Wyjaśnienie:
źródło
œS
.awk, 34 bajty
Ponieważ nie ma we / wy, a końcowy wynik jest nieunikniony,
Done.
część jest generowana od samego początku.Jedynym sposobem na spanie w awk jest użycie systemu
sleep
. Najkrótszym sposobem na wywołanie tego jestprint|"sleep "NR
i równie dobrze możemy nadużyć tego bezużyteczneprint
.źródło