Bueno, sucedió Brexit . Y Sky News, siendo los genios que son, han decidido crear una cuenta regresiva al costado de un autobús.
Tu trabajo es hacer algo similar. El Reino Unido abandona la UE el 31 de marzo de 2019 y debe crear una cuenta regresiva digital para esto que cambia cada segundo (con una desviación de 0.05 segundos permitida).
Entrada
Su programa no debe tener absolutamente ninguna entrada. Está prohibido!
Salida
Debería mostrar el tiempo hasta Brexit en el formato ddd:hh:mm:ss
. Se permiten nuevas líneas iniciales y finales, pero la pantalla debe permanecer en el mismo lugar cada vez. Debería parecer que en realidad está disminuyendo en su lugar. Como señaló @AnthonyPham, esto no significa imprimir suficientes líneas nuevas para "borrar" la pantalla, esto significa que en realidad debe borrar la pantalla.
Una salida como esta no está permitida:
100:20:10:05
100:20:10:04
Tampoco es esto
100:20:10:05
*A thousand newlines*
100:20:10:04
ya que están en más de una línea.
No tiene que preocuparse después de Brexit. Su programa solo tiene que funcionar hasta el 31/3/2019
Reglas
- Las lagunas estándar no están permitidas
- Este es el código de golf, por lo que el código más corto en bytes gana.
- Los mensajes de error (aunque no puedo pensar cómo) no están permitidos
- El código debe poder ejecutarse dentro de 2 años (cuando el Reino Unido abandone la UE) y debe mostrar la hora real y no comenzar desde 730 nuevamente (ver más abajo)
Regla de cuenta regresiva
La cuenta regresiva no debe estar codificada y debe poder ejecutarse en cualquier momento antes de que Brexit termine y aún así producir el resultado correcto. Cuando comienza un nuevo día, la hora debe seguir el siguiente formato
712:00:00:01
712:00:00:00
711:23:59:59
Permítanme decirlo nuevamente, la fecha de finalización del Brexit es el 31/3/2019 a medianoche por conveniencia (31: 3: 19 00:00:00 o 31: 3: 2019 00:00:00 o cualquier otro formato que desee)
NB: Creo que tengo todo, pero no publiqué esto en el Sandbox, de lo contrario, el momento podría haber sido inactivo. Siéntase libre de publicar cualquier sugerencia de mejora porque no es perfecta.
1000
si quiero que cambie una vez por segundo. GraciasRespuestas:
JavaScript,
134129113 bytesEditar: Guardado 2 bytes gracias a @Shaggy. Guardado 11 bytes gracias a @ l4m2.
fuente
<a id=0>
? ¿O algo así?document.body.innerHTML
lugar deo.innerHTML
<tt>
.PowerShell,
70635553 BytesExcluidas comillas dobles, fácil -2 gracias a @Joey
Ejecutar esto con suspensión agrega 8 bytes, pero la entrada es mayormente invisible si se ejecuta sin ellos, versión (63 bytes) con suspensión:
for()
es un bucle infinito, y dentro de ese bucle ...cls
para limpiar la pantalla,obtener
31/3/19
como unDateTime
objeto, y-
la fecha actual a partir de él, para dar el tiempo restante, luego.ToString()
(|% T*
) con el formato correcto.Esto mostrará un tiempo negativo después del brexit.
fuente
T*
funciona. No estoy familiarizado con eso.%
foreach en realidad recoge elT
objeto oString y aceptará la siguiente cadena como argumento. con respecto al formato de fecha y hora, ¿por qué no se ejecuta en máquinas estadounidenses? Pensé que losdd
etc. eran insensibles a la cultura.3/31/19
. También funcionaría en2019-03-31
cualquier lugar, pero eso le cuesta unos pocos bytes.31Mar19
lugar de31/3/19
que, con suerte, debería solucionarlo.Excel VBA,
918482 bytesGuardado 7 bytes gracias a JoeMalpass que señala que Excel ve las fechas como números.
Guardado 2 bytes gracias a JoeMalpass
La salida es a la celda
A1
en la hoja de Excel activa.fuente
("2019-3-31")
con(43555)
. Sin embargo, cuando intento ejecutar esto en Excel, se congela después de unos 5-6 segundos ...Now
funciona sin el()
demasiado ...Python 3.6, 146 bytes
fuente
C #,
173172156150127 bytesGuardado 16 bytes gracias a @Bob Guardado 6 bytes gracias a @ Søren D. Ptæus
Versión formateada:
fuente
(TimeSpan)0
? Por teléfono, no puedo probar en este momento. Todavía puede soltar el borrado a medida que el retorno de carro se ocupa de ello: vuelve a colocar el cursor al comienzo de la línea.Clear
! Tonto de mí. Y no, no se puede convertirint
aTimeSpan
que ya había intentado que uno.(t = new DateTime(2019, 3, 31) - DateTime.Now).Ticks > 0
.JavaScript ES5,
320319316305295284 bytesGracias a @Fels por hacer referencia
Math
, @dgrcode por hacer referenciaconsole
Sin golf
fuente
g=Math;
Math
todavía puede guardar 2 bytes, ¿verdad?var
. Además, elija nombres más cortos para las variables, como enh
lugar dehours
o enm
lugar deminutes
. Probablemente al hacerloc=console
ahorrará un par de bytes más. También en1e3
lugar de1000
PHP, 84 bytes
Bastante sencillo. 1553990400 es la marca de tiempo para 31-3-2019 00:00:00 en UTC. Se repite infinitamente, usando DateTime-> diff () -> format () para mostrar cuánto tiempo queda. Después de que Brexit haya sucedido, comenzará a contar desde 0.
Versión comentada / más legible:
fuente
<?
etiqueta aquí? 2. Creo que tus paréntesis están equivocados, ahora estás llamando->diff
al eco en lugar del objeto DateTime. 3. echo funciona sin paréntesis de todos modos. 4. Incluso después de arreglar esto, esto no funciona para mí, pero soy nuevo en el golf, así que podría ser simplemente un idiota.CJam,
69625957 bytesGuardado 7 bytes al convertir a formato de hora de manera diferente
Guardado 3 bytes gracias a las sugerencias de Martin Ender
Se guardaron 2 bytes utilizando un retorno de carro en lugar de espacios de retroceso
No se puede ejecutar en TIO por razones obvias.
Reescribe la pantalla constantemente en un bucle infinito para que el texto parpadee (al menos en mi consola), aunque en realidad solo actualiza el tiempo una vez por segundo.
Esta versión de 70 bytes solo se imprime una vez por segundo:
Explicación
fuente
Ab
cons
, y guardar un byte haciendo1e3/
primero y luego dividir en el orden opuesto60md\60md\24md\]W%
.{60md\}2*
salva a otro.Python 3.5 (118 bytes)
fuente
C # 6, 149 bytes
¡Gracias a Bob por salvar 57 bytes!
Programa sin golf:
C #,
210206159 bytes¡Gracias a Bob por guardar otros 47 bytes!
¡Gracias a Martin Smith por guardar 4 bytes!
Programa sin golf:
fuente
new DateTime(2019,3,31)
Es más corto.Console.Clear
y en lugar de anteponer"\r"
la cadena, por ejemplo"\r"+(x-a)...
(x-a).ToString(@"d\:hh\:mm\:ss")
es equivalente a `String.Format (" \ r {0: d \\: hh \\: mm \\: ss} ", xa)` es equivalente a$@"{x-a:d\:hh\:mm\:ss}"
(cadena más corta e interpolada en C # 6.0). Si lo hace, a continuación, puede acortar aún más el pleno"\r"+$@"{x-a:d\:hh\:mm\:ss}"
en$"\r{x-a:d\\:hh\\:mm\\:ss}"
.C, 104 bytes
Descompostura
Se basa en
time
devolver el número de segundos desde el 01/01/1970, que es el caso para mí (usando Clang / GCC en macOS) y debería ser el caso para la mayoría de las cosas de UNIX.Usos
secuencias de escape de terminalbashpara mover el cursor (<esc>[1A
mueve el cursor hacia arriba 1 línea). Sería mejor poder usarlo simplemente\r
, peroprintf
no se enjuagará hasta que vea una nueva línea, y enjuagarlo manualmente requiere mucho más.Probablemente la cuenta regresiva más intensiva de CPU que he visto. Se ejecuta en un bucle dinámico para asegurarse de que siempre sea lo más preciso posible. Si se ejecuta después de la fecha límite, producirá algunas cosas bastante extrañas (¡negativos en todas partes!)
fuente
main(x)
no es una forma válida de main, se ha eliminado int implícito del lenguaje. Creo que la versión mínima y segura esint main(){}
.AHK , 145 bytes
Esta no es la respuesta más corta, pero el resultado da una muy buena sensación de fatalidad, creo. Originalmente traté de enviar las pulsaciones de teclas Ctrl+ Aseguido de DELy luego, sea cual sea el momento, pero la frecuencia de actualización era demasiado lenta y destruiría cualquier entorno en el que estuvieras. En su lugar, fui con la GUI. Resultó tomar menos bytes para destruir completamente la ventana y recrearla de lo que hizo para actualizar el control una y otra vez, así que seguí con eso. Es un lindo efecto.
fuente
C #,
128127 BytesCódigo sin golf:
No habría descubierto el truco sin la ayuda de las otras respuestas de C # aquí.
Para cualquiera que busque una mejora adicional, también puede poner la expresión Write () dentro del ciclo for. Parece que debería poder guardar un byte de alguna manera aquí, porque eso me ahorra el punto y coma para esa declaración, pero funciona al mismo número porque no puedes tener un cuerpo completamente vacío:
fuente
Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}");
ddd
pads los ceros, se ve mejor que el método de dos espacios agradable.Rubí (83 bytes)
Sin golf
Básicamente una de las presentaciones de Python, con algunas mejoras. Simplemente emitimos un "\ r" para ir al principio de la cadena antes de volver a renderizar. Y para el formato de cadena de
"%03d:%02d:%02d:%02d"
, realmente no nos importa el ancho en el primer especificador ... así que podemos hacerlo"%02d"*4
, y emitir un retroceso y un espacio para borrar los dos puntos innecesarios adicionales.Además, he encontrado un número de dos caracteres más corta
print
:$><<
.$>
es una taquigrafía global para$defout
, que es la secuencia de salida paraprint
y,printf
y por defectoSTDOUT
.IO#<<
escribe el lado derecho de la misma en la secuencia. ¿Cómo son esos dos caracteres más cortos? Bueno, ahora puedo omitir el espacio que conducía antes del paréntesis envolviendo la cadena de formato.En este punto, realmente creo que no hay forma posible de acortar más este programa en Ruby.
Editar: estaba equivocado. En lugar de la primera
Time.new(2019,3,31)
, podemos simplemente usar el tiempo UNIX prima:1553990400
.Edición 2: He intentado jugar con la factorización de minutos y dividir la marca de tiempo de UNIX por esa constante, pero en realidad no termina guardando ningún byte. :(
Edición 3: Resulta el almacenamiento en caché
h=3600
en realmente me hirió por dos bytes. WhoopsEdición 4: Guardado 3 bytes gracias a @EricDuminill. ¡Utilizó flotadores, pero los racionales funcionan sin pérdida de precisión!
Edición 5:
Array#*
como un alias paraArray#join
, con la?
sintaxis de Ruby para caracteres individuales.fuente
loop{h=431664-Time.now.to_f/3600;$><<('%02d:'*4+"\b \r")%[h/24,h%24,h%1*60,3600*h%60]}
sin embargo, los segundos pueden estar apagados en 1 debido al redondeo.to_r
lugar deto_f
preservar la precisión..to_r
en lugar de.to_f
+"\r"
a la derecha de la matriz. Esto le permite usar en['%02d']*4*?:
lugar de'%02d:'*4+"\b "
para que pueda perder los paréntesis, lo que le da un byte. Guarde otro byte escribiendo en+?\r
lugar de+"\r"
.JavaScript + HTML, 136 + 7 = 143 bytes
fuente
C #, 142 bytes
Programa sin golf:
fuente
ToString()
bytes y en su lugar construir el formato en el método Write (), o tal vez una cadena interpoladagoto
idea básica .Bash + fecha GNU, 128 bytes
2 bytes recortados gracias a @muru y 2 antes gracias a @This Guy.
Sin golf
fuente
while[1]
?line 1: [1]: command not found
error. Parece que los espacios son obligatorios :-(3600
a una variable para guardar 2 bytes? ¿También puede cambiarB=3600;A=86400
aB=3600;A=24*B
otro byte?A=$[24*B]
así que no es posible allíC=:%02d;printf "%03d$C$C$C\r"
para guardar un byte? Y mueva las asignaciones a A y B en el contexto aritmético: ¿D=$[B=3600,A=24*B,1553990400-`date +%s`]
guardar otro?MATL, 45 bytes
Aparentemente, TIO no admite borrar la salida, pero afortunadamente, MATL Online sí .
Con 2 bytes más, una versión un poco más amigable con la CPU que hace un
pause
(reposo) cada segundo:Prueba esto en MATL Online
737515
el "31 de marzo de 2019" representa el formato de época predeterminado de MATLAB: número de días desde el 0 de enero de 0000, que incluye opcionalmente una parte fraccionaria para representar la hora del día. (Intenté acortar esto al calcularlo de alguna manera, pero sus únicos factores son 5 y otro número de seis dígitos (147503), y no pude encontrar una manera de hacerlo en menos de 6 bytes).fuente
PHP, 64 bytes
Esto contará exactamente hasta
0:00:00:00
y luego romper / salir. Corre con-r
.-2 bytes si no tuviera que imprimir el 0.
fuente
RPL
8378 bytesAsumiendo que su HP48, o similar, está configurada con la hora y fecha correctas (Reino Unido), formato de fecha mm / dd y formato de 24 horas:
Me sorprendió poder ahorrar 2 bytes eliminando espacios alrededor
":"
. 1.1 es la fecha de validez más corta, luego volcadaSUB
. Tenga cuidado con los emuladores, el tiempo puede correr más rápido o más lento (o nada) que su reloj de pared. Con un HP real, puede detener este programa presionando la tecla ON ... o esperar a que se agoten las baterías.fuente
PHP,
1029590 bytesGuardado 7 bytes gracias a @TheLethalCoder y al no factorizar
Se guardaron otros 5 bytes concatenando
Este es mi primer golf, por lo que probablemente me faltan algunos trucos, pero aquí estás de todos modos.
En cuanto a la respuesta PHP de @chocochaos que de otro modo superaría esto, creo que es defectuoso por las razones que he explicado en mis comentarios, pero como soy nuevo aquí, podría estar equivocado.O solo soy un novato :)fuente
$a
una vez, así que también podría usar el número en su lugar. No estoy muy familiarizado con php, pero parece que podría haber más mejorasflawed because of reasons stated in the comments
? Si te refieres a los comentarios sobre su respuesta, eres el único que ha comentado.<?=
etiqueta de apertura y soltando el eco, asignando$b
el lugar donde lo usa por primera vez. Además, puede guardar 3 bytes usando en^0
lugar defloor
. Es bit a bit e implica un reparto a int, es la forma más corta de emitir a int que he visto.AWK , 78 bytes
Pruébalo en línea!
Pasó más tiempo antes de darme cuenta de que podía calcular previamente el tiempo final. A veces vale la pena llegar un poco tarde al juego y obtener ideas de otros.
Para su información, el enlace TIO no funciona muy bien, ya que no se implementa
\r
correctamente.fuente
F #, 142 bytes
Crecí en Irlanda a medio kilómetro de la frontera. Aparte de un cartel de "Bienvenido a Fermanagh" y el cambio de las marcas viales, no sabría que ha entrado en otro país. Solía cruzarlo dos veces camino a la escuela.
fuente
c, gcc 114 bytes
Nada omitido, programa completo. El programa se compila en gcc en Ubuntu. La cuenta regresiva no mostrará una larga pista de declaraciones de impresión debido a la llamada del sistema para borrar y se detiene cuando la cuenta regresiva llega a 0 segundos.
Sin golf
fuente