Alguien construyó un reloj realmente elegante usando números de Fibonacci, que se ve muy bien pero es bastante inutilizable. Justo como nos gusta! Vamos a recrear esto.
El reloj se compone de 5 secciones correspondientes a los primeros cinco números de Fibonacci, comenzando desde 1 (es decir, 1, 1, 2, 3, 5):
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
El reloj es capaz de mostrar el tiempo de 12 horas en incrementos de 5 minutos. Así es como funciona eso. Considere el tiempo 7:20. La hora 7 se puede descomponer en los números de Fibonacci dados como
7 = 2 + 5
También hay 4 unidades de cinco minutos. Los 4 se pueden descomponer como
4 = 2 + 1 + 1
Ahora las horas se muestran en rojo, los minutos se dividen en verde, y si se usa un número para horas y minutos, se muestra en azul. Si no se usa un número, permanece blanco. Entonces lo anterior se mostraría como:
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
Pero espera hay mas. Las descomposiciones anteriores no son las únicas posibilidades. También se puede escribir 7 = 3 + 2 + 1 + 1
y 4 = 3 + 1
, lo que daría uno de
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
dependiendo de cual 1
se elija. Por supuesto, también hay otras combinaciones. El reloj elige entre todas las descomposiciones válidas al azar.
Como dije ... esto podría no ganar un premio de usabilidad, pero seguro que es agradable de ver.
El reto
Su tarea es implementar dicho reloj. Su programa (o función) debe imprimir una representación ASCII de la hora actual (redondeada al último múltiplo de 5 minutos) como se describe anteriormente en STDOUT o la alternativa más cercana. Puede elegir leer la hora en cualquier formato común como entrada u obtenerla con funciones de biblioteca estándar. No debe suponer que el tiempo actual / dado es divisible por 5 minutos.
Su solución debe elegir al azar de todas las representaciones posibles de la hora actual. Es decir, cada representación debe imprimirse con una probabilidad distinta de cero.
La medianoche y el mediodía deben tratarse como 0:00
(en lugar de 12:00
).
Opcionalmente, puede imprimir un único carácter de nueva línea al final.
Puede usar cuatro caracteres ASCII imprimibles distintos (códigos de caracteres 0x20 a 0xFE) en lugar de RGBW
. Indique su elección en su respuesta y úsela constantemente.
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
Respuestas:
CJam, 61 bytes
Toma dos enteros separados por espacios a través de STDIN y los usa en
3.14
lugar deWRGB
respectivamente. Pruébalo en línea .Aquí está la
RGBW
versión "sana" para algunos bytes adicionales:Explicación
El algoritmo es el mismo que mi respuesta de Python : muestreo de rechazo generando relojes hasta que obtengamos uno correcto.
fuente
Python 2,
194182bytesEl algoritmo es solo un muestreo de rechazo, por lo que sigue generando relojes hasta que obtiene uno correcto. El reloj se construye comenzando sin nada, luego haciendo "agregar un cuadrado arriba y girar en sentido horario" 5 veces.
Toma dos enteros separados por comas a través de STDIN.
fuente
Python 2, 421 bytes
Ugh, estoy seguro de que se puede jugar más al golf.
Caso de prueba:
fuente
Rubí, 286 bytes
Puede ser golfable, pero lo intentará en otro momento.
Explicación:
fuente
(0..5).to_a
con[*0..5]