Su tarea es crear un programa que imite al Big Ben (Twitter) .
Tarea
Cada vez que comienza una nueva hora (de acuerdo con la hora local de su computadora o UTC), debe generar tiempos BONG
repetidos hour
(con un espacio entre las palabras). Por ejemplo, cuando son las 3 en punto, debe salir BONG BONG BONG
. El formato de hora sigue el formato de 12 horas, es decir, después de las 12 en punto, tenemos 1 y no 13. El programa / función debe ejecutarse para siempre.
Ejemplo:
no envíe cosas dentro de los corchetes
(start: 00:34 for example)
BONG (01:00)
BONG BONG (02:00)
(...)
BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00)
BONG (01:00 again)
(...)
(it continues forever)
Reglas
- Cada serie de
BONG
s debe estar separada por una nueva línea - Se permiten nuevas líneas iniciales / finales
- Sin embargo, los espacios iniciales / finales no están permitidos
- La presentación debe correr para siempre
- Su salida puede imprimirse ± 3 segundos desde el comienzo de la hora
- Es posible que no asuma el programa para ser ejecutado en cualquier hora específica
Este es el código de golf , por lo que gana el programa con el bytecount más corto.
code-golf
string
kolmogorov-complexity
date
Kritixi Lithos
fuente
fuente
TIMESKEW="60 1"
hace que los minutos fluyan como segundos.Respuestas:
05AB1E , 43 bytes
Pruébalo en línea! (jaja, esto no funcionará, expirará en 60 segundos. Descargue el intérprete 05AB1E para esto)
Explicación:
¡Esto me llevó un tiempo al golf! Tal vez pueda jugar al golf un poco más, pero late
*><>
, así que es genial :)Versión rápida:
Esperará un segundo al inicio y un segundo entre BONG
fuente
Golpetazo,
71,70, 69 bytesEDICIONES:
Golfed
Explicado
Versión de prueba
Funciona con minutos en lugar de horas.
fuente
yes BONG|sed 12q
*> <> ,
484744 bytesPruébalo aquí! ( o esta versión que lo hace cada minuto para probar )
Esto genera una cantidad de
BONG
s separados por espacios en función de qué hora es (y 13 es 1, etc.). No hay espacio final después de la finalBONG
, y hay una nueva línea final.Técnicamente esto no funciona para siempre (pero básicamente lo hace). Fugas ~ 28 bytes por día (ignorando la sobrecarga del intérprete ...). Tardaría unos 105062 años en perder 1GiB.
Aproximándose para la sobrecarga del intérprete, la pila es solo una porción de
float64
s en el intérprete de Golang. Así que simplemente hice28*8
224 bytes por día. Dividí este número por el número de bytes en un gibibyte (1073741824) y luego 365 para aproximar que tomaría 13132.85 años perder 1 GiB.Nota sobre los intérpretes.
El intérprete en línea está en Javascript. La página debe estar abierta y visible para que pueda verificar la hora actual y generar los BONG. El intérprete de Golang no tiene esa limitación.
Explicación
fuente
JavaScript (ES6),
9993 bytesEsto usa la hora UTC (que se alinea con la cosa real). Debido a la naturaleza no comprobable del código, puede intentar lo siguiente, que hace lo mismo, pero cada 60 segundos:
Aquí hay una versión adicional de 99 bytes que utiliza la hora local:
fuente
alert
es cada minuto para mí (pero el número deBONG
s es correcto), pero se supone que el programa solo sale cada horaJavaScript (ES6),
125123117115 bytes¡Gracias a @ Flp.Tkc por guardar 5 bytes!
¡Gracias a @BenAston por guardar 2 bytes más!
Snack Snippet
fuente
Lote, 142 bytes
Dado que el archivo se ejecuta como un bucle infinito, comienzo con un retraso de 1 s, ya que necesito uno de todos modos después de los bongs, y esto ahorra ciclos de CPU. El
>nul
se coloca con cuidado para guardar un byte (1>nul
causaría que el 1 fuera comido por la redirección). Luego hacemos un bucle hasta que los minutos y segundos sean cero. Los bongs se construyen tomando el módulo de hora negativa 12 y solicitando los últimosh
caracteres de una cadena de 12 caracteres. Cuandoh
es cero, esto realmente nos da la cadena completa, por lo tanto, 12 bongs. Entonces es suficiente reemplazar los caracteres con la palabraBONG
. Cuando se ejecuta, se ve así (tenga en cuenta que la imagen no se repite, por lo que deberá volver a cargarla para ver la animación nuevamente):fuente
Bash + Linux crontab, 90
Esperaba que esto fuera más corto que las otras respuestas de shell. Aún así, creo que es un enfoque interesante:
El script se ejecuta una vez, llena el crontab y luego sale. Sin embargo, la salida de los cronjobs se envía al terminal desde el que se ejecutó el script. Creo que esto satisface el requisito de presentación debe ejecutarse para siempre .
Advertencia : esto borrará todas las entradas crontab existentes, así que asegúrese de tener una copia de seguridad de las existentes.
Esto funciona en Ubuntu 16.04, que usa Vixie
cron
por defecto.fuente
BONG
de lo necesario.cron
estas usando/proc/<PID>/fd/<N>
.Rubí,
11299 bytesVersión antigua
Gracias a QPaysTaxes por los consejos
fuente
sleep(60)
que eso sucedaCheddar v1.0.5, 162 bytes
Cheddar no tiene un lector de tiempo incorporado / lector de salida cmd, ¡así que tuve que improvisar!
Golfizado:
Sin golf:
Explicación:
Debido a la biblioteca estándar limitada de Cheddar, tuve que usar cmd para generar el tiempo. Lo hice guardando la salida de "hora / t", que imprime la hora en formato de 12 horas, en un archivo llamado "c". IO.read devuelve un búfer que fundí en una cadena y se dividió por ":" que aseguró que la hora siempre esté en el índice cero. Guardé toda esa operación en una expresión lambda que me salvó 44 bytes. Después de ese punto, entra en la lógica de "si la hora almacenada no es igual a la hora actual, configure la hora anterior como actual e imprima BONG n veces, recorte el espacio final".
Cheddar puede no ser el lenguaje menos detallado, ¡pero puede ser divertido encontrar soluciones como esta!
Lamentablemente, esta es una solución solo para Windows.
Edición 1: se guardaron dos bytes reemplazando "0 <1" en la condición for por "1". ¡No esperaba que 1 se evaluara como verdadero en este idioma!
fuente
Ruby,
8281 bytesCada segundo verificamos si es el último segundo de la hora, y BONG en consecuencia. Probablemente podría jugar más golf con algunos trucos sucios, pero no sé muchos. También funciona de manera diferente a la otra respuesta de Ruby.
Un byte guardado gracias a la cortesía de QPaysTaxes.
fuente
if
?puts
me olvidé de ese.Python 2 ,
105106 bytesEditar
Se agregó un byte cambiando <a! = Después de los comentarios de @ pinkfloydx33. Buen lugar.
Probado tanto como sea posible localmente pero no funciona en TIO ya que (obviamente) excede el límite de ejecución de 60 segundos. Por favor, siéntase libre de probar localmente :-)
por cierto, perder ese molesto espacio final me costó 7 bytes; de lo contrario, esto habría sido inferior a 100.
En ausencia de TIO aquí se emite después de esperar una hora. El programa se inició a las 15:27 con un código de depuración adicional para mostrar la hora de la impresión (formato de 12 horas).
Bastante sencillo, pero aquí hay una explicación para cualquiera que esté interesado.
fuente
11>0
, ¿h>c
o me estoy perdiendo algo?Python 3 -
1009792 bytesExplicación:
fuente
from time import*<NL>while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])
es de 93 bytesfrom time import*
, como esteC, 238 bytes
No estoy seguro de si esto funciona correctamente, y soy móvil, y mi teléfono no tiene un compilador de C. (Solo funciona en sistemas similares a UNIX)
fuente
f
en lugar demain
? ¿Cómo se supone que esto funcione?sh, 66 bytes
Explicado
fuente
%I
con%M
y funciona por minutos.C, 198 bytes
fuente
Javascript ES6 87 bytes
Editar: El
new Date/36e5%12|0||12
código de @ETHProductions tomó prestado descaradamente para guardar 6 bytesfuente
R,
104105bytesCada segundo, (debería) probar si estamos al final de una hora, luego imprimir esa cantidad de
BONG
s.fuente
12:00:01
?Sys.sleep(60)
eso sucedewhile(1)
porrepeat
.BONG
durante 1 segundo, en lugar de solo una vez. Esto es para garantizar que solo se verifique una vez por segundo.JavaScript ES2015,
1009998969488 bytesExplicación:
h
es una función que obtiene la hora del día basada en 12 horas utilizando el operador restante (%12
).36e5
es el número de milisegundos en una hora que usa la sintaxis exponencial para guardar caracteres. Elnew
operador no requiere que se usen paréntesis con funciones si no hay argumentos, por lo tantonew Date
. JavaScript solo tiene aritmética de coma flotante, la|
operador OR a nivel de bit obliga al número a ser un número entero porque los operadores JS a nivel de bit trabajan con el subconjunto entero de los números representados por el punto flotante IEEE 754.La coma delinea subexpresiones.
p
se inicializa a la hora actual (p=h()
).for(;;)
se usa para verificar repetidamente si algunoBONG
debe alertar a . La verificación se realiza tan rápido como lo permita el tiempo de ejecución.Si la hora ha cambiado (
h()!=p
), entonces actualizamos p y luego alertamos alBONG
s. El operador lógico AND se usa como protección (cortocircuita sih()===p
) para determinar si losBONG
s se emiten.String.prototype.repeat
es nuevo en ES2015 y ahorra algunos caracteres al usar algo como ES5Array.prototype.join
.h
devuelve cero para múltiplos exactos de 12 (es decir, 12 p.m., 12 a.m.), por lo que lo cambiamos a 12 utilizando el OR lógicop||12
.Gracias a Kritixi Lithos y ETHProductions por sus ideas.
fuente
Excel VBA, 143 bytes
Salidas de código a la ventana Inmediatos de VBE
Versión divertida, 143 bytes (no competitiva)
Si bien sería bastante difícil lograr que Excel sobresaliera en BONG, es bastante sencillo lograr que sobresalga
Beep
. LaBeep
llamada produce un pitido, y el código siguiente lo utiliza para producir pitidos que indican la hora, en la hora, separados por pausas de 1 segundo.Al igual que con lo anterior, este código hace que Excel parezca que no responde y
:DoEvents
se recomienda agregar una llamada al final de la primera línea, ya que mejora la experiencia del usuario, sin embargo, esto no es necesario para la ejecución correcta del código.Versión sin golf
fuente
Beep
oDoEvents
no funcionen correctamente en máquinas Mac.C # 234 bytes
No planeo ganar ningún premio aquí, pero una implementación de C # es obligatoria.
Ungolfed con comentarios:
fuente
for(;;)
, cambieh=()=>1+(DateTime.Now.Hour-1)%12;
(tenga en cuenta que tampoco hay espacios en blanco) y luego Enumerable. La repetición se convierte("BONG",t)
(le ahorra dos o tres), luego elimine el espacio en blanco adicional, es decir,if(...)
tenga en cuenta que esto imprimirá todos los bongs concatenados, probablemente tome esos ahorros de bytes para convertir el concat en unir con un espacio como primer argumento.Groovy, 72 bytes
¿Cómo?
Almacene un método para obtener las horas actuales.
Almacenar horas iniciales.
Si bien es cierto, si la hora actual no es igual a la hora anterior, la hora actual de salida se multiplica por "BONG" para generar la hora actual de bongs.
+3 bytes
%12
para bongs no militares.fuente
perl, 60 bytes
Actualizar
Reemplazado
" "
con$"
, eliminadoCORE::
, recuento corregido.Golf
Esto debe ejecutarse con
perl -E
.Observaciones
x while y
es equivalente awhile(y){x}
(dondex
es una sola declaración) pero no necesita los corchetes.sleep
se ejecuta la primera vez antes de que se imprima algo.time
usa UTC. El Big Ben original está en horario de verano (British Summer Time, BST) desde finales de marzo hasta finales de octubre.sleep
devuelve el número de segundos esperados. Esto siempre será cierto.fuente
-E
bandera es +1 byte (hay una página en algún lugar sobre la medición de banderas ...). 2 , no estoy seguro de cómo ejecutar esto, ya queperl -E golf.pl
parece terminar inmediatamente.QBIC , 82 bytes
Realmente necesito cambiar el token para los literales de código (
$
) e implementar una función de subcadena (left$(x,y)
puede ser más corta).El funcionamiento interno:
Actualización (NC):
$
ya no se usa en el conjunto de instrucciones de QBIC, por lo que ahora se puede usar libremente como código para QBasic sin la necesidad de literales de código. En este caso, ahorra 4 bytes, llevando QBIC a 78 bytes:fuente
SmileBASIC,
7467 bytesProduce grandes cantidades de saltos de línea "finales";)
Editar: guardado 7 bytes con un mejor algoritmo de 24-> 12 horas.
fuente
PHP, 63 bytes
Podría guardar dos bytes más con ASCII extendido. Pero actualmente soy demasiado vago para eso.
imprime los BONG con un salto de línea líder precisamente a la hora completa. Corre con
-nr
.fuente
-n
es algo implícito (ignore php. y vuelva a los valores de configuración predeterminados);-r
le dice a PHP que ejecute código desde un parámetro de línea de comando en lugar de desde un archivo.C, 152
Legible:
fuente