Quelqu'un a construit une horloge très sophistiquée en utilisant des nombres de Fibonacci, qui a l'air vraiment sympa mais qui est assez inutilisable. Tout comme nous l'aimons! Recréons cela.
L'horloge est composée de 5 sections correspondant aux cinq premiers nombres de Fibonacci, à partir de 1 (soit 1, 1, 2, 3, 5):
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
L'horloge est capable d'afficher l'heure de 12 heures par incréments de 5 minutes. Voici comment cela fonctionne. Considérez le temps 7:20. L'heure 7 peut être décomposée en nombres de Fibonacci donnés comme
7 = 2 + 5
Il y a également 4 unités de cinq minutes. Le 4 peut être décomposé en
4 = 2 + 1 + 1
Maintenant, les heures sont affichées en rouge, les minutes en vert et si un nombre est utilisé pour les heures et les minutes, il est affiché en bleu. Si un numéro n'est pas utilisé du tout, il reste blanc. Donc, ce qui précède serait montré comme:
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
Mais attendez, il y a plus. Les décompositions ci-dessus ne sont pas les seules possibilités. On peut aussi écrire 7 = 3 + 2 + 1 + 1
et 4 = 3 + 1
, ce qui donnerait
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
selon lequel 1
est choisi. Bien sûr, il existe également d'autres combinaisons. L'horloge choisit au hasard parmi toutes les décompositions valides.
Comme je l'ai dit ... cela pourrait ne pas gagner un prix d'utilisation, mais c'est bien agréable à regarder.
Le défi
Votre tâche consiste à implémenter une telle horloge. Votre programme (ou fonction) doit imprimer une représentation ASCII de l'heure actuelle (arrondie au dernier multiple de 5 minutes) comme décrit ci-dessus sur STDOUT ou l'alternative la plus proche. Vous pouvez choisir de lire l'heure dans n'importe quel format commun comme entrée ou de l'obtenir avec les fonctions de bibliothèque standard. Vous ne devez pas supposer que l'heure actuelle / donnée est divisible par 5 minutes.
Votre solution doit choisir au hasard parmi toutes les représentations possibles de l'heure actuelle. Autrement dit, chaque représentation doit être imprimée avec une probabilité non nulle.
Minuit et midi doivent être traités comme 0:00
(par opposition à 12:00
).
Vous pouvez éventuellement imprimer un seul caractère de nouvelle ligne de fin.
Vous pouvez utiliser quatre caractères ASCII imprimables distincts (codes de caractères 0x20 à 0xFE) à la place de RGBW
. Veuillez indiquer votre choix dans votre réponse et l'utiliser de manière cohérente.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.