Fondo
El echo
programa es muy ordenado. ¡Puedes decirle cualquier cosa, y repite tus palabras perfectamente, siempre! ¡Cuan genial es eso! Decepcionantemente, repite la entrada de una sola vez, independientemente de su velocidad de escritura, que no es muy realista. Tendremos que arreglar eso.
La tarea
Su programa tomará su entrada de STDIN o su equivalente más cercano. Leerá las líneas del usuario una por una, posiblemente mostrando algún aviso, hasta que ingresen una línea vacía. Después de eso, imprimirá las líneas a STDOUT o su equivalente más cercano, en el mismo orden en que se dieron. La última línea (vacía) no se imprime y la última línea impresa no necesita tener una nueva línea final.
Además, el programa preservará los intervalos de tiempo entre cada línea: si el usuario tardó x
segundos en ingresar una línea, x
el programa tardará unos segundos en imprimirla. Esto se aplica también a la primera y última línea; la línea vacía no se imprime, pero el programa espera de todos modos antes de finalizar.
Ejemplo
Aquí hay una sesión de ejemplo con el programa. Todas las acciones que no producen texto se describen entre paréntesis y la solicitud (opcional) se muestra como >
.
[begin program]
> fhtagn[enter; 1.48s passed since starting program]
> yum yum[enter; 3.33s passed since previous enter]
> so cool![enter; 2.24s passed since previous enter]
> [enter; 0.23s passed since previous enter]
[wait 1.48s]fhtagn
[wait 3.33s]yum yum
[wait 2.24s]so cool!
[wait 0.23s, then end program]
Sin las acciones, la sesión se ve así:
> fhtagn
> yum yum
> so cool!
>
fhtagn
yum yum
so cool!
Reglas y puntuación
Los tiempos de espera deben ser precisos dentro de 0.01 segundos (en la práctica, si el humano promedio no puede notar la diferencia, está bien). El conteo de bytes más bajo gana, y las lagunas estándar no se permiten. Si su idioma tiene una función incorporada para precisamente esta tarea, no puede usarla.
yum yum
, lo cual fue bastante engorroso.Respuestas:
CJam,
4541393634 bytesEsto no tiene sentido en el intérprete en línea, por supuesto, pero funciona en el intérprete de Java.
No muestra un aviso.
Explicación
fuente
JavaScript,
119112 bytesCon la esperanza de encontrar un par de bytes más para recortar.
fuente
j=i=[]
(¡++
todavía funcionará!) También, ¡tuwhile
no es necesario!=''
ya que es falso! ¡Tan decepcionado que me perdímap
! +1!=''
. Me preocupaba si la entrada era0
, pero parece manejar eso bien. Había notado la[]
posibilidad de incremento antes, pero había sido tonto e intenté hacerloj++
. Haciendo++j
trabajos, ya[]++
que aparentemente es 0 XD ¡Gracias!do...while
bucles en JSJavaScript, 120 bytes
No hay posibilidad de acercarse a CJam con este enfoque, sino un guión sencillo.
fuente
Pyth, 68 bytes
Se desperdicia muchos bytes en la llamada a
sleep
, ya que Pyth no tienesleep
función.fuente
Rubí, 74
Trucos:
*a
en la primera línea se inicializa una matriz vacía. Podría usar$*
en su lugar, pero es un poco incompleto ya que está lleno de algunas invocaciones y solo me ahorra un byte.$/
es una nueva línea y$_
es la última línea recuperada porgets
.Editar: Dormir al final cuesta 20 bytes más, probablemente una forma de jugar golf
fuente
Time.now
suficientes veces que usandodef n;Time.now;end
, guardando un total de 2 bytesPitón 3, 124
Solo funciona en plataformas Windows
Mantener la entrada y los tiempos en listas separadas me costó 3 bytes más . Probablemente no sea el mejor enfoque.
Una versión amigable de 129 bytes de Unix, con crédito a Mego :
fuente
time()
lugar declock()
guardar 2 bytes?SWI-Prolog, 185 bytes
Probablemente hay mucho para jugar golf aquí, pero esto servirá por ahora ...
fuente
PowerShell,
26119012195 BytesAtrezzo a TessellatngHeckler y tomkandy por la asistencia e inspiración en el golf.
Esto es muy similar en concepto a la versión de 121 bytes a continuación, solo estamos creando y construyendo dinámicamente una lista de objetos, en lugar de pasar por un ciclo while para almacenarlos en una matriz explícita
$a
. En ambos casos, esa lista de objetos se canaliza al mismo bucle foreach|%{...}
. La indexación en el selector de matriz de resultados($b=!$b+!$_)
está formulada esta vez para eliminar laif($_){$_}
de las siguientes iteraciones, lo que ahorra unos pocos bytes más.Anterior, 121 bytes
Ampliado y explicado:
Anterior er, 190 Bytes
Anterior-er-er, 261 Bytes
¡Santa verbosidad, Batman! Vamos a desglosarlo:
fuente
$a=1,1;while($a[-1]-ne""){$a+=Measure-Command{$b=read-host};$a+=$b};$i=2;while($i-lt$a.length){sleep -m $a[($i++)].totalmilliseconds;$a[($i++)]}
@
de esa matriz, ya que no es necesario en este contexto, así que hasta 121 .$($l=1;while($l){Measure-Command{$l=read-host};$l})|%{($_,(sleep -m($_.Ticks/1e4)))[($b=!$b+!$_)]}
- y con un cambio en la palanca, de modo que cuando la cadena está vacía no se alterna y duerme en su lugar - 98do{...}while($l)
bucle y suelte$l=1;
para obtener 95 )Perl 6, 70 caracteres
El intérprete de Perl 6 solo define tres variables simbólicas (a diferencia de la locura de Perl 5). Para ser exactos,
$/
,$!
, y$_
. Este programa los usa todos, para evitar el costo de declarar variables usandomy
.get
lee una línea de STDIN. No contiene una nueva línea, a diferencia de Perl 5.now
incorporado devuelve una hora actual. Cuando se resta, da un intervalo que se puede pasar a una cadena.Un método sin nada a la izquierda (como
.push
y.map
en este código) funciona$_
.Usando el
repeat while
bucle (conocido comodo while
en otros lenguajes de programación), Perl 6 escribe la marca de tiempo actual$/
y empuja la línea recibida (que también almacena$!
) y la diferencia entre la hora actual y la marca de tiempo$/
. Debido al orden de los parámetros,now
no se calcula hasta que se recibe una línea.La
while
condición verifica si la línea no está vacía (en Perl 6,"0"
es un valor verdadero, a diferencia de Perl 5).Después de obtener todas las marcas de tiempo y líneas, solo proporciono las de
map
devolución de llamada que duerme un poco y dice lo que se dijo.fuente
Groovy, 202 bytes
Radical.
Versión sin golf:
fuente
JavaScript (ES6) 102
Reuniendo los esfuerzos de Mwr247 y Dom Hastings (CW)
fuente
MATLAB,
10799Y sin golfos:
Esto no será 100% preciso en el tiempo, ya que no tiene en cuenta el tiempo necesario para mostrar cada cadena, pero eso debería ser bastante rápido, por lo que el tiempo debería ser bastante cercano.
Después de una rápida revisión, he guardado algunos bytes al eliminar la matriz de celdas profundas de doble capa. Resulta que todo lo que necesitaba era
;
conseguir que se dividiera correctamente al empacar.fuente
Java, utilizando la versión 1.04 de esta biblioteca , 385 bytes
fuente
Caché ObjectScript, 123 bytes
Como de costumbre, esto supone una tabla de símbolos limpia antes de ejecutarse
d r
.Este problema no se puede resolver en ANSI MUMPS, ya que el estándar ANSI solo requiere una resolución de segundo nivel por el tiempo intrínseco
$H[OROLOG]
. Afortunadamente, Intersystems Caché, que actualmente es la plataforma líder de la industria para MUMPS, proporciona la implementación$ZT[IME]S[TAMP]
intrínseca definida , que proporciona una resolución de nivel de microsegundos.(La puntuación era anteriormente de 105 bytes, pero había un error).
fuente
C ++ 11,
343338 bytesQuería ver cuántos bytes necesitaría un código para eso en c ++. Mucho más de lo que esperaba. Quizás he complicado demasiado la solución.
Veamos si puedo reducir esto de alguna manera.
fuente
#include
s y la declaración de tipo paramain
. Eso es 7 bytes, no mucho, pero un comienzo. También puede usar enauto
lugar destring
paras
.c
eso no tenemos que especificarlo. Inicialmente intenté usarauto s
... pero parece que está convertidoconst char *
y nostd::string
. Me pregunto si puedo crear un alias parawhile
.while
usar un#define
tal vez.Bash,
9190 bytesEsto crea un archivo temporal
t
. Sobrescribirá un archivo existente con el mismo nombre.La idea en sí es bastante corta, pero tratar con caracteres especiales en la entrada agrega alrededor de 15 bytes ...
fuente
VBA,
233228bytesEstoy seguro de que se puede jugar mucho al golf. no especificaron cuántas entradas, así que codifiqué las longitudes de mi matriz porque es más corta que entonces
Redim preserve
.La entrada es a través de una ventana emergente, la salida se
debug.print
debe a quemsgbox
produce un MODAL y detiene el código.No sé cómo probar si esto es preciso para los 0.01s. Tal vez alguien pueda probar, pero le doy al comando de espera el número de una manera que DEBE usar los milisegundos, pero VBA no es conocido por hacer lo que debería.
El
If goto
puede ser sustituido por un bien golfizadoDo Loop While
.fuente
SmileBASIC, 122 bytes
Creo que esto podría hacerse un poco más corto.
fuente
C UNIX, 272 bytes
Detallado
fuente