Golf un interprete di calcolo


9

introduzione

Il calcolo è un linguaggio scherzoso esoterico .

Dalla voce di esolang:

Il calcolo non ha una sintassi richiesta e ha il potere di risolvere tutti i problemi. È abbastanza intelligente da interpretare qualsiasi linguaggio umano (inglese, spagnolo, latino, ecc.), Qualsiasi linguaggio di programmazione (C ++, Java, brainfuck, ecc.) O qualsiasi tipo di dati a cui riesci a pensare. L'unico inconveniente è che non esiste alcun I / O assoluto.

Alcuni programmi di esempio

Hello World

Un programma di base Hello World

What is love?

Determina che l'amore è (piccola non farmi del male).

When will we ever graduate?

Determina la data esatta di questo sito per uscire dalla beta.

La sfida

Il tuo compito è scrivere un interprete di calcolo completo. Sembra piuttosto difficile, ma tieni presente che Compute non ha assolutamente alcun I / O. Quindi il tuo interprete dormirà solo un secondo per ogni riga del programma di input e poi uscirà \n\nDone.(questa è l'unica eccezione alla cosa no I / O).

È possibile trovare l'interprete ufficiale nella parte inferiore di questo sito .
Si noti che l'interprete ufficiale fa una pausa di un secondo per ogni carattere nel codice sorgente specificato. Per evitare lunghi tempi di attesa durante il test dell'interprete con domande significative , restiamo in linea con questa sfida.

Regole

  • L'input potrebbe contenere più righe separate da a \n. Ci sarà sempre almeno una riga.
  • A differenza dell'implementazione ufficiale, non è necessario prendere un file come input. Puoi prendere il programma di calcolo in qualsiasi forma di input tu voglia.
  • L'unico output consentito è \n\nDone.. È consentita una nuova riga finale.
  • Funzione o programma completo consentiti.
  • Regole predefinite per input / output.
  • Si applicano scappatoie standard .
  • Questo è , quindi vince il conteggio dei byte più basso. Tiebreaker è una presentazione precedente.

1
Inevitabilmente mi ha ricordato questo
Luis Mendo

14
Bene, non abbiamo bisogno di un programma per dirci quando ci diplomeremo. Sappiamo già che è il 26.
Maniglia della porta

7
@Doorknob, di che secolo?
msh210,

1
@DenkerAffe Penso che dovresti chiarire che la sfida non corrisponde esattamente alla lingua.
PurkkaKoodari,

9
@ msh210, no, quello è il secolo.
Peter Taylor,

Risposte:


5

05AB1E , 16 15 14 13 byte

Codice:

[Ig>#w’

D€µ.

Spiegazione:

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

Questa parte equivale a "\n\nDone.":

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

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

Provalo online!

Utilizza la codifica CP-1252 .


4

Orazione , 117 byte

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

Spieghiamo questo. Innanzitutto, questo si traspone a:

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

Ancora confuso? Mettiamola così:

I need time!

Importa il modulo time.

To iterate, input().

Questo è un ciclo while la cui condizione è input().

Inhale.

Il nostro programma deve respirare ora e inhale, sebbene meno salutare, è più golfista.

Now sleep(1).

Nowprende il modulo più recente importato e lo aggiunge .sleep(1).

Backtracking.

Esci dal ciclo while.

Boring,
boring.

Stampa due nuove righe.

Listen!

Inizia a catturare una stringa.

Capture Done.

Aggiunge Done.alla stringa acquisita.

Carry on!

Termina l'acquisizione della stringa.


3
Sembra una lingua divertente. Aggiungeresti un link a un interprete + documenti?
Denker,

@DenkerAffe I documenti e l'interprete si trovano entrambi nella rubrica in cui ho appena modificato.
Conor O'Brien,

@Conor Grazie, lo daremo un'occhiata. :)
Denker,

4

JavaScript Shell REPL, 38 byte

Come funzione che accetta il programma come argomento stringa e restituisce il risultato:

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

Done.`

29 byte se la funzione può accettare il suo input sotto forma di una matrice di righe o se deve dormire 1 secondo per carattere:

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

Done.`

34 byte se dovrebbe anche essere più simile a un programma e stampare esplicitamente Fatto:

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

Done.`

Questo funziona per me nell'interprete autonomo di Spidermonkey.


4

Javascript ES6, 46 45 byte

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

Grazie a ӍѲꝆΛҐӍΛПҒЦꝆ per aver salvato un byte

Presuppone un array come input.

Come hanno sottolineato sia ҒЦꝆПҒЦꝆ che edc65 , puoi scrivere quanto segue, ma non salverà alcun byte:

a=>setTimeout("alert`\n\nDone`",a.length*1e3)

1
1e3è meglio di 10e2.
Mama Fun Roll,

Inoltre, converti la funzione freccia in una stringa. Vedi codegolf.stackexchange.com/a/60960/41247
Mama Fun Roll,

@ ӍѲꝆΛҐӍΛПҒЦꝆ Non sono sicuro che funzionerebbe. Dato che ha già una stringa modello, dovresti scappare
Cyoce,

@ ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2non posso credere che mi sia perso.
Andlrc,

@ edc65 Non sei il primo a parlarne, anche ӍѲꝆΛҐӍΛПҒЦꝆ. :-)
andlrc,

4

Bash + coreutils, 28

sleep `wc -l`
echo "

Done."

Posti letto 1 secondo per ogni linea. Utilizzare wc -cinvece per ogni byte o wc -minvece per ogni carattere.


1
Non dovrebbe esserci una newline in più?
user253751

@immibis Sì, hai ragione, risolto.
Trauma digitale

3

Pyth, 15 14 byte

.dcl.z1b"Done.

(Puoi provarlo online , ma non ha davvero senso farlo.)


Ti manca il periodo successivo Done(il che è abbastanza divertente da quando hai detto a qualcuno lo stesso in un'altra risposta): P
Denker,

@DenkerAffe Grazie. (Il conteggio dei byte era corretto, però.)
PurkkaKoodari,

@muddyfish Ecco cosa dice la sfida. L'interprete ufficiale va bene, ma l'ho cambiato in righe per evitare tempi di attesa.
Denker,

@DenkerAffe Ok ora le nostre voci sono esattamente le stesse. Chi tenere? Presumo che Pietu1998 sia stato corretto per primo
Blue

B è necessario?
busukxuan,

2

Perl, 21 + 1 = 22 byte

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

Richiede la -pbandiera:

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


Done.              

2

Python 3, 58 byte

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

Voglio solo sottolineare questo, sarebbe più breve di 2 byte in Python 2, stampa "\ n \ nFatto"
Ragazzo casuale

Oh sì, ho dimenticato ... Scusa.
Ragazzo casuale,

2

MATL , 17 byte

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

Una linea vuota finale (seguita da una nuova riga) viene utilizzata per contrassegnare la fine dell'input. Questo è necessario in MATL perché l'input è interattivo e ogni input termina con una nuova riga.

Provalo 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

Ti manca il periodo dopo Done?
PurkkaKoodari,

@ Pietu1998 Whoops. Corretto. Grazie!
Luis Mendo,

2

QBasic, 54 byte

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

Prende il programma riga per riga dall'input dell'utente, terminato da una riga vuota. Rispetta la lettera della legge, sebbene possibilmente non lo spirito, facendo una pausa di 1 secondo dopo aver letto ogni riga. (La specifica non dice tecnicamente che tutte le pause devono venire dopo che l'input è stato completato.) Se questo è considerato troppo losco, ecco una versione a 64 byte che fa una pausa dopo che è stato inserito l'intero programma:

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

Versione bonus con I / O file (87 byte):

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

1

Rubino, 32 byte

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

Legge da stdin.


1

OCaml, 61 byte

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

Presuppone che l'input sia un elenco.


0

Gelatina , 12 byte (non competitiva)

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

Provalo online!

Nota: non suggerire di inserire la ⁷⁷stringa compressa, la prolungherà (“¡OÑL[Ṁ» ).

Spiegazione:

Ỵ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.")

Questo non è competitivo a causa di œS.
Erik the Outgolfer,

0

awk, 34 byte

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

Poiché non esiste alcun I / O e il risultato finale è inevitabile, la Done.parte viene emessa proprio all'inizio.

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

L'unico modo per dormire in awk è usare il sistema sleep. Il modo più breve per invocarlo è print|"sleep "NRe potremmo anche abusarne inutilmente print.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.