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).
Odpowiedzi:
CJam, 61 bajtów
Pobiera dwie liczby całkowite oddzielone spacją przez STDIN i używa odpowiednio
3.14
zamiastWRGB
. Wypróbuj online .Oto „rozsądna”
RGBW
wersja kilku dodatkowych bajtów:Wyjaśnienie
Algorytm jest taki sam jak moja odpowiedź w języku Python - próbkowanie odrzucenia przez generowanie zegarów, dopóki nie otrzymamy poprawnego.
źródło
Python 2,
194182 bajtówAlgorytm po prostu odrzuca próbkowanie, więc generuje zegary, dopóki nie uzyska właściwego. Zegar buduje się, zaczynając od zera, a następnie wykonując polecenie „dodaj kwadrat powyżej i obróć zgodnie z ruchem wskazówek zegara” 5 razy.
Pobiera dwie liczby całkowite oddzielone przecinkami przez STDIN.
źródło
Python 2, 421 bajtów
Ugh, jestem pewien, że można więcej grać w golfa.
Przypadek testowy:
źródło
Rubinowy, 286 bajtów
Może być golfa, ale spróbuje kiedyś.
Wyjaśnienie:
źródło
(0..5).to_a
przez[*0..5]