Odkąd widziałem ten pierwszy kilka lat temu, zawsze byłem podporządkowany tego rodzaju zegarowi słownemu, w którym czas jest tak naprawdę wyrażony przez rozjaśnienie słów, czy nie w sensowne zdanie.
Tekst wyświetlany na tym zegarze jest następujący.
IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK
Twoim zadaniem jest napisanie takiego działającego zegara. Słowa są podświetlane tylko wtedy, gdy dotyczą drukowania bieżącego czasu. W przeciwnym razie są zapalone. Słowa są „podświetlane” przez wydrukowanie i są „podświetlane” przez zastąpienie ich spacjami o długości słowa.
Przykład: jeśli aktualny czas to 17:23, wydrukowany tekst musi wyglądać dokładnie tak:
IT IS
TWENTY
FIVE MINUTES
PAST
FIVE
Zasady
- Drukowany czas to wariant 12h, ale bez AM / PM.
- Zaokrąglanie odbywa się tylko na podstawie minut (sekundy nie mają żadnego znaczenia). Zaokrąglanie jest wykonywane do najbliższej wielokrotności 5. Więc, na przykład, chociaż 17:52:38 naprawdę jest najbliżej 17:55, ale ponieważ sekundy nie mają znaczenia, 17:52 jest w rzeczywistości zaokrąglane w dół do 17:50, a wydrukowany tekst to „TO DZIESIĘĆ MINUT DO SZEŚCIU” (z odpowiednim odstępem). Więc jeśli
XX
jest wielokrotnością pięciu,XX
będą używane od GG: (XX-2): 00 do GG: (XX + 2): 59. SłowoMINUTES
musi się pojawić, jeśliFIVE
,TEN
lubTWENTY
są oświetlone w sekcji minut (przed „do” lub „Past”). - Wszystkie nieistotne słowa są zastępowane tyloma spacjami, ile potrzeba, aby tekst był umieszczony w powyższym szablonie. Końcowe spacje mogą zostać przycięte. Należy zachować spacje istotne dla utrzymania tekstu na oczekiwanej pozycji.
Linie końcowe mogą być również przycięte. Odpowiednie puste wiersze są nadal wymagane. Przykład:
IT IS TEN MINUTES PAST TWO
Nie zapalaj się
TEN
w pierwszym wierszu lubFIVE
w trzecim wierszu, gdy te wartości odnoszą się do godzin.- Możesz zaakceptować dane wejściowe. Jeśli zaakceptujesz dane wejściowe, będzie to czas wydruku w dowolnym poprawnym formacie (ciąg, lista liczb całkowitych, czas natywny wpisz obsługę języka, ...), ale żadne parametry nie są dozwolone, jeśli nie są powiązane do czasu wydrukowania. Jeśli nie obsługuje danych wejściowych, musisz użyć bieżącej godziny. Jeśli popierasz oba, to lepiej, ale nie ma bonusu;)
- Twój kod może być programem, funkcją, lambda, ale nie fragmentem kodu.
- Jeśli twój język w jakikolwiek sposób obsługuje drukowanie, musi wydrukować wynik (nie mam nic przeciwko w pliku, na standardowym wyjściu). Jeśli twój język w żaden sposób nie obsługuje drukowania, możesz po prostu „zwrócić” oczekiwany tekst. Wynikiem może być cała wielka lub mała litera, a nie połączenie obu.
- Obowiązują standardowe luki.
- To jest golf golfowy, więc wygrywa najkrótszy kod!
- W miarę możliwości proszę podać link do tłumacza online w Twoim języku.
Przypadki testowe
Input: <no input> (the current local time is 19:20)
Output:
IT IS
TWENTY
MINUTES
PAST
SEVEN
Input: 13:15
Output: (empty line is being printed)
IT IS
QUARTER
PAST
ONE
Input: 13:58
Output: (rounding)
IT IS
TWO
O'CLOCK
Input: 14:30
Output: (half is always a edge-case)
IT IS HALF
PAST TWO
Input: 15:35
Output: (light up "TO")
IT IS
TWENTY
FIVE MINUTES TO
FOUR
Input: 10:00
Output: (do not use the TEN or FIVE on the first line when referring to the hours)
IT IS
TEN
O'CLOCK
Input: 12:00
Output: (O'CLOCK and a lot of empty lines)
IT IS
TWELVE O'CLOCK
Odpowiedzi:
PHP,
387384353352342323310306298293291 bajtówDzięki @Christoph za grę w golfa wraz z jego doskonałymi odkryciami!
Na jego koncie jest co najmniej 45 bajtów; 16 lub więcej inspirowanych przez niego.
Zespół Marvela!
zapętla dane i sprawdza, czy bieżący indeks znajduje się w wygenerowanym ciągu, który zawiera indeksy słów do podświetlenia (mapowane na litery); dodaje podział wiersza lub spację w zależności od indeksu.
Może dawać powiadomienia, jeśli nie użyjesz wartości domyślnej dla
error_reporting
(22519).Przetestuj online.
awaria
Golfy :
$x/5+.5|0
jest dwa bajty krótszy niżround($x/5)
.date(h)
są o jeden bajt krótsze niż przypisaniedate
wyniku do zmiennej.$w<A
jest trzy bajty krótszy niż$w=="\n"
- upewnij się, że po separatorze nie ma spacji!abs
zapisano 8 bajtów na słowie minut.Użycie podkreślenia jako pierwszego indeksu pozwoliło na włączenie go do alternatyw „to jest”; i spowodowało, że cytat za godziny stał się nieaktualny.
1
wartości na mapie godzin sprawiło, że modulo stało się przestarzałe, a przy dodatkowym golfie zaoszczędzono 10 bajtów. Zainspirowany @Christoph.str_pad("",strlen($w))
->$w^$w^" "
. (Christoph)strtr
drugim parametrem nie jest ciąg znaków, zostanie on zinterpretowany jako kod ascii. oszczędza 5 bajtów.źródło
$i++%3^($i<3)
do$i++%3^$i<3
. Jestem teraz oficjalnie całkowicie zmarnowany. Zrobię sobie przerwę, aż ktoś nas dopasuje. Było naprawdę zabawnie. Dziękuję Tytusowi za pracę zespołową!TI-Basic,
335334 bajtyPrawie idealnie, ponieważ cielęta TI-84 mają wyświetlacze 8 x 16 liter, a to jest 8 x 15. Jako dane wejściowe przyjmuje się datę w celu obsługi cieląt wcześniejszych niż TI-84, które nie mają wewnętrznych zegarów. Bez argumentów
Input
domyślnie pobiera dane wejściowe doX
iY
, podobnie jakPrompt X,Y
. WięcX
bądź godzinami (wszystko>=0
będzie działać poprawnie) i miećY
minuty.Uwaga 1: W przypadku TI-84 + można zastąpić
Input
czegoś podobnegogetTime:Ans(1->X:getTime:Ans(2->Y
. Równieżint(Y/5-5.6
jest równoważne zround(Y/5,0)-6
. I nie, w tym przypadkuint(
nie można było zamienić z nimiPart(
.Uwaga 2: To wypisuje dobrze wejście, ale z powodów estetycznych prawdopodobnie
Pause
na końcu programu chcesz uniknąćDone
komunikatu po zakończeniu programu.Edycja: Zmniejszono liczbę bajtów, ponieważ tokenizowano (patrz uwaga na poprzedniej wersji), a także błąd został naprawiony dzięki @Neil. Po trzecie, naprawiłem błąd, który sam znalazłem, który kosztowałby 2 bajty, ale optymalizacja faktycznie zaoszczędziła 1 bajt ogółem, a także zdałem sobie sprawę, że otrzymuję dane wejściowe, więc nie muszę dzwonić
getTime
(duh?). Na koniec, dla każdego, kto chce potwierdzić tę liczbę bajtów, jedyny dwubajtowy token tosub(
.źródło
O'CLOCK
kod również przejdzie do wypisywaniaPAST
...x+(y>32) mod 12
jakby porównanie dało 1 lub 0, jak w TI-Basic.JavaScript (ES6),
291303295 bajtówPobiera dane wejściowe jako dwie liczby całkowite ze składnią curry
(h)(m)
Jak to działa
Cały zegar można postrzegać jako 23 diody LED, które są WŁĄCZONE lub WYŁĄCZONE. Tak więc stan zegara to 23-bitowa liczba całkowita.
Minut logika, że musimy wdrożyć, aby umożliwić właściwe słowa nie jest tak proste, jak mogłoby się wydawać na pierwszy rzut oka. Formuła do gry w golfa może istnieć, ale poszedłem w prosty sposób i postanowiłem po prostu na stałe zakodować każdą możliwą konfigurację:
Przypadki testowe
Pokaż fragment kodu
źródło
Partia, 789 bajtów
Uwaga: Końcowe spacje za
PAST
i 5 końcowych spacji w każdym z następujących dwóch wierszy.źródło
call:c
na przykład)! Powinienem chyba się trochę nauczyć :)JavaScript,
567 564 551 542 529 527519 bajtówPokaż fragment kodu
Nie wiem, czy można godzić się na godziny i minuty jako argumenty. Powiedziałeś „lista liczb całkowitych”. Czy to wciąż się liczy?
Nawiasem mówiąc, to mój pierwszy raz w golfa. Co myślisz?
Edycja: Zapisano kilka bajtów, dzieląc minuty. Dzięki, Olivier!
źródło
c
do swojej funkcji. Myślę, że nie powinieneś tracić bajtu, ale to sprawia, że jest to bardziej fragment kodu niż funkcja (przynajmniej dla mnie, być może, guru JS powie inaczej).JavaScript (ES6) 360
Funkcja z parametrami wejściowymi godzina (0..23) i minuta (0..59).
Używanie
alert
wyjścia, ponieważ jest to standardowa funkcja wyjścia w javascript, nawet jeśli jest to niewygodne. (I jest krótki)Uwaga testowa : dla spokoju ducha fragment testowy jest przekierowywany do tekstu strony
źródło
i
? Widzę, że otrzymujesz wszystkie grupy niebiałe („diody LED”) i zastępujesz je białymi spacjami w oparciu o warunki, które napisałeś dla każdej z nich. Na przykładh-2
jest to fałsz tylko wtedyh == 2
, gdy zakładam, że gdzieś to odwróciłeś? Czy możesz wyjaśnić trochę, jak to działa? Być może jako edycja twojej odpowiedzi? Byłbym naprawdę wdzięczny!i
odniesienia do właściwego, zwiększając go po każdym dopasowaniu wyrażenia regularnego. Jeśli to prawda, zastępujesz pasujący ciąg pustymi spacjami, w przeciwnym razie pozostawisz go takim, jakim jest. Nie rozumiem jednak jednej rzeczy.replace()
używa wartości zwracanej określonej funkcji (w tym przypadku funkcja strzałki). Gdzie zwracasz wartość? Właśnie widzę trójskładnikowego operatora.(a,b)=>{ return a+b }
jest taki sam jak(a,b)=>a+b
Python 2,
466,460,449,452,459449 bajtówPonieważ może to być funkcja przyjmująca hi jako liczby całkowite, możemy zapisać kilka bajtów. Wypróbuj online .
Miałem parę błędów (obecnie stały) z logiką do
TO
/PAST
vsO'CLOCK
. Zapisałem również kilka bajtów dlaenumerate
, zmieniającimport
i19<m<26
zamiastm in [20,25]
. Zaoszczędziłem kolejne 8 za pracę w 5-minutowych kawałkach, a nie minutach. Rod zwrócił uwagę na kilka błędów, które mnie trochę kosztują, ale odrobiłem trochę więcej, dzięki wydajniejszym zadaniom i poprawce błędów, która działała na moją korzyść.źródło
==
i myślę, że mogę poprawić niektóreh
testyprint c
w ostatnim wierszu,c
posiada juża[i]
powoduenumerate
print
dodaj nowy wiersz po każdym wydruku, możesz go pominąć, dodając,
po nimc
. Powinien także wypisywać puste miejsca, gdy słowo nie jest drukowane, można to naprawić za pomocą innego w ostatnim, jeślielse:print' '*len(c),
Perl 6 ,
308296293 bajtówWypróbuj online!
Wyjaśnienie
Podstawowa struktura jest następująca:
Wyrażenie elided jak
...|...|...|...
powyżej, jest połączeniem liczb całkowitych reprezentujących indeksy słów oparte na 1, i składa się z następujących elementów:źródło
Python3, (569 bajtów)
Ta odpowiedź wymaga czasu w formacie gg mm (liczby całkowite oddzielone spacją). Udało mi się wydrukować „\ n”, co jest inspirowane metodą Chrisa. Dzięki, Chris! Doceniamy wszelką pomoc dotyczącą ograniczenia kodu.
Wypróbuj online
źródło
.split(',')
? Powinny zaoszczędzić kilka.H,M=input()
tam, gdzie jest to H, M. Zgodnie z regułami dozwolona jest sekwencja dwóch liczb całkowitych. Nie jestem pewien, czy to działa zgodnie z przeznaczeniem w Pythonie 3. Nadal jestem facetem 2 :-)H,M=input()
nie działało, jak wątpiłeś.Python 2 ,
443440 bajtówWypróbuj online!
Prawdopodobnie przydałoby się jeszcze trochę golfa. Dane wejściowe to lista liczb całkowitych, np. 7,23 = 7:23
źródło
SimpleTemplate ,
737708 bajtówTak, gadatliwość i brak „prawdziwej” matematyki poważnie zaszkodziły bajtowi.
Oczekuje, że godzina i minuty będą pierwszym i drugim parametrem w klasie.
Nie golfowany:
Jak uruchomić:
Uruchom następujący kod:
Gotowy!
źródło
Java (OpenJDK 9) , 437 bajtów
Wypróbuj online!
Myślałem, że w końcu spróbuję rzucić wyzwanie;)
źródło
Perl 5 ,
487449 bajtówWypróbuj online!
źródło