Golf intérprete de computação

9

Introdução

O cálculo é uma linguagem de piada esotérica .

Na entrada esolangs:

O cálculo não tem sintaxe necessária e tem o poder de resolver todos e quaisquer problemas. É inteligente o suficiente para interpretar qualquer linguagem humana (inglês, espanhol, latim etc.), qualquer linguagem de programação (C ++, Java, cérebro, etc) ou qualquer tipo de dado que você possa imaginar. A única queda é que não há absolutamente nenhuma E / S.

Alguns exemplos de programas

Hello World

Um programa básico Hello World

What is love?

Determina que o amor é (baby, não me machuque).

When will we ever graduate?

Determina a data exata deste site para sair da versão beta.

O desafio

Sua tarefa é escrever um intérprete de computação completo. Isso parece bastante difícil, mas lembre-se de que o Compute não possui E / S absolutamente. Portanto, seu intérprete dorme apenas um segundo para cada linha no programa de entrada e sai \n\nDone.depois disso (esta é a única exceção à coisa sem E / S).

Você pode encontrar o intérprete oficial na parte inferior deste site .
Observe que o intérprete oficial pausa um segundo para cada caractere no código-fonte fornecido. Para evitar longos tempos de espera ao testar seu intérprete com perguntas significativas , permanecemos alinhados neste desafio.

Regras

  • A entrada pode conter várias linhas separadas por a \n. Sempre haverá pelo menos uma linha.
  • Ao contrário da implementação oficial, você não precisa usar um arquivo como entrada. Você pode usar o programa Compute em qualquer forma de entrada que desejar.
  • A única saída permitida é \n\nDone.. Uma nova linha à direita é permitida.
  • Função ou programa completo permitido.
  • Regras padrão para entrada / saída.
  • Aplicam-se brechas padrão .
  • Isso é , portanto, a menor contagem de bytes vence. O desempatador é uma inscrição anterior.
Denker
fonte
11
Inevitavelmente, isso me lembrou disso
Luis Mendo
14
Bem, não precisamos de um programa para nos dizer quando vamos nos formar. Já sabemos que é o dia 26.
Maçaneta
7
@ Doorknob, de que século?
Msh210
11
@ DenkerAffe Acho que você deve deixar claro que o desafio não corresponde exatamente ao idioma.
PurkkaKoodari
9
@ msh210, não, esse é o século.
Peter Taylor

Respostas:

5

05AB1E , 16 15 14 13 bytes

Código:

[Ig>#w’

D€µ.

Explicação:

[        # 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 é 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

Experimente online!

Usa a codificação CP-1252 .

Adnan
fonte
4

Oração , 117 bytes

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

Vamos explicar isso. Primeiro, isso transpila para:

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

Ainda confuso? Vamos colocar assim:

I need time!

Importa o módulo time.

To iterate, input().

Este é um tempo loop cuja condição é input().

Inhale.

Nosso programa precisa respirar agora e inhale, embora menos saudável, é mais golfista.

Now sleep(1).

Nowpegue o módulo mais recente importado e acrescente .sleep(1)a ele.

Backtracking.

Vamos sair do loop while.

Boring,
boring.

Imprime duas novas linhas.

Listen!

Começa a capturar uma sequência.

Capture Done.

Adiciona Done.à sequência capturada.

Carry on!

Finaliza a captura de sequência.

Conor O'Brien
fonte
3
Parece uma linguagem divertida. Você adicionaria um link a um intérprete + documentos?
Denker
@DenkerAffe Os docs e intérprete tanto pode ser encontrada no título eu apenas editado no.
Conor O'Brien
@Conor Obrigado, vou dar uma olhada nisso. :)
Denker 15/02
4

Shell JavaScript REPL, 38 bytes

Como uma função que aceita o programa como um argumento de string e retorna o resultado:

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

Done.`

29 bytes se a função puder aceitar sua entrada na forma de uma matriz de linhas ou se for dormir 1 segundo por caractere:

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

Done.`

34 bytes, se for mais parecido com um programa e imprimir explicitamente Concluído:

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

Done.`

Isso funciona para mim no intérprete autônomo Spidermonkey.

Neil
fonte
4

Javascript ES6, 46 45 bytes

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

Agradecimentos a ҒЦꝆПҒЦꝆ por salvar um byte

Assume uma matriz como entrada.

Como o ӍѲꝆΛҐӍΛПҒЦꝆ e o edc65 apontaram, você pode escrever o seguinte, mas ele não salvará nenhum bytes:

a=>setTimeout("alert`\n\nDone`",a.length*1e3)
andlrc
fonte
11
1e3é melhor que 10e2.
Mama Fun Roll
Além disso, converta a função de seta em uma sequência. Veja codegolf.stackexchange.com/a/60960/41247
Mama Fun Roll
@ ҒЦꝆПҒЦꝆ Não sei se isso funcionaria. Como ele já tem uma seqüência de modelo, você precisa escapar
Cyoce
@ ҒЦꝆПҒЦꝆ 1e3 is better than 10e2não acredito que perdi isso.
andlrc
@ edc65 Você não é o primeiro a falar sobre isso, ӍѲꝆΛҐӍΛПҒЦꝆ também mencionou. :-)
andlrc 22/02
4

Bash + coreutils, 28

sleep `wc -l`
echo "

Done."

Acomoda 1 segundo para cada linha. Use em wc -cvez disso para cada byte ou wc -mpara cada caractere.

Trauma Digital
fonte
11
Não deveria haver uma nova linha extra?
user253751
@immibis Sim - você está certo - consertado.
Digital Trauma
3

Pitão, 15 14 bytes

.dcl.z1b"Done.

(Você pode experimentá-lo online , mas não há realmente sentido em fazê-lo.)

PurkkaKoodari
fonte
Você está perdendo o período seguinte Done(o que é bem engraçado, porque você contou a alguém o mesmo em outra resposta): P
Denker
@DenkerAffe Thanks. (A contagem de bytes estava correta, no entanto).
PurkkaKoodari 15/02
@muddyfish É o que diz o desafio. O intérprete oficial segue o caminho do char, mas eu mudei para linhas para evitar tempos de espera.
Denker
@DenkerAffe Ok, agora nossas entradas são exatamente iguais. Quem guardar? Eu vou assumir Pietu1998 porque eles estavam corretos primeiro
azul
B é necessário?
217166Bom
2

Perl, 21 + 1 = 22 bytes

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

Requer a -pbandeira:

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


Done.              
andlrc
fonte
2

Python 3, 58 bytes

import time
while input():time.sleep(1)
print("\n\nDone.")
Azul
fonte
Só quero esclarecer isso, seria 2 bytes mais curto no python 2, imprimir "\ n \ nDone" #
Random Random
Ah sim, eu esqueci ... Desculpe.
Random Guy
2

MATL , 17 bytes

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

Uma linha vazia à direita (seguida por nova linha) é usada para marcar o final da entrada. Isso é necessário no MATL porque a entrada é interativa e cada entrada termina com uma nova linha.

Experimente 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
fonte
Você está perdendo o período depois Done?
PurkkaKoodari
@ Pietu1998 Opa. Corrigido. Obrigado!
Luis Mendo
2

QBasic, 54 bytes

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

Pega o programa linha por linha a partir da entrada do usuário, finalizada por uma linha em branco. Respeita a letra da lei, embora possivelmente não o espírito, pausando 1 segundo depois de ler cada linha. (A especificação não diz tecnicamente que todas as pausas devem ocorrer após a entrada ser concluída.) Se isso for considerado muito obscuro, aqui está uma versão de 64 bytes que pausa após a entrada de todo o programa:

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

Versão bônus com E / S de arquivo (87 bytes):

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

Ruby, 32 bytes

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

Lê de stdin.

bogl
fonte
1

OCaml, 61 bytes

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

Assume que a entrada é uma lista.

shooqie
fonte
0

Gelatina , 12 bytes (não concorrente)

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

Experimente online!

Nota: Por favor , não sugira colocar o ⁷⁷na string compactada, isso fará com que seja mais longo ( “¡OÑL[Ṁ»).

Explicação:

Ỵ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, o Outgolfer
fonte
Isso não é competitivo por causa de œS.
Erik the Outgolfer
0

awk, 34 bytes

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

Como não há E / S e o resultado final é inevitável, a Done.peça é produzida logo no início.

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

A única maneira de dormir no awk é usar o sistema sleep. A maneira mais curta de invocá-lo é print|"sleep "NRe também podemos abusar desse inútil print.

James Brown
fonte