Qualcuno ha costruito un orologio davvero elegante usando i numeri di Fibonacci, che sembra davvero bello ma è piuttosto inutilizzabile. Proprio come piace a noi! Ricreamolo.
L'orologio è composto da 5 sezioni corrispondenti ai primi cinque numeri di Fibonacci, a partire da 1 (ovvero 1, 1, 2, 3, 5):
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
L'orologio è in grado di visualizzare l'ora di 12 ore con incrementi di 5 minuti. Ecco come funziona. Considera il tempo 7:20. L'ora 7 può essere scomposta nei numeri di Fibonacci indicati come
7 = 2 + 5
Ci sono anche 4 unità di cinque minuti. I 4 possono essere decomposti come
4 = 2 + 1 + 1
Ora le ore sono visualizzate in rosso, i blocchi di minuti in verde e se un numero viene utilizzato sia per le ore che per i minuti, viene mostrato in blu. Se un numero non viene utilizzato affatto, rimane bianco. Quindi quanto sopra sarebbe mostrato come:
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
Ma aspetta, c'è di più. Le suddette decomposizioni non sono le uniche possibilità. Si può anche scrivere 7 = 3 + 2 + 1 + 1
e 4 = 3 + 1
, il che darebbe uno dei
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
a seconda di quale 1
viene scelto. Naturalmente ci sono anche altre combinazioni. L'orologio sceglie casualmente tutte le decomposizioni valide.
Come ho detto ... questo potrebbe non vincere un premio di usabilità, ma è sicuramente bello da vedere.
La sfida
Il tuo compito è implementare un tale orologio. Il programma (o la funzione) dovrebbe stampare una rappresentazione ASCII dell'ora corrente (arrotondata per difetto all'ultimo multiplo di 5 minuti) come descritto sopra su STDOUT o sull'alternativa più vicina. È possibile scegliere di leggere l'ora in qualsiasi formato comune come input o ottenerla con le funzioni di libreria standard. Non si deve presumere che il tempo corrente / dato sia divisibile per 5 minuti.
La tua soluzione deve scegliere casualmente tra tutte le possibili rappresentazioni dell'ora corrente. Cioè ogni rappresentazione deve essere stampata con probabilità diversa da zero.
Mezzanotte e mezzogiorno dovrebbero essere trattati come 0:00
(al contrario di 12:00
).
Se lo si desidera, è possibile stampare un singolo carattere di nuova riga finale.
È possibile utilizzare quattro caratteri ASCII stampabili distinti (codici di caratteri da 0x20 a 0xFE) al posto di RGBW
. Indica la tua scelta nella risposta e usala in modo coerente.
Questo è il golf del codice, quindi vince la risposta più breve (in byte).