Naprawdę lubię czasy, które podążają za pewnymi wzorami. W szczególności lubię czasy, w których wszystkie cyfry są takie same lub gdy wszystkie cyfry zwiększają się arytmetycznie o jeden od lewej do prawej. Co więcej, nienawidzę z pasją, kiedy ludzie wkładają listy w moje czasy, więc wszystkie te bzdury AM / PM są dla mnie martwe. Tak więc moje ulubione czasy to:
0000 0123 1111 1234 2222 2345
Dla spokoju ducha potrzebuję, żebyś napisał mi pojedynczy program, który biorąc pod uwagę aktualny czas jako dane wejściowe, oba: (A) jeśli nie jest to teraz jeden z moich ulubionych czasów, mówi mi oba (i) ile minut to jest był od mojego ostatniego ulubionego czasu, a także (ii) ile minut od teraz nastąpi mój następny ulubiony czas; i (B) jeśli jest to teraz jeden z moich ulubionych czasów, dostarcza pojedynczą „wartość sygnału”.
Wejście
Twój program powinien zaakceptować (dowolną metodą: argument funkcji, argument stdin
wiersza poleceń itp.) Bieżący czas, w dowolnym z następujących formatów:
Czterocyfrowy czas jako ciąg
Liczba całkowita, która może być zerowana po lewej stronie, aby utworzyć czterocyfrowy czas jako ciąg
Sekwencja czterech (lub mniej) liczb całkowitych, uporządkowana w taki sposób, że pierwsza liczba całkowita w sekwencji jest lewą (znaczącą) cyfrą na wejściu czasu (np.
0951
Może być poprawnie reprezentowana jako[0, 9, 5, 1]
lub[9, 5, 1]
)0000
Dopuszczalna jest reprezentacja jako sekwencja zerowej długości
W przypadku łańcucha wejściowego powinien on zawierać tylko cyfry, bez dwukropków i innych znaków interpunkcyjnych. Można założyć, że dane wejściowe będą zawsze ważne 24-godzinne:, HHMM
gdzie 0 <= HH <= 23
i 0 <= MM <= 59
. Pomiń możliwość skoku sekund.
Wynik
Twój program musi podać (wszystkie funkcje stdout
są w porządku) (A) lub (B) , odpowiednio do tego, czy wartość wejściowa jest czasem docelowym.
Dla):
Podaj dwie wartości liczbowe w dowolnym rozsądnym formacie, takie jak:
Wyjście jednołańcuchowe z odpowiednim ogranicznikiem
Sekwencyjne wyjścia liczb całkowitych / ciągów, np.
bash
Drukowanie dwóch linii dostdout
:49 34
Dwie zwrócone wartości długości, takie jak lista Python, tablica C itp .:
[49, 34]
Wartości mogą występować w dowolnej kolejności. Na przykład oba poniższe parametry byłyby poprawnymi danymi wyjściowymi dla danych wejściowych 1200
:
49 34
34 49
Jednak kolejność i separator muszą być takie same dla wszystkich wartości wejściowych!
Dla (B):
Wywołaj jakikolwiek inny nieosiągalny wynik. Ten sam wynik należy jednak uzyskać dla wszystkich sześciu czasów docelowych. Nieskończone pętle są wykluczone.
Przykładowe wejścia / wyjścia
YAY!!!
jest tu wykorzystywany jako przykład demonstracyjny i nie ma charakteru nakazowego.
Input Output
------ --------
0000 YAY!!!
0020 20 63
0105 65 18
0122 82 1
0123 YAY!!!
0124 1 587
0852 449 139
1111 YAY!!!
1113 2 81
1200 49 34
1234 YAY!!!
1357 83 505
1759 325 263
1800 326 262
1801 327 261
2222 YAY!!!
2244 22 61
2345 YAY!!!
2351 6 9
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach. Standardowe luki są niedozwolone.
Odpowiedzi:
Galaretka ,
3433323128 bajtów3 bajty dzięki Mr. Xcoder
.ị
i sztuczkom³
.Wypróbuj online!
Niektóre części są dokładnie takie same jak w odpowiedzi Jonathana Allana , ale zamieszczam je, ponieważ uważam, że jest wystarczająco różne od niego i niezależnie napisane na podstawie mojej odpowiedzi w Pythonie (i krócej: D). Powinien również mieć miejsce na ulepszenia.
Dane wejściowe są liczbami całkowitymi, dane wyjściowe są tablicami poprzednich i następnych czasów lub pustą tablicą na specjalne okazje.
Wyjaśnienie
Za pomocą przykładowego wejścia
1200
.d³
przekształca czas podstawy 100, w godzinach i minutach:[12,0]
.ḅ60
Konwersja z bazy 60 minut, aby uzyskać całkowite:720
.;15
pary z IT 15:[720, 15]
.83,588
tworzy tablicę[83, 588]
.ṁ5
sprawia, że długość 5:[83, 588, 83, 588, 83]
.¤
łączy dwie powyższe czynności. Po prostu technika.j
łączy się parę z tablicy:[720, 83, 588, 83, 588, 83, 15]
._\
odejmowanie od każdej wartości macierzy pierwszego i pobiera wyniki pośrednie:[720, 637, 49, -34, -622, -705, -720]
.ṠÞ
stabilnie sortuje je przez signum:[-34, -622, -705, -720, 720, 637, 49]
.A
przyjmuje wartości absolutnych[34, 622, 705, 720, 720, 637, 49]
.µ
rozpoczyna nowy łańcuch monadyczny. Znów techniczność..ị
zajmuje ostatnie i pierwsze elementy:[49, 34]
.×Ạ
powtarza, że raz, jeśli nie ma zera lub zerowe czasy inaczej:[49, 34]
.źródło
,
na,;
ponieważ był pobierany jako literał listy).³
zamiast100
jest dozwolone )YAY!!!
Wartość jest[0, 0]
zawsze taka sama.xẠ
jako filtr zerowej odkąd rodzaju wolą[]
nad[0, 0]
ponieważ jest to bardziej wyraźnie różne.JavaScript (ES6),
8783 bajtówZaoszczędzono 4 bajty dzięki @ l4m2
Pobiera dane wejściowe jako ciąg. Zwraca albo
0
tablicę 2-elementową.Przypadki testowe
Pokaż fragment kodu
W jaki sposób?
Nie obchodzi nas wynik
.every()
pętli. Pod warunkiem, że dane wejściowe są prawidłowe, zawsze będzie to fałsz. Co tak naprawdę zainteresowany jest kiedy mamy wyjść z tej pętli.Wychodzimy, gdy tylko znajdziemy ulubiony czas
i
(wyrażony w minutach), który jest większy lub równy czasowi odniesieniak
(czas wejściowyt
przeliczony na minuty). Następnie zwracamy0
ifi == k
lub 2 inaczej.źródło
t%100+(t/25>>2)*60
=>t-(t/100|0)*40
Befunge-93,
8885868074 bajtówWypróbuj online!
Zwraca liczbę minut od ostatniego ulubionego czasu, a następnie liczbę minut do następnego ulubionego czasu (oddzielone dwiema sekwencjami znaków: spacją, łącznikiem). Jeśli jest to już ulubiony czas, zwracane jest pojedyncze zero.
źródło
C, 121 bajtów
Wysyła nowy wiersz, jeśli czas jest ulubionym czasem.
Wypróbuj online!
źródło
Czysty , 126 bajtów
Definiuje funkcję
?
, przyjmowanieInt
i powrót(Int, Int)
.Kiedy argument jest ulubionym czasem, powoduje zawieszenie programu wywołującego
hd of []
.Wypróbuj online!
źródło
Pyth,
484542 bajtówWypróbuj online. Zestaw testowy.
Kod pobiera ciąg czasu i wyświetla poprzednie i następne czasy jako tablicę lub
0
jeśli czas jest wyjątkowy.Co ciekawe, imperatywne podejście ma również 42 bajty:
Wyjaśnienie
cz2
dzieli input (z
) na dwuznakowe elementy.sM
ocenia je jako liczby całkowite.i
…60
Analizuje wynikową tablicę dwuelementową jako bazę 60.,83 588
reprezentuje tablicę[83, 588]
.*3
trzykrotnie to[83, 588, 83, 588, 83, 588]
.P
usuwa ostatni588
.+
…15
Dodaje15
do końca..u-NY
zaczyna się od przeanalizowanej liczby, odejmuje od niej każdą liczbę w tablicy i zwraca wartości pośrednie. Są to różnice z każdego specjalnego czasu.J
przypisuje te różnice doJ
.*F
oblicza iloczyn różnic. Będzie to 0, jeśli czas był wyjątkowy.&
zatrzymuje tutaj ocenę i zwraca 0, jeśli czas był wyjątkowy.._DJ
stable-sortuje różnice według znaku.K
zapisuje tę tablicęK
.e
pobiera ostatni element w tablicy._hK
bierze pierwszy element z tablicy i neguje go.,
zwraca dwa jako tablicę.źródło
cz2 60
nac2z60
(są one równoważne z listami 4-elementowymi)Galaretka ,
33 3234 bajtów+3+2 bajty do naprawy, aby wszystkie lubiane dane wyjściowe czasu były równe.musi być krótsza droga!
Monadyczny link, który pobiera listę czterech cyfr i zwraca listę zawierającą dwie liczby całkowite
- jeśli jest to lubiany czas, wynik obu wpisów będzie zerowy.
Wypróbuj online! lub zobacz zestaw testowy .
W jaki sposób?
źródło
Łuska , 36 bajtów
Wypróbuj online!
Dzięki Zgarbowi za wyjaśnienie mi, jak trójskładniki działają na czacie. Próbowałem grać w golfa
↑0
, ale z jakiegoś powodu nie udało mi się go uruchomić (?). To moja pierwsza nietrywialna odpowiedź na Łuskę i pomijając wyżej wspomniane, jestem z niej całkiem zadowolony. Wartość użyta zamiastYAY!!!
to[]
(ale mam nadzieję, że zmieni się do celów golfowych).Wyjaśnienie
źródło
Kotlin , 293 bajty
Upiększony
Test
TIO
TryItOnline
źródło