Mogę mieć duży if/else
warunek na każde 30 minut, ale szukam więcej rozwiązań opartych na matematyce i Unicode.
Oto emoji zegara: 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟🕠🕡🕢🕣🕤🕥🕦🕧. Jeśli brakuje odpowiedniego wsparcia renderowania, możesz zobaczyć je poniżej (nie są w tej samej kolejności i mogą wyglądać inaczej niż to, co widzisz) lub na wykresie Unicode , strona 4. Odpowiadają punktom kodowym U + 1F550 (ZEGAR FACE ONE OCLOCK) do U + 1F567 (CLOCK FACE TWELVE-THIRTY).
Wyzwanie polega na napisaniu programu, który wyśle do STDOUT najbliższy emoji tarczy zegara do bieżącego czasu systemowego (AM i PM należy traktować tak samo). Na przykład, jeśli czas t
to [5:15 <t <5:45), wyświetlisz emoji 5:30 🕠.
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach. Możesz podać sposób łatwego określenia czasu na przetestowanie kodu.
Przypadki testowe Edge
Time Output Written
----------------------
11:48 🕛 12:00
3:15 🕞 3:30
9:45 🕙 10:00
Odpowiedzi:
Rubinowy -
6154 bajtówPython 3 - 79 77 75 74 bajtówedycja: Okazuje się, że jest to znacznie krótsze w Rubim, ponieważ
Time
nie trzeba go importować, a domyślny jest podział na liczby całkowite.Arytmetyka:
Time.now.to_i
: Sekundy od epoki./900
: Połącz czas w 15-minutowe segmenty.-3
:-4
ponieważ postacie zaczynają się o godzinie pierwszej,+1
więc zaokrąglanie odbywa się do najbliższej pół godziny, a nie w dół./2
: Połącz w półgodzinne segmenty.%24
: Uzyskaj bieżący segment półgodzinny z 12 godzin.a/2 + a%2*12
: Uwzględnij fakt, że znaki całogodzinne pojawiają się w bloku przed znakami półgodzinnymi.Wersja czasu lokalnego, 69 bajtów:
Oryginalna wersja Python 3:
Drukuje aktualny czas UTC. Python 2
chr
akceptuje tylko 0-255 iunichr
tylko 0-65535. W Pythonie 3/
zawsze jest dzieleniem zmiennoprzecinkowym i//
zawsze jest dzieleniem całkowitym.źródło
12*(a%2)
jeśli robisz to w drugiej kolejności:a%2*12
.Bash + Coreutils, 60 bajtów
Emoji są dobrze renderowane na terminalu OSX, ale w przypadku Linuksa (Ubuntu 14.04) musisz to zrobić
sudo apt-get install ttf-ancient-fonts
Aby przetestować różne czasy, wstaw
-d $time
do polecenia date. np. do testowania 12:59:źródło
JavaScript -
13711710710295To będzie łatwe do pokonania, ale postaram się tutaj jak najlepiej.
EDYCJA 1 : Teraz drukuje w UTC jak odpowiedź Pythona, aby zaoszczędzić 20 bajtów.
EDIT 2: Zmieniono
new Date().getTime()
abyDate.now()
zapisać 10 bajtów.EDIT 3: Zmieniono
Math.round(x)
aby~~(x+.5)
zaoszczędzić 5 bajtów.EDYCJA 4: Usunąłem niepotrzebne
(
i&1023)
pozostawiłem ze starej wersji programistycznej, w której zrobiłem bardziej uniwersalne kodowanie UTF-16, aby zaoszczędzić 7 bajtów.JavaScript nie pozwalają na emotikony, ale w UTF-16, który koduje je jako dwa znaki. Na szczęście możemy po prostu zdefiniować je jako dwie postacie; pierwszy znak jest również stały (
0xD83D
), podczas gdy inne się zmieniają.Alternatywnie, wydruki w czasie lokalnym,
137132125:Pokaż fragment kodu
źródło
(d%2?23+d:d)
to samo cod+d%2*23
?CJam, 50 bajtów
Algorytm jest prosty, zaokrąglij czas do najbliższych 30 minut, policz, ile minęło 30 minut od godziny 12 AM / PM, jeśli liczba jest nieparzysta, następnie dodaj do niej 24, podziel podłogę przez 2 i zwiększ początkową Unicode o tyle punkty kodowe, aby uzyskać odpowiednią tarczę zegara.
Upewnij się także, że zaczynasz od 1 AM / PM zamiast 12, więc weź tam przesunięcie.
Do celów testowych użyj następującego kodu:
Gdzie
3:H;
część jest bieżącą godziną, a45:M;
część jest bieżącą minutą godziny. Wystarczy wymienić3
i45
żądaną wartość.Wypróbuj online tutaj
Nie wszystkie znaki Unicode mogą drukować poprawnie w wersji online, w zależności od przeglądarki i systemu operacyjnego oraz zainstalowanych czcionek. Ale dla mnie wszystko drukuje się dobrze w przeglądarce Firefox z systemem Windows 7.
źródło
CJam, 31 bajtów
Możesz zmienić czas w następującym programie, aby go przetestować:
źródło