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.
Réponses:
CJam, 61 octets
Prend deux entiers séparés par des espaces via STDIN et utilise
3.14
au lieu deWRGB
respectivement. Essayez-le en ligne .Voici le "sain d'esprit"
RGBW
version pour quelques octets supplémentaires:Explication
L'algorithme est le même que ma réponse Python - échantillonnage de rejet en générant des horloges jusqu'à ce que nous obtenions celle qui est correcte.
la source
Python 2,
194182 octetsL'algorithme est juste un échantillonnage de rejet, il continue donc de générer des horloges jusqu'à ce qu'il en obtienne une qui soit correcte. L'horloge est construite en commençant par rien, puis en faisant "ajouter un carré au-dessus et tourner dans le sens des aiguilles d'une montre" 5 fois.
Prend deux entiers séparés par des virgules via STDIN.
la source
Python 2, 421 octets
Ugh, je suis sûr que cela peut être joué plus.
Cas de test:
la source
Rubis, 286 octets
Il peut être jouable au golf, mais essayera une autre fois.
Explication:
la source
(0..5).to_a
par[*0..5]