Intérprete de Golf a Compute

9

Introducción

Computar es un lenguaje de broma esotérico .

Desde la entrada de esolangs:

Compute no tiene la sintaxis requerida y tiene el poder de resolver todos y cada uno de los problemas. Es lo suficientemente inteligente como para interpretar cualquier lenguaje humano (inglés, español, latín, etc.), cualquier lenguaje de programación (C ++, Java, brainfuck, etc.) o cualquier tipo de datos que pueda imaginar. La única desventaja es que no hay absolutamente ninguna E / S.

Algunos programas de ejemplo

Hello World

Un programa básico de Hello World

What is love?

Determina si el amor es (bebé, no me hagas daño).

When will we ever graduate?

Determina la fecha exacta de este sitio para salir de la versión beta.

El reto

Su tarea es escribir un intérprete informático completo. Esto suena bastante difícil, pero tenga en cuenta que Compute no tiene absolutamente ninguna E / S. Por lo tanto, su intérprete solo duerme un segundo por cada línea en el programa de entrada y salida \n\nDone.después de esto (esta es la única excepción a la cosa sin E / S).

Puede encontrar el intérprete oficial en la parte inferior de este sitio .
Tenga en cuenta que el intérprete oficial pausa un segundo por cada personaje en el código fuente dado. Para evitar largos tiempos de espera mientras pone a prueba a su intérprete con preguntas significativas, mantenemos las líneas en este desafío.

Reglas

  • La entrada puede contener varias líneas separadas por a \n. Siempre habrá al menos una línea.
  • A diferencia de la implementación oficial, no tiene que tomar un archivo como entrada. Puede tomar el programa Compute en cualquier forma de entrada que desee.
  • La única salida permitida es \n\nDone.. Se permite una nueva línea final.
  • Función o programa completo permitido.
  • Reglas predeterminadas para entrada / salida.
  • Se aplican lagunas estándar .
  • Este es el , por lo que gana el conteo de bytes más bajo. Tiebreaker es una presentación anterior.
Denker
fuente
1
Inevitablemente me recordó esto
Luis Mendo
14
Bueno, no necesitamos un programa que nos diga cuándo nos graduaremos. Ya sabemos que es el 26.
Pomo de la puerta
77
@Pomo de la puerta, ¿de qué siglo?
msh210
1
@DenkerAffe Creo que debe dejar en claro que el desafío no coincide exactamente con el idioma.
PurkkaKoodari
99
@ msh210, no, ese es el siglo.
Peter Taylor

Respuestas:

5

05AB1E , 16 15 14 13 bytes

Código:

[Ig>#w’

D€µ.

Explicación:

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

Esta parte es equivalente a "\n\nDone.":

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

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

Pruébalo en línea!

Utiliza la codificación CP-1252 .

Adnan
fuente
4

Oración , 117 bytes

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

Vamos a explicar esto. Primero, esto se transmite a:

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

¿Sigo confundido? Digámoslo así:

I need time!

Importa el módulo time.

To iterate, input().

Este es un ciclo while cuya condición es input().

Inhale.

Nuestro programa necesita respirar ahora y inhale, aunque es menos saludable, es más golfista.

Now sleep(1).

Nowtoma el módulo más reciente importado y lo agrega .sleep(1).

Backtracking.

Salgamos del ciclo while.

Boring,
boring.

Imprime dos líneas nuevas.

Listen!

Comienza a capturar una cadena.

Capture Done.

Se agrega Done.a la cadena capturada.

Carry on!

Termina de capturar la cuerda.

Conor O'Brien
fuente
3
Parece un lenguaje divertido. ¿Agregarías un enlace a un intérprete + documentos?
Denker
@DenkerAffe Los documentos y el intérprete se pueden encontrar en el encabezado que acabo de editar.
Conor O'Brien
@Conor Gracias, voy a echarle un vistazo. :)
Denker
4

JavaScript Shell REPL, 38 bytes

Como una función que acepta el programa como un argumento de cadena y devuelve el resultado:

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

Done.`

29 bytes si la función puede aceptar su entrada en forma de una matriz de líneas, o si debería dormir 1 segundo por carácter:

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

Done.`

34 bytes si también debería ser más como un programa e imprimir explícitamente Listo:

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

Done.`

Esto funciona para mí en el intérprete independiente de Spidermonkey.

Neil
fuente
4

Javascript ES6, 46 45 bytes

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

Gracias a ӍѲꝆΛҐӍΛПҒЦꝆ por guardar un byte

Asume una matriz como entrada.

Como tanto ӍѲꝆΛҐӍΛПҒЦꝆ como edc65 han señalado, puede escribir lo siguiente, pero no guardará ningún byte:

a=>setTimeout("alert`\n\nDone`",a.length*1e3)
andlrc
fuente
1
1e3es mejor que 10e2.
Mama Fun Roll
Además, convierta la función de flecha en una cadena. Ver codegolf.stackexchange.com/a/60960/41247
Mama Fun Roll
@ ӍѲꝆΛҐӍΛПҒЦꝆ No estoy seguro de que funcionaría. Como ya tiene una cadena de plantilla, deberías escapar de ella
Cyoce
@ ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2no puedo creer que me haya perdido eso.
andlrc
@ edc65 No eres el primero en hablar de eso, ӍѲꝆΛҐӍΛПҒЦꝆ también lo mencionó. :-)
andlrc
4

Bash + coreutils, 28

sleep `wc -l`
echo "

Done."

Duerme 1 segundo por cada línea. Use en su wc -clugar para cada byte, o wc -mpara cada carácter.

Trauma digital
fuente
1
¿No debería haber una nueva línea extra?
user253751
@immibis Sí, tienes razón, arreglado.
Trauma digital
3

Pyth, 15 14 bytes

.dcl.z1b"Done.

(Puede probarlo en línea , pero realmente no tiene sentido hacerlo).

PurkkaKoodari
fuente
Te falta el período posterior Done(lo cual es bastante divertido ya que le dijiste a alguien lo mismo en otra respuesta): P
Denker
@DenkerAffe Gracias. (Sin embargo, el recuento de bytes fue correcto.)
PurkkaKoodari
@muddyfish Eso es lo que dice el desafío. El intérprete oficial dice char-wise, pero lo cambié a líneas para evitar tiempos de espera.
Denker
@DenkerAffe Ok, ahora nuestras entradas son exactamente iguales. ¿A quién guardar? Asumiré Pietu1998 porque fueron correctos primero
Azul
¿Es necesario b?
busukxuan
2

Perl, 21 + 1 = 22 bytes

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

Requiere la -pbandera:

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


Done.              
andlrc
fuente
2

Python 3, 58 bytes

import time
while input():time.sleep(1)
print("\n\nDone.")
Azul
fuente
Solo quiero señalar esto, sería 2 Bytes más corto en python 2, imprime "\ n \ nHecho"
Random Guy
Oh sí, lo olvidé ... Lo siento.
Random Guy
2

MATL , 17 bytes

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

Se utiliza una línea vacía final (seguida de una nueva línea) para marcar el final de la entrada. Esto es necesario en MATL porque la entrada es interactiva y cada entrada termina con una nueva línea.

Pruébalo en línea!

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
fuente
¿Te falta el período posterior Done?
PurkkaKoodari
@ Pietu1998 Whoops. Corregido ¡Gracias!
Luis Mendo
2

QBasic, 54 bytes

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

Toma el programa línea por línea de la entrada del usuario, terminado por una línea en blanco. Cumple con la letra de la ley, aunque posiblemente no con el espíritu, haciendo una pausa de 1 segundo después de leer cada línea. (La especificación técnicamente no dice que todas las pausas tienen que venir después de que se complete la entrada). Si esto se considera demasiado sombrío, aquí hay una versión de 64 bytes que se detiene después de que se haya ingresado todo el programa:

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

Versión de bonificación con E / S de archivo (87 bytes):

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

Ruby, 32 bytes

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

Lecturas de stdin.

bogl
fuente
1

OCaml, 61 bytes

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

Asume que la entrada es una lista.

shooqie
fuente
0

Jalea , 12 bytes (no competitiva)

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

Pruébalo en línea!

Nota: No sugiera poner el ⁷⁷en la cadena comprimida, lo hará más largo (“¡OÑL[Ṁ» ).

Explicación:

Ỵ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 el Outgolfer
fuente
Esto no es competitivo debido a œS.
Erik the Outgolfer
0

awk, 34 bytes

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

Como no hay E / S y el resultado final es inevitable, la Done.parte se vence desde el principio.

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

La única forma de dormir en awk es usar el sistema sleep. La forma más corta de invocarlo es hacerlo print|"sleep "NRy también podríamos abusar de eso inútil print.

James Brown
fuente