Golf a Compute Dolmetscher

9

Einführung

Compute ist eine esoterische Scherzsprache.

Aus dem Esolangs-Eintrag:

Compute hat keine erforderliche Syntax und kann alle Probleme lösen. Es ist klug genug, um jede menschliche Sprache (Englisch, Spanisch, Latein usw.), jede Programmiersprache (C ++, Java, Brainfuck usw.) oder jede Art von Daten zu interpretieren, die Sie sich vorstellen können. Der einzige Nachteil ist, dass es absolut keine E / A gibt.

Einige Beispielprogramme

Hello World

Ein grundlegendes Hello World-Programm

What is love?

Bestimmt war Liebe ist (Baby tut mir nicht weh).

When will we ever graduate?

Bestimmt das genaue Datum dieser Site, um die Beta zu verlassen.

Die Herausforderung

Ihre Aufgabe ist es, einen vollständigen Compute-Interpreter zu schreiben. Das klingt ziemlich schwierig, aber denken Sie daran, dass Compute absolut keine E / A hat. Ihr Interpreter schläft also nur eine Sekunde für jede Zeile im Eingabeprogramm und gibt \n\nDone.danach aus (dies ist die einzige Ausnahme von der No-I / O-Sache).

Den offiziellen Dolmetscher finden Sie unten auf dieser Website .
Beachten Sie, dass der offizielle Interpreter für jedes Zeichen im angegebenen Quellcode eine Sekunde pausiert. Um lange Wartezeiten beim Testen Ihres Dolmetschers mit aussagekräftigen Fragen zu vermeiden, bleiben wir bei dieser Herausforderung auf dem Laufenden.

Regeln

  • Die Eingabe kann mehrere Zeilen enthalten, die durch a getrennt sind \n. Es wird immer mindestens eine Zeile geben.
  • Im Gegensatz zur offiziellen Implementierung müssen Sie keine Datei als Eingabe verwenden. Sie können das Compute-Programm in jeder gewünschten Form der Eingabe verwenden.
  • Die einzige erlaubte Ausgabe ist \n\nDone.. Ein nachfolgender Zeilenumbruch ist zulässig.
  • Funktion oder volles Programm erlaubt.
  • Standardregeln für die Eingabe / Ausgabe.
  • Es gelten Standardlücken .
  • Dies ist , also gewinnt die niedrigste Byte-Anzahl. Tiebreaker ist eine frühere Einreichung.
Denker
quelle
1
Unweigerlich erinnerte mich an diese
Luis Mendo
14
Nun, wir brauchen kein Programm, das uns sagt, wann wir unseren Abschluss machen werden. Wir wissen bereits, dass es der 26. ist.
Türknauf
7
@ Doorknob, aus welchem ​​Jahrhundert?
msh210
1
@DenkerAffe Ich denke, Sie sollten klarstellen, dass die Herausforderung nicht genau der Sprache entspricht.
PurkkaKoodari
9
@ msh210, nein, das ist das Jahrhundert.
Peter Taylor

Antworten:

5

05AB1E , 16 15 14 13 Bytes

Code:

[Ig>#w’

D€µ.

Erläuterung:

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

Dieser Teil entspricht "\n\nDone.":

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

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

Probieren Sie es online aus!

Verwendet die CP-1252- Codierung.

Adnan
quelle
4

Rede , 117 Bytes

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

Lassen Sie uns das erklären. Dies gilt zunächst für:

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

Immer noch verwirrt? Sagen wir es so:

I need time!

Importiert das Modul time.

To iterate, input().

Dies ist eine while-Schleife, deren Zustand ist input().

Inhale.

Unser Programm muss jetzt atmen und inhaleist zwar weniger gesund, aber Golfspieler.

Now sleep(1).

NowNehmen Sie das zuletzt importierte Modul und hängen Sie .sleep(1)es an.

Backtracking.

Verlassen wir die while-Schleife.

Boring,
boring.

Druckt zwei Zeilenumbrüche.

Listen!

Beginnt mit der Erfassung einer Zeichenfolge.

Capture Done.

Fügt Done.der erfassten Zeichenfolge hinzu.

Carry on!

Beendet die Erfassung der Zeichenfolge.

Conor O'Brien
quelle
3
Sieht aus wie eine lustige Sprache. Würden Sie einen Link zu einem Dolmetscher + Dokumenten hinzufügen?
Denker
@DenkerAffe Die Dokumente und der Dolmetscher befinden sich beide in der Überschrift, die ich gerade bearbeitet habe.
Conor O'Brien
@ Conor Danke, schau es dir an. :)
Denker
4

JavaScript Shell REPL, 38 Bytes

Als eine Funktion, die das Programm als Zeichenfolgenargument akzeptiert und das Ergebnis zurückgibt:

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

Done.`

29 Bytes, wenn die Funktion ihre Eingabe in Form eines Array von Zeilen akzeptieren kann oder wenn sie 1 Sekunde pro Zeichen schlafen soll:

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

Done.`

34 Bytes, wenn es auch eher wie ein Programm sein und explizit drucken soll Fertig:

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

Done.`

Dies funktioniert für mich im eigenständigen Spidermonkey-Interpreter.

Neil
quelle
4

Javascript ES6, 46 45 Bytes

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

Vielen Dank an ӍѲꝆΛҐӍΛПҒЦꝆ für das Speichern eines Bytes

Nimmt ein Array als Eingabe an.

Wie sowohl ӍѲꝆΛҐӍΛПҒЦꝆ als auch edc65 gezeigt haben, können Sie Folgendes schreiben, aber es werden keine Bytes gespeichert :

a=>setTimeout("alert`\n\nDone`",a.length*1e3)
andlrc
quelle
1
1e3ist besser als 10e2.
Mama Fun Roll
Konvertieren Sie außerdem die Pfeilfunktion in eine Zeichenfolge. Siehe codegolf.stackexchange.com/a/60960/41247
Mama Fun Roll
@ ӍѲꝆΛҐӍΛПҒЦꝆ Ich bin mir nicht sicher, ob das funktionieren würde. Da er bereits eine Vorlagenzeichenfolge hat, müssten Sie diese
maskieren
@ ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2kann nicht glauben, dass ich das verpasst habe.
andlrc
@ edc65 Du bist nicht der erste, der darüber spricht, ӍѲꝆΛҐӍΛПҒЦꝆ hat es auch erwähnt. :-)
andlrc
4

Bash + Coreutils, 28

sleep `wc -l`
echo "

Done."

Schlaf 1 Sekunde für jede Zeile. Verwenden Sie wc -cstattdessen für jedes Byte oder wc -mstattdessen für jedes Zeichen.

Digitales Trauma
quelle
1
Sollte es keinen zusätzlichen Zeilenumbruch geben?
user253751
@immibis Ja - du hast recht - behoben.
Digitales Trauma
3

Pyth, 15 14 Bytes

.dcl.z1b"Done.

(Sie können es online ausprobieren , aber es macht wirklich keinen Sinn, dies zu tun.)

PurkkaKoodari
quelle
Sie verpassen die Zeit danach Done(was ziemlich lustig ist, da Sie jemandem dasselbe bei einer anderen Antwort gesagt haben): P
Denker
@DenkerAffe Danke. (Die Anzahl der Bytes war jedoch korrekt.)
PurkkaKoodari
@muddyfish Das sagt die Herausforderung. Der offizielle Dolmetscher ist char-weise, aber ich habe ihn in Zeilen geändert, um Wartezeiten zu vermeiden.
Denker
@DenkerAffe Ok, jetzt sind unsere Einträge genau gleich. Wer soll behalten? Ich gehe von Pietu1998 aus, weil sie zuerst korrekt waren
Blue
Ist b notwendig?
Busukxuan
2

Perl, 21 + 1 = 22 Bytes

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

Benötigt die -pFlagge:

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


Done.              
andlrc
quelle
2

Python 3, 58 Bytes

import time
while input():time.sleep(1)
print("\n\nDone.")
Blau
quelle
Ich möchte nur darauf hinweisen, dass es in Python 2 2 Bytes kürzer wäre. Drucken Sie "\ n \ nDone"
Random Guy
Oh ja, ich habe vergessen ... Entschuldigung.
Zufälliger Kerl
2

MATL , 17 Bytes

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

Eine nachfolgende leere Zeile (gefolgt von einer neuen Zeile) wird verwendet, um das Ende der Eingabe zu markieren. Dies ist in MATL erforderlich, da die Eingabe interaktiv ist und jede Eingabe mit einer neuen Zeile endet.

Probieren Sie es online aus!

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
quelle
Vermissen Sie die Zeit danach Done?
PurkkaKoodari
@ Pietu1998 Whoops. Korrigiert. Vielen Dank!
Luis Mendo
2

QBasic, 54 Bytes

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

Übernimmt das Programm zeilenweise aus Benutzereingaben, die durch eine leere Zeile abgeschlossen werden. Befolgen Sie den Buchstaben des Gesetzes, wenn auch möglicherweise nicht den Geist, indem Sie 1 Sekunde nach dem Lesen jeder Zeile pausieren. (Die Spezifikation besagt technisch nicht, dass alle Pausen nach Abschluss der Eingabe kommen müssen.) Wenn dies als zu zwielichtig angesehen wird, ist hier eine 64-Byte-Version, die nach Eingabe des gesamten Programms pausiert:

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

Bonusversion mit Datei-E / A (87 Byte):

INPUT f$
OPEN f$FOR INPUT AS 1
1LINE INPUT #1,x$
SLEEP 1
IF 0=EOF(1)GOTO 1
?
?
?"Done."
DLosc
quelle
1

Ruby, 32 Bytes

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

Liest von stdin.

bogl
quelle
1

OCaml, 61 Bytes

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

Angenommen, die Eingabe ist eine Liste.

shooqie
quelle
0

Gelee , 12 Bytes (nicht konkurrierend)

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

Probieren Sie es online aus!

Hinweis: Bitte schlagen Sie nicht vor, das ⁷⁷in die komprimierte Zeichenfolge einzufügen, da dies die Länge verlängert ( “¡OÑL[Ṁ»).

Erläuterung:

Ỵ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 der Outgolfer
quelle
Dies ist wegen nicht konkurrierend œS.
Erik der Outgolfer
0

awk, 34 Bytes

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

Da es keine E / A gibt und das Endergebnis unvermeidlich ist, wird der Done.Teil gleich zu Beginn ausgegeben.

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

Die einzige Möglichkeit, in awk zu schlafen, ist die Verwendung des Systems sleep. Der kürzeste Weg, es aufzurufen, ist zu print|"sleep "NRund wir könnten es genauso gut nutzlos missbrauchen print.

James Brown
quelle