Legen ... espera ...


68

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:

  1. Impresión

    Legen... wait for it...
    

    inmediatamente, con una nueva línea al final.

  2. Espere hasta la próxima hora completa (cuando se ejecuta el trabajo cron para otorgar la insignia).

  3. 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 .


1
No entiendo cómo la tercera regla adicional difiere de la básica "espera hasta la próxima hora completa"
Fatalize

2
@Fatalize Eso es solo una aclaración de que tienes que esperar hasta que cambie la hora, no hasta que los minutos y los segundos sean ambos a las 00 .
Dennis

25
¡Feliz insignia legendaria, @Dennis!
Kritixi Lithos

36
@ ΚριτικσιΛίθος ¡Gracias! (Gracias a Dios por completar las pestañas.)
Dennis

2
"A la hora" sería una forma más estándar (y creo que mucho más clara) de describir lo que usted llama "la próxima hora completa" (al menos en inglés americano).
jpmc26

Respuestas:


12

Pyth, 42 41

J.d6." wâ«­hÖ`Ùá©h´^"WqJ.d6;"dary!

A continuación hay un hexdump del código:

00000000  4a 2e 64 36 2e 22 20 77  0c 10 89 e2 ab 1b ad 68  |J.d6." w.......h|
00000010  0f 8c d6 60 d9 e1 a9 68  82 b4 5e 22 57 71 4a 2e  |...`...h..^"WqJ.|
00000020  64 36 3b 22 64 61 72 79  21                       |d6;"dary!|

Guardado 1 byte gracias a @isaacg

Utiliza la .dfunción para obtener valores relacionados con la hora local. .d6Devuelve 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 .d7o .d8durante minutos / segundos, pero el compilador en línea solo imprime cualquier cosa cuando finaliza el programa.

¡Felicidades, Dennis! :)


La cadena se puede comprimir en 1 bytes mediante el empaquetado-str. Hexdump:0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
isaacg

@isaacg Vaya, lo había comprobado pero debí haber estropeado el conteo. Pensé que solo comprimía 1 byte, por lo que el extra .lo haría de la misma longitud. Errores tontos off-by-one: P
FryAmTheEggman

Solo tratar de averiguar qué podría hacer esto (sin experiencia con Pyth) me hizo reír. Ya veo dary, pero no legen! Y Pyth afirma ser más fácil de entender para aquellos acostumbrados a la programación convencional ...
Cyoce

@Cyoce Si busca en el historial de edición, puede encontrar una versión más fácil de leer. El ."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 :)
FryAmTheEggman

26

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.

setTimeout(a=alert,36e5-new Date%36e5,"dary!");a`Legen... wait for it...
`


11
¿ 36e5Funcionaría en lugar de 3.6e6?
ETHproductions

8
@ETHproductions ¡Belleza!
George Reith

3
@ETHproductions Esa es una mala notación científica. No tenía idea de que funcionaba en Javascript. ¡Aprendí algo hoy!
Ismael Miguel

2
@Optimizer Ah no sabía que setTimeoutsería evalpara mí. Es cierto ... Originalmente estaba tratando de usar, console.logpero eso ni siquiera funciona cuando se almacena en una variable debido al contexto. ¡Tú también eres hermosa!
George Reith

1
Puede usarlo setTimeoutcorrectamente e incluso guardar un byte:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
Bergi

9

CJam, 49 48 bytes

et3="Legen... wait for it...
"o{_et3==}g;"dary!"

Utiliza hora local. Para fines de prueba, puede reemplazar las dos instancias de 3con 4o 5para 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 etque le brinda una variedad de

[year month day hour minute second ms weekday utc_offset]

Aquí hay un desglose del código:

et3=       e# Get the current hour.
"Legen..." e# Push the first string including the linefeed.
o          e# Print it.
{          e# While the top of stack is truthy (which is popped)...
  _        e#   Copy the original hour.
  et3=     e#   Get the current hour.
  =        e#   Check for equality.
}g
;          e# Discard the original hour.
"dary!"    e# Push the second string which is printed automatically.

Prima

Esto también funciona para el mismo número de bytes:

et4<"Legen... wait for it...
"o{et1$#!}g;"dary!"

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.


9

AppleScript, 157 149 bytes

Huh Sorprendentemente contencioso.

establecer d en el número 1 en la cadena de tiempo de (fecha actual)
log "Legen ... espera ..."
repita mientras d = número 1 en la cadena de tiempo de (fecha actual)
fin
log "dary!"

Dado que se logimprime 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:

cadena de tiempo de (fecha actual)

Salida:

5:02:03 PM

Tomará el primer número ( 5) antes de los dos puntos.

Pensé que sería mucho más largo que esto, en realidad. xD


Entonces, ¿qué pasa si lo ejecutas a las 03:03:00?
Blacklight Shining

@BlacklightShining Obtendrá el número 3 en la parte delantera y esperará hasta las cuatro. Solo es consciente del número antes del colon.
Addison Crump

Oh, me perdí eso. Bueno. Por extraño que parezca, en realidad estoy obteniendo "1"de number 1 in time string of(current date)...
Blacklight Shining

@BlacklightShining Probablemente estés usando una versión anterior; en El Capitan, esto es equivalente a first number in time string of (current date).
Addison Crump

Estoy en Yosemite, sí. first numbertambién me da solo el primer dígito del tiempo (en "0"este momento, a las 04:38).
Blacklight Shining

8

Muñeco de nieve 1.0.2 , 70 69 bytes

~"Legen... wait for it...
"sP3600000*vt#nDnC!*:vt+#nD!#nL;bD"dary!"sP

Explicación:

~              Make all variables active.
"..."sP        Print the first string.
3600000*vt#nD  Get the number of hours since the Unix epoch.
nC             Ceiling (round up), giving the time (divided by 36000) at which to
                 print the second string.
!*             Save that in a permavar.
:...;bD        Do the stuff in the block while its "return value" is truthy.
  vt+#nD       Again, get the number of hours since epoch.
  !#             Store the permavar that we saved earlier.
  nL             Is the current time less than the target time? (if so,
                   keep looping)
"..."sP        Print the second string.

7

PHP, 76, 70, 65, 62 51 bytes

Legen... wait for it...
<?while(+date(is));?>dary!

Lógica anterior (63b):

Legen... wait for it...
<?for($h=date(G);date(G)==$h;)?>dary!

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 <?phpa la versión corta <?(thanks primo)
-1 byte reemplazando whilepor a for
-3 bytes reemplazando date(G)!=$h+1a date(G)==$h(gracias primo)


Bonito, pero {};y echo?>lo reducirían un poco. Aunque preferiríaLegen... wait for it...↵<?php while(+date('is'));?>dary!
manatwork

1
Algunos consejos: puede usar etiquetas abiertas cortas (solo en <?lugar de <?php). El uso for(;;)tiene la misma longitud que while(), pero le permite mover la $hasignación, sin necesidad de un punto y coma ( for($h=date(h);...). Lo que {}no era necesario, pero tampoco lo es lo ;anterior ?>. Sin $hembargo, es posible que tenga un problema con 12 ( date(h)nunca será 13).
primo

Gracias a ambos, actualicé mi respuesta en consecuencia. No me siento muy bien, supongo que no debería hacer un trabajo importante hoy, porque muestra claramente jaja
Martijn

2
Cambiar date(G)!=$h+1a date(G)==$h. Más corto, y resuelve el problema de la hora;) Además, elimine el punto y coma antes ?>.
primo

1
@manatwork no podrá esperar si el código se ejecuta a HH:00:00, es decir, dentro del primer segundo de una hora completa.
primo


5

Javascript 94 90 87 bytes

No jugó mucho golf ...

alert`Legen... wait for it...`,l=l=>~~(Date.now()/36e5);for(z=l();z==l(););alert`dary!`

Versión de Downgoat:

(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`

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.


2
87 bytes:(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
Downgoat

@Downgoat Gracias! (Estoy tratando de jugar golf ahora mismo).
Stefnotch

1
Aún más corto (85 bytes):(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
Downgoat

2
@Downgoat Un byte más corto:for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
Ismael Miguel

4

MATLAB - 89 bytes

a=@()hour(now);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')

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 un whilebucle 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, mostramos dary!y luego se produce un retorno de carro.

La hora de MATLAB se basa en la indexación de 24 horas, por lo que modse 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 hourfunción requiere la caja de herramientas Financial Time Series. La nowfunción no está sujeta a esta restricción, pero recupera la fecha y hora actuales como un número de serie que hourse 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 hourfunción para que llame datevecy 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:

a=@()datevec(now)(4);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')

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:

disp('Legen... wait for it...');h=datevec(now);ans=h;while(mod(h(4)+1,24)~=ans(4)),datevec(now);end;disp('dary!');

Primero obtiene la fecha y hora actuales y la almacena en la variable h, así como la almacena en la variable automática llamada ans. 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 whileciclo 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.


En el primero de ellos se puede ahorrar 3 bytes por vez comprobar nowen 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 el a=@()bit porque, tal como está, el código constituye un programa completo. El código adjunto tampoco requiere la caja de herramientas FTS.
Tom Carpenter

¿Cómo sabías de la hourfunción Financial Toolbox ? :-)
Luis Mendo

Ahora veo lo que quisiste decir con tu comentario sobre la necesidad de variables intermedias para indexar ...
Luis Mendo

4

Mathematica, 85 84 81 bytes

c=Print;c@"Legen... wait for it...";a:=DateValue@"Hour";b=a;While[a==b];c@"dary!"

Creo que puedes guardar 2 bytes haciendo "dary!" La expresión de salida.
CalculatorFeline

@CatsAreFluffy Entonces solo sería un fragmento y no un programa completo.
LegionMammal978

¿Entonces? ¿No es aceptable la expresión de salida en Mathematica, o me falta algo?
CalculatorFeline

Existen scripts de @CatsAreFluffy Mathematica, por lo que se espera que cualquier programa completo se ejecute en uno.
LegionMammal978

4

C, 163 bytes

#include<time.h>
f(){puts("Legen... wait for it...");time_t t=time(0);struct tm l=*localtime(&t);while(l.tm_min+l.tm_sec)t=time(0),l=*localtime(&t);puts("dary!");}

3
Bienvenido a PPCG!
Erik the Outgolfer

155 bytes (no se moleste en ejecutarlo en TIO, no terminará, agota el tiempo de espera después de un minuto)
MD XF

3

Microscript II, 45 bytes

"Legen... wait for it..."P[36s5E*sD%_]"dary!"

Finalmente, un uso para la Dinstrucció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 .


¿Puedes agregar una explicación? c:
Addison Crump

@VoteToClose Hecho
SuperJedi224

3

TI-BASIC, 70 64 bytes

getTime
Disp "Legen... wait for it...
Repeat sum(getTime-Ans,1,1
End
"dary

¡Maldice estas letras minúsculas de dos bytes!

getTimedevuelve 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.


3

R - 97 bytes

cat('Legen... wait for it...\n')
Sys.sleep(1)
while(as.double(Sys.time())%%3600>0){}
cat('dary!')

3

Python 3 - 92 89 bytes

from time import*;print("Legen... wait for it...");sleep(3600-time()%3600);print("dary!")

3

Python 2, 82 81 bytes

from time import*;print'Legen... wait for it...';sleep(-time()%3600);print'dary!'

Demasiada 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


1
Se puede guardar un byte adicional eliminando el final ;al final del programa. Parece funcionar bien sin él. :) Buena respuesta, así que +1 de mí (ahora puedes comentar)
Kevin Cruijssen

gracias cargas @KevinCruijssen
Henry T

2

Script de comandos de Windows, 87 bytes

@set.=%time:~,2%&echo.Legen... wait for it...
:.
@if %.%==%time:~,2% goto:.
@echo.dary!

Esto compara continuamente una variable de hora almacenada al inicio con la hora actual y tiene éxito si es diferente.


2

Perl, 62 bytes

sleep -++$^T%3600+print'Legen... wait for it...
';print'dary!'

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:

print$^T%3600;
@T=gmtime;print$T[1]*60+$T[0];

Sorprendentemente, esta variable no es de solo lectura.


No contar -Eparece ser un lugar común aquí, por lo que podría ahorrar 5 bytes utilizando say.
Dennis

De la descripción del desafío: "Puedes escribir un programa o una función". El código ejecutado desde la línea de comando no es ninguno.
primo

Entiendo tu argumento. Sin embargo, la restricción a los programas o funciones se aplica a todos los desafíos de forma predeterminada, sin embargo, todavía permitimos perl -Eenvíos e idiomas que solo tengan intérpretes en línea.
Dennis

No estoy de acuerdo con que -Edebería permitirse por defecto. En la mayoría de los casos, la mejora es trivial y poco interesante, de todos modos.
primo

2

Japt , 72 61 bytes

`{?tT?e?t(Ã?t,36e5-?w D?e%36e5,'ÜÝ!'),'Leg?... Ø2 f? ?...\n'}

Cada uno ?representa un carácter no imprimible Unicode. Aquí se explica cómo obtener el texto completo:

  1. Abra el intérprete en línea .
  2. Pegue este código en el cuadro Código:
Oc"`\{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\\n'}
  1. Ejecute el código, luego bórrelo del cuadro Código.
  2. Seleccione el contenido del cuadro Salida y arrástrelo al cuadro Código. Copiar y pegar no funcionará .
  3. Reemplace el primer espacio con un espacio que no se rompa.
  4. (opcional) Configure el reloj de su computadora en xx: 59.
  5. Ejecuta el código.

Alternativamente, aquí hay un hexdump (con suerte reversible):

00000000: 607b a074 548b 658c 7428 c300 742c 3336 65    `{ tT?e?t(Ã?t,36e
00000011: 352d 9a77 2044 8565 2533 3665 352c 27dc dd    5-?w D?e%36e5,'ÜÝ
00000022: 2127 293b 274c 6567 812e 2e2e 20d8 3220 66    !'),'Leg?... Ø2 f
00000033: 8e20 8a2e 2e2e 5c6e 277d                      ? ?...\n'}

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:

`{?tT?e?t(Ã?t,36e5-?w D?e%36e5,'ÜÝ!'),'Leg?... Ø2 f? ?...\n'}
"{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\n'}"
""+(setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\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 JS alertpara la salida temporizada. Espero que esto esté permitido.


¿Puedes publicar un hexdump de esto?
un espagueti

@quartata Hecho. Creo que es correcto
ETHproductions

2

Powershell, 52 51 bytes

-1 byte gracias @Veskah

'Legen... wait for it...'
for(;Date|% M*e){}'dary!'

Esta expresión Date|% M*eobtiene el valor de la Minutepropiedad del valor Current DateTime. El ciclo termina cuando es Minuteigual a 0.


1
Debería poder poner el 'dary' directamente después de los aparatos ortopédicos, o al menos puede hacerlo en PSv5.
Veskah

1

Python, 112 bytes

import time as t;print "Legen... wait for it...";n=t.ctime();t.sleep((60-n.tm_min)*60+60-n.tm_sec);print "dary!"

Bastante autoexplicativo.


Puede guardar 2 eliminando los espacios entre las declaraciones de impresión y las siguientes cadenas. :)
Henry T

1

Python - 159 bytes

from datetime import*;from threading import*;p=print;n=datetime.now();p('Legen... wait for it...');Timer(3600-(n.minute*60+n.second),lambda:p('dary!')).start()

1

Mouse-2002 , 62 bytes

Requiere que el usuario presione enter. Yo creo que.

"Legen... wait for it..."?&HOUR 1+x:(&HOUR x.=["dary"33!'0^])

Bien, bien, mientras tomamos muchos bytes y no ganamos nada, divirtámonos un poco.

"Legen... wait for it... "?     ~ print & require keypress

&HOUR 1+ x:                     ~ get hr, add 1 and assign
(                               ~ while(1)
  &HOUR x. =                    ~ cmp current hr, stored hr
  [                             ~ if same
    #B;                           ~ backspace
    "dary"36!'                    ~ print this string and a !
    0^                            ~ exit cleanly
  ]                             ~ fi
  &MIN 59 - &ABS !              ~ get min, subtract from 59, abs & print
  ":"                           ~ record sep
  &SEC 59 - &ABS !              ~ same for second
  #B;                           ~ backspace
)
$B 8!' 8 !' 8 !' 8 !' 8 !'@     ~ backspace 5*
$                               ~ \bye

Muestra:

$ mouse legend.m02
Legen... wait for it... 20:32

¡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.


1

BÁSICO, 90 bytes

Print"Legen... wait for it...":x$=Left(Time,2):Do:Loop Until x$<>Left(Time,2):Print"dary!"

Directo, golfizado utilizando los prefijos de tipo y la Enddeclaración implícita . El costo es que solo funciona en el dialecto FreeBasicfblite .


1

Befunge 98 - 69 63 bytes

 v
v>a"...ti rof tiaw ...negeL<ETB>"k,
>"EMIT"4(MS+_"!yrad"5k,@

El 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.


1

Gelatina , 48 47 bytes , no competitiva

-1 byte gracias a Erik the Golfer (usa "Pierna" como palabra en la compresión)

“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»Ṅø3ŒTṣ”:V_@59ḅ60‘œS@“dary!”

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 por 3600segundos: convierte "00:00"y [0,0]luego resta eso de 59ceder [59,59], convierte eso de base sesenta para dar 3599, luego agrega uno por un período de espera total de 3600segundos.

Tal vez se podría hacer un bucle; o una cadena comprimida que usa la palabra completa "Legendario" podría utilizarse de alguna manera?

“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»Ṅø3ŒTṣ”:V_@59ḅ60‘œS@“dary!” - Main link: no arguments
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»                            - compressed "Legen... wait for it..."
                    Ṅ                           - print z + '\n', return z
                     ø                          - niladic chain separation
                      3ŒT                       - '011' (3) time formatted string = "mm:ss"
                         ṣ”:                    - split on ':' -> ["mm","ss"]
                            V                   - eval -> [m,s]
                             _@59               - subtract from 59 - > [59-m, 59-s]
                                 ḅ60            - convert from base 60 -> 60*(59-m)+(59-s)
                                    ‘           - increment -> 60*(59-m)+(59-s) = y
                                        “dary!” - "dary!" = x
                                     œS@        - sleep y seconds then return x
                                                - implicit print

1
Usar en “ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»lugar de “¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷». Leg(desde Legen) también es una palabra :) Además, esta respuesta no es válida, ya que depende de los minutos y los segundos que sean 00. En su 4ŒTlugar, 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.
Erik the Outgolfer el

Genial, "Leg" ahorra un byte, gracias. Sin embargo, el enlace funciona cuando se lo llama, 00:00ya 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]restar 59y generar una [59,59]conversión de la base sesenta para obtener 3599y luego agregar una para obtener 3600(probar usando la versión de prueba con "00:00"en lugar de "59:57")
Jonathan Allan

1
Oh. Parece que no puedo leer código Jelly largo, y que no puedo conocer los usos y expectativas de todos :) Aunque, en la explicación, creo que 60*(59-m)+(59-s)debe ser así 60*(59-m)+(59-s)+1, ¿la segunda vez que aparece?
Erik the Outgolfer

No hay problema: el comentario no es el más claro que he escrito.
Jonathan Allan

Bueno, si no puede tomarse la molestia, puedo editarlo. Además, recomendaría hacer x / y como izquierda / derecha, y solo decir, sleep x seconds then return yporque <dyad>@puede definirse como otra díada con args intercambiados.
Erik the Outgolfer

1

MathGolf , 39 bytes

"Legen... wait for it..."pÆt♪/╚÷▼"dary!

Pruébalo en línea!

Casi venció a Pyth ...

Explicación

Æ     ▼  Repeat the next 5 characters while false
 t       push unix time in milliseconds
  ♪/     divide by 1000
    ╚÷   check if divisible by 3600 (tio solution has 3 in its place)

"Casi"? Parece que lo hiciste.
Patrick Roberts el

@PatrickRoberts hay otra solución de Pyth que tiene 36 bytes, no podría llegar incluso con cadenas comprimidas y otros trucos.
maxb

Oh ese Está mal, mira el comentario.
Patrick Roberts

@PatrickRoberts Podría fallar en el criterio "debe esperar una hora si se ejecuta a las 00:00" también, pero podría cambiarlo para verificar Unixtime en milisegundos divisible por 3600000 con el mismo conteo de bytes. Dado que la primera impresión debería tomar más de un milisegundos, siempre debería funcionar.
maxb

0

Pyth - 36 bytes

Espera hasta que los minutos sean 0 con un ciclo while.

"Legen... wait for it..."W.d7)"dary!

11
:00:00
Debe

0

Java, 136 bytes

class a{void A(){System.out.println("Legen... wait for it...");while(System.currentTimeMillis()%3600000!=0);System.out.print("dary!");}}

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:

interface a{static void main(String[]A){System.out.println("Legen... wait for it...");while(System.currentTimeMillis()%3600000!=0);System.out.print("dary!");}}

0

QBIC , 58 bytes

?@Legen... wait for it...|#Dary!|{~mid$$|(_d,4,2)=@00||_XB

Explicación

?@Legen... wait for it...|     Define string literal "Leg[..]it..." and print it
#Dary!|                        Define string B as "Dary!", but don't use it yet
{                              Opens an indefinite DO loop
~mid$$|(...)=@00|              Translates to IF MID$(...) = C$, where C$ is "00"
    The MID$ takes two characters, starting from pos 4, from the system's time (_d)
    So, if the string "11:00" has "00" starting at pos 4,
_XB                            Terminate the program and print string B
(The DO loop and the IF are closed implicitly)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.