dary!
En eventos completamente ajenos a lo que espero que me suceda en los próximos días, le ordeno que escriba un código que haga lo siguiente:
Impresión
Legen... wait for it...
inmediatamente, con una nueva línea al final.
Espere hasta la próxima hora completa (cuando se ejecuta el trabajo cron para otorgar la insignia).
Impresión
dary!
con una nueva línea final opcional .
Reglas adicionales
Puede escribir un programa o una función, pero la salida debe imprimirse en STDOUT (o su alternativa más cercana a su idioma).
Debe esperar hasta la próxima hora completa , no solo durante 60 minutos. Si el código se ejecuta a las 6:58, debería imprimir la segunda línea a las 7:00.
La última línea debe imprimirse a más tardar un segundo después de la siguiente hora completa.
En el caso de que el programa se inicie en el primer segundo de una hora completa, debería esperar la siguiente hora completa.
Puede consultar la hora local o UTC.
Aplican reglas estándar de código de golf .
Respuestas:
Pyth,
4241A continuación hay un hexdump del código:
Guardado 1 byte gracias a @isaacg
Utiliza la
.d
función para obtener valores relacionados con la hora local..d6
Devuelve la hora actual. Esto imprime la primera cadena, luego espera hasta que la hora sea diferente de la hora anterior al inicio del programa, y luego imprime la segunda cadena.Puede probarlo en línea con
.d7
o.d8
durante minutos / segundos, pero el compilador en línea solo imprime cualquier cosa cuando finaliza el programa.¡Felicidades, Dennis! :)
fuente
0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
.
lo haría de la misma longitud. Errores tontos off-by-one: Pdary
, pero nolegen
! Y Pyth afirma ser más fácil de entender para aquellos acostumbrados a la programación convencional ...."
indica que la cadena debe tener algunas operaciones realizadas para obtener la cadena real. Es solo un truco de compresión para jugar al golf. Si decides intentar aprender Pyth, ¡la mejor de las suertes! No olvides que también hay una sala de chat para eso :)JavaScript (ES6), 74 bytes
Es posible que desee cambiar el reloj de su sistema antes de la prueba, felicitaciones si aterrizó aquí a los 59 minutos.
fuente
36e5
Funcionaría en lugar de3.6e6
?setTimeout
seríaeval
para mí. Es cierto ... Originalmente estaba tratando de usar,console.log
pero eso ni siquiera funciona cuando se almacena en una variable debido al contexto. ¡Tú también eres hermosa!setTimeout
correctamente e incluso guardar un byte:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
CJam,
4948 bytesUtiliza hora local. Para fines de prueba, puede reemplazar las dos instancias de
3
con4
o5
para que se imprima al comienzo del siguiente minuto / segundo.Pruébalo aquí. Pero tenga en cuenta que el intérprete en línea no muestra ningún resultado hasta que finaliza el programa. Alternativamente, puede ejecutarlo en Pruébelo en línea , donde la salida se muestra casi de inmediato en lugar de almacenarse (pero cuando lo prueba con segundos en lugar de horas, el retraso será notable). En cualquier caso, si lo ejecuta localmente con el intérprete de Java, funciona de maravilla.
Explicación
Esto hace uso de CJam's
et
que le brinda una variedad deAquí hay un desglose del código:
Prima
Esto también funciona para el mismo número de bytes:
En lugar de seleccionar la hora, seleccionamos el prefijo con la fecha y la hora, y mantenemos el ciclo mientras la matriz de fecha y hora todavía tiene ese prefijo.
fuente
AppleScript,
157149 bytesHuh Sorprendentemente contencioso.
Dado que se
log
imprime en el panel Mensajes del Editor de secuencias de comandos, considero que es la salida más cercana a STDOUT. Básicamente, si obtiene la cadena de tiempo de la fecha actual, hará algo como esto:Código:
Salida:
Tomará el primer número (
5
) antes de los dos puntos.Pensé que sería mucho más largo que esto, en realidad. xD
fuente
"1"
denumber 1 in time string of(current date)
...first number in time string of (current date)
.first number
también me da solo el primer dígito del tiempo (en"0"
este momento, a las 04:38).Muñeco de nieve 1.0.2 ,
7069 bytesExplicación:
fuente
PHP,
76, 70, 65, 6251 bytesLógica anterior (63b):
Este tipo de codificación le hace perder su trabajo, pero esto se repite hasta que el tiempo es 1 hora más que init.
-1 byte reemplazando
{}
después de while a;
(gracias manatwork)-5 bytes reemplazando
echo'dary!';
a?>dary!
(thanks manatwork)-4 bytes reemplazando
<?php
a la versión corta<?
(thanks primo)-1 byte reemplazando
while
por afor
-3 bytes reemplazando
date(G)!=$h+1
adate(G)==$h
(gracias primo)fuente
{}
→;
yecho
→?>
lo reducirían un poco. Aunque preferiríaLegen... wait for it...↵<?php while(+date('is'));?>dary!
<?
lugar de<?php
). El usofor(;;)
tiene la misma longitud quewhile()
, pero le permite mover la$h
asignación, sin necesidad de un punto y coma (for($h=date(h);...
). Lo que{}
no era necesario, pero tampoco lo es lo;
anterior?>
. Sin$h
embargo, es posible que tenga un problema con 12 (date(h)
nunca será 13).date(G)!=$h+1
adate(G)==$h
. Más corto, y resuelve el problema de la hora;) Además, elimine el punto y coma antes?>
.HH:00:00
, es decir, dentro del primer segundo de una hora completa.Perl 6 , 60 bytes
fuente
60²
se acaba de agregar hace unos díasJavascript
94 9087 bytesNo jugó mucho golf ...
Versión de Downgoat:
Almacena la hora actual y los bucles mientras la hora "anterior" sea igual a la actual. ¡Tan pronto como la hora haya cambiado, imprimirá el resto! :RE
Descargo de responsabilidad: si a su navegador no le gusta, se le ha advertido.
fuente
(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
MATLAB - 89 bytes
Bastante autoexplicativo. Primero, cree un controlador de función para capturar la hora actual del reloj del sistema. Luego, se visualiza
Legen... wait for it...
con un retorno de carro, y luego entramos en unwhile
bucle donde seguimos verificando para ver si la hora actual agregada con 1 no es igual a la hora actual. Si es así, sigue en bucle. Solo hasta el instante en que sucede la siguiente hora, mostramosdary!
y luego se produce un retorno de carro.La hora de MATLAB se basa en la indexación de 24 horas, por lo que
mod
se requiere la operación con la base 24 para manejar los derrames desde las 23:00 (23:00) hasta la medianoche (00:00).Nota menor
La
hour
función requiere la caja de herramientas Financial Time Series. Lanow
función no está sujeta a esta restricción, pero recupera la fecha y hora actuales como un número de serie quehour
se utiliza para calcular la hora actual.¿Quieres ejecutar esto en Octave?
¡Seguro! Debido a que Octave no tiene esta caja de herramientas, solo tendríamos que modificar la
hour
función para que llamedatevec
y devuelva un vector de 6 elementos, uno para cada año, mes, día, hora, minutos y segundos. Simplemente tendría que extraer el cuarto elemento de la salida:Los caracteres adicionales hacen que la solución suba a 98 bytes, pero podrá ejecutar esto en Octave. Tenga en cuenta la indexación in situ sin una variable temporal en el controlador de función.
¿Sin caja de herramientas de la serie de tiempo financiero?
Si desea ejecutar esto en MATLAB sin la Caja de herramientas de la serie financiera, porque no puede indexar las variables inmediatamente sin una temporal, esto tomará un poco más de bytes para escribir:
Primero obtiene la fecha y hora actuales y la almacena en la variable
h
, así como la almacena en la variable automática llamadaans
. Después, seguimos haciendo bucles y comprobando si la hora actual no es igual a la siguiente hora. En cada iteración, seguimos actualizando la variable automática con la hora y fecha actuales. Tan pronto como la próxima hora coincida con la hora y fecha actuales, mostramos la última parte de la cadena y salimos. Esto empuja el conteo de bytes a 114.También tenga en cuenta que no puede probar esto en línea. Los intérpretes de Octave en línea tendrán un límite de tiempo para cuando se ejecute el código, y debido a que este es un
while
ciclo que espera la próxima hora, tendrá un tiempo de espera mientras espera que se ejecute el código. Lo mejor que puede hacer es ejecutarlo en su propia máquina y verificar que funcione.fuente
now
en el bucle while:a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!')
. También podría guardar otros 5 bytes eliminando ela=@()
bit porque, tal como está, el código constituye un programa completo. El código adjunto tampoco requiere la caja de herramientas FTS.hour
función Financial Toolbox ? :-)Mathematica,
858481 bytesfuente
C, 163 bytes
fuente
Microscript II, 45 bytes
Finalmente, un uso para la
D
instrucción.Imprime la primera cadena, toma repetidamente el tiempo UTC en millesegundos módulo 3,600,000 hasta que esto produzca 0, y luego produce la segunda cadena que se imprime implícitamente. Los 3.600.000 están representados en el código como 36x10 5 .
fuente
TI-BASIC,
7064 bytes¡Maldice estas letras minúsculas de dos bytes!
getTime
devuelve una lista de tres elementos{hours minutes seconds}
, por lo que la suma del primer elemento al primero es las horas. Cuando hay una diferencia entre las horas al inicio y las horas actuales, el ciclo finaliza. Gracias a @FryAmTheEggman por esta observación.fuente
R - 97 bytes
fuente
Python 3 -
9289 bytesfuente
Python 2,
8281 bytesDemasiada mala reputación para comentar. Versión de Python 2 de la solución de Alexander Nigl. Guarda los personajes perdidos entre paréntesis. Además, 3600 no es necesario en el cálculo del tiempo de sueño.
7 caracteres guardados en general.
Editar: -1 byte gracias a @Kevin Cruijssen
fuente
;
al final del programa. Parece funcionar bien sin él. :) Buena respuesta, así que +1 de mí (ahora puedes comentar)Script de comandos de Windows, 87 bytes
Esto compara continuamente una variable de hora almacenada al inicio con la hora actual y tiene éxito si es diferente.
fuente
Perl, 62 bytes
La variable especial
$^T
(aka$BASETIME
) registra el número de segundos desde la época en que se inició el script. Afortunadamente, los segundos bisiestos no se cuentan en el total, por lo que los siguientes son equivalentes:Sorprendentemente, esta variable no es de solo lectura.
fuente
-E
parece ser un lugar común aquí, por lo que podría ahorrar 5 bytes utilizandosay
.perl -E
envíos e idiomas que solo tengan intérpretes en línea.-E
debería permitirse por defecto. En la mayoría de los casos, la mejora es trivial y poco interesante, de todos modos.Japt ,
7261 bytesCada uno
?
representa un carácter no imprimible Unicode. Aquí se explica cómo obtener el texto completo:Alternativamente, aquí hay un hexdump (con suerte reversible):
Este código se basa en la respuesta JavaScript de George Reith , con algunos cambios específicos de Japt. El otro día descubrí que si comprimes el código y lo insertas en una cadena envuelta en un backtick, se descomprimirá automáticamente. Así es como se procesa a través de la compilación:
En JS, un par de paréntesis devolverá el último valor dentro; por lo tanto, este código establece el evento cronometrado, luego devuelve la
'Legen...'
cadena, que se envía automáticamente a STDOUT. Dado que Japt actualmente no tiene forma de agregar contenido a STDOUT que no sea la salida automática en la compilación, en su lugar he usado la función vanilla JSalert
para la salida temporizada. Espero que esto esté permitido.fuente
Powershell,
5251 bytes-1 byte gracias @Veskah
Esta expresión
Date|% M*e
obtiene el valor de laMinute
propiedad del valor Current DateTime. El ciclo termina cuando esMinute
igual a 0.fuente
Python, 112 bytes
Bastante autoexplicativo.
fuente
Python - 159 bytes
fuente
Mouse-2002 , 62 bytes
Requiere que el usuario presione enter. Yo creo que.
Bien, bien, mientras tomamos muchos bytes y no ganamos nada, divirtámonos un poco.
Muestra:
¡Mira, es un temporizador de cuenta regresiva actualizado en el lugar para la próxima hora! Hace un buen uso del ciclo while, que incluso sin hacer nada ocupará un núcleo.
fuente
BÁSICO, 90 bytes
Directo, golfizado utilizando los prefijos de tipo y la
End
declaración implícita . El costo es que solo funciona en el dialecto FreeBasicfblite
.fuente
Befunge 98 -
6963 bytesEl código contiene un carácter no imprimible (representado
<ETB>
como no imprimibles no parece aparecer en bloques de código). Su código de caracteres es 23 (un carácter de bloque de transmisión final ).Advertencia: el código anterior se ejecutará en un bucle ocupado con la pila cada vez más grande y, por lo tanto, puede consumir grandes cantidades de memoria.
fuente
Gelatina ,
4847 bytes , no competitiva-1 byte gracias a Erik the Golfer (usa "Pierna" como palabra en la compresión)
TryItOnline! o ejecute una versión de prueba con una cadena con formato de tiempo codificado de
“59:57”
("mm: ss").El primer compromiso de Jelly fue realizado por Dennis pocos días después de que creó este desafío, no estoy seguro de en qué fecha este código habría funcionado por primera vez, pero no es competitivo en ningún caso.
Hay, en el momento de la escritura, sólo una manera de acceder al tiempo que es por medio de una cadena con formato,
ŒT
.Este código calcula cuánto tiempo esperar y luego duerme. Si se le llama
hh:00:00
, espera por3600
segundos: convierte"00:00"
y[0,0]
luego resta eso de59
ceder[59,59]
, convierte eso de base sesenta para dar3599
, luego agrega uno por un período de espera total de3600
segundos.Tal vez se podría hacer un bucle; o una cadena comprimida que usa la palabra completa "Legendario" podría utilizarse de alguna manera?
fuente
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»
lugar de“¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷»
.Leg
(desdeLegen
) también es una palabra :) Además, esta respuesta no es válida, ya que depende de los minutos y los segundos que sean00
. En su4ŒT
lugar, debe hacer algo , ya que hay una regla que establece queIn the event that the program is started in the first second of a full hour, it should it wait for the next full hour.
00:00
ya que no está probando esa condición: calcula cuántos segundos hasta el siguiente"00:00"
y luego espera. Por lo tanto, se convertiría"00:00"
para[0,0]
restar59
y generar una[59,59]
conversión de la base sesenta para obtener3599
y luego agregar una para obtener3600
(probar usando la versión de prueba con"00:00"
en lugar de"59:57"
)60*(59-m)+(59-s)
debe ser así60*(59-m)+(59-s)+1
, ¿la segunda vez que aparece?sleep x seconds then return y
porque<dyad>@
puede definirse como otra díada con args intercambiados.MathGolf , 39 bytes
Pruébalo en línea!
Casi venció a Pyth ...
Explicación
fuente
Pyth - 36 bytes
Espera hasta que los minutos sean 0 con un ciclo while.
fuente
:00:00
Java, 136 bytes
Cuántos milisegundos pasaron desde la última hora completa es el resultado del
System.currentTimeMillis()
mod 3.600.000.El programa monolítico equivalente tiene 159 bytes de longitud:
fuente
QBIC , 58 bytes
Explicación
fuente