Jemand hat eine wirklich schicke Uhr mit Fibonacci-Zahlen gebaut, die sehr schön aussieht, aber ziemlich unbrauchbar ist. So wie es uns gefällt! Lassen Sie uns das nachbauen.
Die Uhr besteht aus 5 Abschnitten, die den ersten fünf Fibonacci-Zahlen entsprechen, beginnend mit 1 (dh 1, 1, 2, 3, 5):
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
Die Uhr kann die 12-Stunden-Zeit in Schritten von 5 Minuten anzeigen. So funktioniert das Betrachten Sie die Zeit 7:20. Die Stunde 7 kann in die angegebenen Fibonacci-Zahlen als zerlegt werden
7 = 2 + 5
Es gibt auch 4 Einheiten von fünf Minuten. Die 4 kann als zerlegt werden
4 = 2 + 1 + 1
Jetzt werden die Stunden in Rot angezeigt, die Minutenblöcke in Grün, und wenn eine Zahl für Stunden und Minuten verwendet wird, wird sie in Blau angezeigt. Wenn eine Nummer überhaupt nicht verwendet wird, bleibt sie weiß. Das obige würde also so aussehen:
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
Aber warte, es gibt noch mehr. Die obigen Zerlegungen sind nicht die einzigen Möglichkeiten. Man kann auch schreiben 7 = 3 + 2 + 1 + 1
und 4 = 3 + 1
, was man davon geben würde
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
je nachdem was 1
gewählt wird. Natürlich gibt es auch andere Kombinationen. Die Uhr wählt aus allen gültigen Zerlegungen zufällig aus.
Wie ich schon sagte ... das wird vielleicht keinen Usability Award gewinnen, aber es ist auf jeden Fall schön anzusehen.
Die Herausforderung
Ihre Aufgabe ist es, eine solche Uhr zu implementieren. Ihr Programm (oder Ihre Funktion) sollte eine ASCII-Darstellung der aktuellen Zeit (abgerundet auf das letzte Vielfache von 5 Minuten) wie oben beschrieben auf STDOUT oder die nächstgelegene Alternative ausgeben. Sie können die Zeit in jedem gängigen Format als Eingabe lesen oder mit Standardfunktionen der Bibliothek abrufen. Sie dürfen nicht davon ausgehen, dass die aktuelle / angegebene Zeit durch 5 Minuten teilbar ist.
Ihre Lösung muss zufällig aus allen möglichen Darstellungen der aktuellen Zeit auswählen. Das heißt, jede Darstellung muss mit einer Wahrscheinlichkeit ungleich Null gedruckt werden.
Mitternacht und Mittag sollten als behandelt werden 0:00
(im Gegensatz zu 12:00
) behandelt werden.
Optional können Sie ein einzelnes Zeilenumbruchzeichen drucken.
Sie können anstelle von vier verschiedenen druckbaren ASCII-Zeichen (Zeichencodes 0x20 bis 0xFE) verwenden RGBW
. Bitte geben Sie in Ihrer Antwort Ihre Wahl an und verwenden Sie diese konsequent.
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).