Zagraj w tłumacza komputerowego

9

Wprowadzenie

Compute to ezoteryczny język żartów.

Z wpisu esolangs:

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 , więc wygrywa najniższa liczba bajtów. Tiebreaker to wcześniejsze zgłoszenie.
Denker
źródło
1
Nieuchronnie mi to
Luis Mendo
14
Nie potrzebujemy programu, który poinformuje nas o ukończeniu szkoły. Wiemy już, że jest 26.
Klamka
7
@Doorknob, jakiego wieku?
msh210
1
@DenkerAffe Myślę, że powinieneś wyjaśnić, że wyzwanie nie pasuje dokładnie do języka.
PurkkaKoodari
9
@ msh210, nie, to jest wiek.
Peter Taylor,

Odpowiedzi:

5

05AB1E , 16 15 14 13 bajtów

Kod:

[Ig>#w’

D€µ.

Wyjaśnienie:

[        # Starts an infinite loop
 I       # Input string
  g>     # Length + 1
    #    # If equal to 1, break out of the loop
     w   # Wait 1 second

Ta część odpowiada "\n\nDone.":

      ’  # Push "\n\nDone." on top of the stack

D€µ.     # The compressed string is ended implicitly
         # Implicit, print top of the stack

Wypróbuj online!

Wykorzystuje kodowanie CP-1252 .

Adnan
źródło
4

Oracja , 117 bajtów

I need time!
To iterate, input().
Inhale.
Now sleep(1).
Backtracking.
Boring,
boring.
Listen!
Capture Done.
Carry on!

Wytłumaczmy to. Po pierwsze, transponuje się to do:

import time
while input():
    time.sleep(1)
print("\n")
print("\n")
print("Done")

Nadal jesteś zdezorientowany? Powiedzmy to tak:

I need time!

Importuje moduł time.

To iterate, input().

Jest to pętla while, której warunkiem jest input().

Inhale.

Nasz program musi teraz oddychać i inhalechoć jest mniej zdrowy, jest bardziej golfowy.

Now sleep(1).

Nowweź najnowszy zaimportowany moduł i dołącz .sleep(1)do niego.

Backtracking.

Wyjdźmy z pętli while.

Boring,
boring.

Drukuje dwie nowe linie.

Listen!

Rozpoczyna przechwytywanie ciągu.

Capture Done.

Dodaje Done.do przechwyconego ciągu.

Carry on!

Kończy przechwytywanie ciągu.

Conor O'Brien
źródło
3
Wygląda na zabawny język. Czy dodałbyś link do tłumacza + dokumentów?
Denker
@DenkerAffe Dokumenty i tłumacz można znaleźć w nagłówku, w którym właśnie edytowałem.
Conor O'Brien
@ Conor Dzięki, popatrzę na to. :)
Denker
4

JavaScript REPL Shell, 38 bajtów

Jako funkcja, która akceptuje program jako argument ciągu i zwraca wynik:

s=>sleep(s.split`
`.length)||`

Done.`

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:

s=>sleep(s.length)||`

Done.`

34 bajty, jeśli powinno to również przypominać program i jawnie wydrukować Gotowe:

s=>sleep(s.length)||print`

Done.`

Działa to dla mnie w samodzielnym tłumaczu Spidermonkey.

Neil
źródło
4

JavaScript ES6, 46 45 bajtów

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

Dzię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:

a=>setTimeout("alert`\n\nDone`",a.length*1e3)
andlrc
źródło
1
1e3jest lepszy niż 10e2.
Mama Fun Roll
Ponadto przekonwertuj funkcję strzałki na ciąg. Zobacz codegolf.stackexchange.com/a/60960/41247
Mama Fun Roll
@ ӍѲꝆΛҐӍΛПҒЦꝆ Nie jestem pewien, czy to zadziała. Ponieważ ma on już ciąg szablonu, musisz go uciec
Cyoce
@ ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2nie mogę uwierzyć, że to przeoczyłem.
andlrc
@ edc65 Nie jesteś pierwszym, który o tym mówi, ӍѲꝆΛҐӍΛПҒЦꝆ również o tym wspomniał. :-)
andlrc
4

Bash + coreutils, 28

sleep `wc -l`
echo "

Done."

Śpi 1 sekundę na każdą linię. wc -cZamiast tego użyj dla każdego bajtu lub wc -mzamiast każdego znaku.

Cyfrowa trauma
źródło
1
Czy nie powinna istnieć dodatkowa nowa linia?
user253751
@immibis Tak - masz rację - naprawiono.
Cyfrowa trauma
3

Pyth, 15 14 bajtów

.dcl.z1b"Done.

(Możesz wypróbować online , ale naprawdę nie ma sensu tego robić).

PurkkaKoodari
źródło
Brakuje Ci okresu po Done(co jest dość zabawne, ponieważ powiedziałeś komuś to samo w innej odpowiedzi): P
Denker
@DenkerAffe Thanks. (Liczba bajtów była jednak poprawna.)
PurkkaKoodari
@muddyfish To właśnie mówi wyzwanie. Oficjalny tłumacz posługuje się charakterem, ale zmieniłem go na linie, aby uniknąć czasów oczekiwania.
Denker
@DenkerAffe Ok teraz nasze wpisy są dokładnie takie same. Kogo zatrzymać? Założę, że Pietu1998, ponieważ były one poprawne jako pierwsze
Blue
Czy konieczne jest b?
busukxuan
2

Perl, 21 + 1 = 22 bajtów

sleep 1}{$_="\n\nDone."

Wymaga -pflagi:

$ perl -pe'sleep 1}{$_="\n\nDone."' <<< $'a\nb\nc'


Done.              
andlrc
źródło
2

Python 3, 58 bajtów

import time
while input():time.sleep(1)
print("\n\nDone.")
niebieski
źródło
Po prostu chcę to podkreślić, byłoby 2 bajty krótsze w pythonie 2, wydrukuj „\ n \ nGotowe”
Random Guy
O tak, zapomniałem ... Przepraszam.
Random Guy
2

MATL , 17 bajtów

10c'Done.'`jt?1Y.

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!

10c           % push newline character
'Done.'       % push string
`             % do...while
  j           % input string
  t           % duplicate
  ?           % if non-empty
    1Y.       % pause for 1 second
              % loop condition is the current string. If non-empty: next iteration
              % If empty: exit loop and print stack contents. There are two strings
              % and a newline is printed after each, so the desired output is obtained
Luis Mendo
źródło
Czy tęsknisz za czasem Done?
PurkkaKoodari,
@ Pietu1998 Whoops. Poprawione Dzięki!
Luis Mendo,
2

QBasic, 54 bajty

LINE INPUT x$
IF x$=""GOTO 1
SLEEP 1
RUN
1?
?
?"Done."

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:

DO
LINE INPUT x$
IF x$=""GOTO 1
t=t+1
LOOP
1SLEEP t
?
?
?"Done."

Wersja premiowa z plikiem I / O (87 bajtów):

INPUT f$
OPEN f$FOR INPUT AS 1
1LINE INPUT #1,x$
SLEEP 1
IF 0=EOF(1)GOTO 1
?
?
?"Done."
DLosc
źródło
1

Rubinowy, 32 bajty

$<.map{sleep 1}
puts"\n\nDone."

Czyta ze standardowego.

bagno
źródło
1

OCaml, 61 bajtów

fun a->List.iter(fun _->Unix.sleep 1)a;print_string"\n\nDone"

Zakłada, że ​​dane wejściowe to lista.

shooqie
źródło
0

Galaretka , 12 bajtów (niekonkurencyjna)

ỴLœS@⁷⁷“ẋḲp»

Wypróbuj online!

Uwaga: Nie sugeruj wstawiania ⁷⁷skompresowanego łańcucha, spowoduje to, że będzie on dłuższy ( “¡OÑL[Ṁ»).

Wyjaśnienie:

ỴLœS@⁷⁷“ẋḲp» Main link. Arguments: z.
ỴL           The number of lines in z. (x)
     ⁷       Newline ("\n") (y)
  œS@        After sleeping for x seconds, return y.
      ⁷      Newline ("\n")
       “ẋḲp» Compressed string ("Done.")
Erik the Outgolfer
źródło
Jest to niekonkurencyjne z powodu œS.
Erik the Outgolfer,
0

awk, 34 bajty

END{print"\nDone."|"cat;sleep "NR}

Ponieważ nie ma we / wy, a końcowy wynik jest nieunikniony, Done.część jest generowana od samego początku.

$ awk 'END{print"\nDone."|"cat;sleep "NR}' file

Jedynym sposobem na spanie w awk jest użycie systemu sleep. Najkrótszym sposobem na wywołanie tego jest print|"sleep "NRi równie dobrze możemy nadużyć tego bezużyteczne print.

James Brown
źródło