Ktoś zbudował naprawdę fantazyjny zegar przy użyciu liczb Fibonacciego, który wygląda naprawdę ładnie, ale jest dość bezużyteczny. Tak jak lubimy! Odtwórzmy to ponownie.
Zegar składa się z 5 części odpowiadających pierwszym pięciu liczbom Fibonacciego, zaczynając od 1 (tj. 1, 1, 2, 3, 5):
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
Zegar może wyświetlać 12-godzinny czas w odstępach co 5 minut. Oto jak to działa. Rozważ czas 7:20. Godzinę 7 można rozłożyć na podane liczby Fibonacciego jako
7 = 2 + 5
Istnieją również 4 jednostki po pięć minut. 4 można rozłożyć jako
4 = 2 + 1 + 1
Teraz godziny są wyświetlane na czerwono, minuty są na zielono, a jeśli liczba jest używana zarówno dla godzin, jak i minut, jest wyświetlana na niebiesko. Jeśli liczba nie jest w ogóle używana, pozostaje biała. Powyższe byłoby pokazane jako:
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
Ale czekaj, jest więcej. Powyższe dekompozycje nie są jedynymi możliwościami. Można także pisać 7 = 3 + 2 + 1 + 1
i 4 = 3 + 1
, co dałoby jeden z
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
w zależności od tego, który 1
zostanie wybrany. Oczywiście są też inne kombinacje. Zegar wybiera losowo ze wszystkich prawidłowych rozkładów.
Jak powiedziałem ... to może nie wygrać nagrody za użyteczność, ale na pewno miło jest na to spojrzeć.
Wyzwanie
Twoim zadaniem jest wdrożenie takiego zegara. Twój program (lub funkcja) powinien wydrukować reprezentację ASCII bieżącego czasu (zaokrągloną w dół do ostatniej wielokrotności 5 minut), jak opisano powyżej, do STDOUT lub najbliższej alternatywy. Możesz wybrać odczyt czasu w dowolnym popularnym formacie jako dane wejściowe lub uzyskać go za pomocą standardowych funkcji bibliotecznych. Nie można zakładać, że bieżący / podany czas dzieli się przez 5 minut.
Twoje rozwiązanie musi wybierać losowo spośród wszystkich możliwych reprezentacji bieżącego czasu. Oznacza to, że każda reprezentacja musi być drukowana z niezerowym prawdopodobieństwem.
Północ i południe należy traktować jako 0:00
(w przeciwieństwie do 12:00
).
Opcjonalnie możesz wydrukować pojedynczy znak nowej linii.
Możesz użyć dowolnych czterech różnych drukowalnych znaków ASCII (kody znaków od 0x20 do 0xFE) zamiast RGBW
. Podaj swój wybór w odpowiedzi i używaj go konsekwentnie.
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).