Pierwotnie opublikowany (i usunięty) przez @Tlink , który najprawdopodobniej został zainspirowany tym pytaniem StackOverflow .
Ponieważ szkoda, że został usunięty, ponieważ ogólnie wydawało się to sporym wyzwaniem, pomyślałem, że opublikuję go z odpowiednim formatowaniem i regułami. (Próbowałem skontaktować się z @Tlink i uzyskać jego zgodę na opublikowanie go, ale on nie odpowiada już, dlatego postanowiłem to teraz opublikować.)
Wprowadzanie: sześć cyfr.
Dane wyjściowe: pierwszy lub ostatni prawidłowy czas w formacie 24-godzinnym ( 00:00:00
do 23:59:59
). (Możesz sam wybrać, czy wyprowadzasz pierwszy, czy ostatni prawidłowy czas.)
Przykład:
Gdy dane wejściowe są 1,8,3,2,6,4
, można utworzyć następujące czasy:
12:36:48 12:38:46 12:46:38 12:48:36
13:26:48 13:28:46 13:46:28 13:48:26
14:26:38 14:28:36 14:36:28 14:38:26
16:23:48 16:24:38 16:28:34 16:28:43
16:32:48 16:34:28 16:38:24 16:38:42
16:42:38 16:43:28 16:48:23 16:48:32
18:23:46 18:24:36 18:26:34 18:26:43
18:32:46 18:34:26 18:36:24 18:36:42
18:42:36 18:43:26 18:46:23 18:46:32
21:36:48 21:38:46 21:46:38 21:48:36
23:16:48 23:48:16
Więc wyprowadzimy jeden 12:36:48
lub 23:48:16
w tym przypadku, odpowiednio jako pierwszy / ostatni.
Zasady konkursu:
- Podaj, czy podajesz w odpowiedzi pierwszy lub ostatni prawidłowy czas.
- I / O jest elastyczny. Wejściem może być sześć oddzielnych liczb całkowitych; ciąg zawierający sześć cyfr; lista / tablica liczb całkowitych; pojedyncza (ewentualnie ósemkowa) liczba; itp. Wyjściem może być poprawnie uporządkowana lista / tablica cyfr; ciąg znaków w formacie
HH:mm:ss
/HHmmss
/HH mm ss
; każda cyfra drukowana z separatorem nowej linii; itp. Twoje połączenie. - Dozwolone jest przyjmowanie cyfr w dowolnej kolejności, dzięki czemu można je już sortować od najniższej do najwyższej lub odwrotnie.
- Jeśli nie można utworzyć prawidłowego czasu z podanymi cyframi (tj.
2,5,5,5,5,5
), Zaznacz to w dowolny sposób. Może zwrócićnull
/false
;"Not possible"
; awaria z błędem; itp. (Nie można podać niepoprawnego czasu, takiego jak55:55:52
lub innego prawidłowego czasu, takiego jak00:00:00
.) Podaj, jak obsługuje dane wejściowe, dla których nie można utworzyć prawidłowego czasu. - Nie możesz podać wszystkich możliwych prawidłowych czasów. Tylko najwcześniejsze / najnowsze powinny być wyprowadzone / zwrócone.
24
godziny (tj.24:00:00
) lub60
minuty / sekundy (tj.00:60:60
) są nieprawidłowe. Zakresy dotyczą[00-23]
godzin oraz[00-59]
minut i sekund.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe:
Input: Earliest output: Latest output:
1,2,3,4,6,8 12:36:48 23:48:16
2,5,5,5,5,5 None possible None possible
0,0,0,1,1,1 00:01:11 11:10:00
1,1,2,2,3,3 11:22:33 23:32:11
9,9,9,9,9,9 None possible None possible
2,3,5,5,9,9 23:59:59 23:59:59
1,2,3,4,5,6 12:34:56 23:56:41
0,0,0,0,0,0 00:00:00 00:00:00
1,5,5,8,8,8 18:58:58 18:58:58
1,5,5,5,8,8 15:58:58 18:58:55
1,1,1,8,8,8 18:18:18 18:18:18
23:48:16
jest poprawne wyjście dla tego przykładu?06:08:60
byłby ważny, biorąc pod uwagę, że w tej minucie nastąpił drugi skok?60
minuty i sekundy są nieprawidłowe. Zakresy są[00-23]
,[00-59]
i[00-59]
. Wyjaśni to w wyzwaniu.Odpowiedzi:
C (gcc) ,
186174 bajtówWypróbuj online!
-12 bajtów dzięki Kevin Cruijssen
Prawdopodobnie nie jest optymalny, ale działa. Dziwne, z jakiegoś powodu, z 7 argumentami, implementacja gcc na TIO wymaga, abyś faktycznie je dostarczył lub segfault. Na moim komputerze jest to jednak niepotrzebne.
Format: G (X, 0,6) -> Y, gdzie X jest liczbą 6-cyfrową, której cyfry mają być użyte, a Y jest liczbą 6 cyfr, która przy uwzględnieniu czasu (poprzez wstawienie: odpowiednio) jest minimalna.
źródło
{0,1,10,100,1000,10000,100000}
w golfa{0,1,10,100,1e3,1e4,1e5}
. Możesz także zagraćfor(I=0;I<F;++I){E=O%10;M=G(O/10,L*10+E,F-1);T=T>M?M:T;O=(O/10)+E*D[F];}
w golfafor(I=0;I++<F;M=G(O/10,L*10+E,F-1),T=T>M?M:T,O=(O/10)+E*D[F])E=O%10;
i usunąć wsporniki wokółif
. Wypróbuj online 174 bajty . Lubię teżG(O,L,F,T,I,M,E)
. :)...1e3,1e4,1e5}
nie działało. Dzieki za sugestie.Haskell ,
1149686 bajtówTeraz z mniej ścisłą wydajnością. Pobiera dane wejściowe jako ciąg cyfr i porównuje permutacje z limitami z porównaniem listy. W minutach i sekundach sprawdzana jest tylko pierwsza cyfra. Awarie i poparzenia, jeśli brak permutacji jest prawidłowym czasem.
Wypróbuj online!
źródło
Python 2 ,
13111511210910588 bajtówWypróbuj online!
I / O to listy liczb całkowitych
Zgłasza błąd, jeśli nie jest to możliwe
Alternatywny:
Python 2 , 88 bajtów
Wypróbuj online!
Zwraca ostatni czas
Zwraca pustą krotkę dla niepoprawnych czasów
Zapisano
źródło
05AB1E ,
2015 bajtówWprowadź jako posortowany ciąg.
Wyjście to najmniejszy czas w postaci ciągu.
W przypadku braku rozwiązania wynikiem jest pusta lista.
Wypróbuj online!
źródło
JavaScript (ES6),
938988 bajtówOczekuje tablicy 6 cyfr posortowanych od najniższej do najwyższej. Zwraca 6-cyfrowy ciąg pierwszego ważnego czasu lub
false
jeśli nie ma rozwiązania.Wypróbuj online!
Skomentował
Rekurencyjnie wypróbowujemy wszystkie permutacje danych wejściowych, dopóki nie znajdziemy takiej, która przejdzie test hybrydowy przy użyciu zarówno arytmetyki, jak i wyrażenia regularnego.
źródło
Japt , 17 bajtów
Pobiera dane wejściowe jako ciąg cyfr i wyprowadza pierwszy prawidłowy czas; zapętla się w nieskończoność, jeśli nie ma ważnego czasu.
Spróbuj
Wyjaśnienie
źródło
Retina ,
7774696562 bajtówWypróbuj online! Zwraca najwcześniejszy czas lub pusty ciąg, jeśli nie można znaleźć czasu. Edycja: Zapisano
58 bajtów dzięki @TwiNight. Wyjaśnienie:Wygeneruj wszystkie permutacje.
:
Działa jego sposób choć jako ciąg permutacji są generowane, kończąc na początku.Sortuj godziny w kolejności.
Podaj pierwszy prawidłowy czas.
źródło
L0
0G
faktycznie.Czerwony ,
157124 bajtówDziękuję Kevinowi Cruijssenowi za przypomnienie, żebym uważniej czytał opisy!
Wypróbuj online!
Pobiera posortowany ciąg jako dane wejściowe. Zwraca,
none
jeśli nie można uzyskać czasu.Wyjaśnienie:
źródło
sort
konieczne jest na początku? W wyzwaniu stwierdzam: „ Dozwolone jest przyjmowanie cyfr w dowolnej kolejności, tak aby można je było sortować od najniższej do najwyższej lub odwrotnie. ”Python 2 , 78 bajtów
Wypróbuj online!
Arnauld zapisał bajt. Dzięki!
Oczekuje listy
['1','2','3','4','6','8']
w kolejności posortowanej:123648
Zwraca liczbę całkowitą jak dla 12:36:48. Mam nadzieję, że to możliwe.źródło
62**3
zamiast240000
?Galaretka , 15 bajtów
Wypróbuj online!
Wysłane po prośbie. Podejście jest takie samo jak jedno z pozostałych, jednak odpowiedź ta została opracowana niezależnie.
źródło
Japt ,
3923 bajtówJestem pewien, że jest to krótszy sposób, ale chciałem spróbować użyć obiektów Date w Japt.
Pobiera dane wejściowe jako posortowaną tablicę liczb, zwraca ostatni prawidłowy czas lub puste dane wyjściowe, jeśli nie istnieje.
Stracił 10
funtówbajtów dzięki Kudłatemu .Wypróbuj tutaj .
źródło
Rubin ,
68 67 62 5655 bajtówWypróbuj online!
Dane wejściowe: Posortowana tablica cyfr (jako liczby całkowite).
Dane wyjściowe: tablica cyfr lub
nil
jeśli nie znaleziono rozwiązaniaźródło
eval "
Myślę, że możesz upuścić przestrzeń .a*9+b<22
na jeden bajt.Galaretka , 17 bajtów
Jestem prawie pewien, że to nie jest najkrótsze podejście ... przyjrzymy się temu później :)
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 63 bajty
Wypróbuj online!
Pobiera na wejściu posortowaną listę cyfr. Zwraca
Missing[NotFound]
za nieprawidłowe dane wejściowe.Wyjaśnienie
Znajdź wszystkie permutacje danych wejściowych. Ponieważ dane wejściowe są sortowane, zagwarantowane jest, że wszystkie prawidłowe czasy są w porządku rosnącym.
Znajdź pierwszą listę, która pasuje ...
Pierwszy element, oznaczony
a
jest 0, 1 lub 2, a etykieta drugi, trzeci, piąty i elementówb
,c
id
odpowiednio ...... takich, które
a*b
są mniejsze niż 10d
ic
są mniejsze niż 6, zd >= c
.Trick, że dla wszystkich liczb
00
na24
produkt z dwóch cyfr, co najwyżej 9, a ewentualne nieprawidłowe numery25
do29
(od zmusić pierwszą cyfrę 0, 1 lub 2) mają co najmniej 10 produkt.źródło
Pyth , 37 bajtów
Zestaw testowy
Wyjaśnienie:źródło
Perl 5 z
-palF
, 73 bajtamiWypróbuj online!
Wypisuje podobne
HHmmss
i wyprowadza pusty wiersz dla nieprawidłowych wpisów.Każda odpowiedź, którą ostatnio zadałem, była używana
glob
do permutacji ... Dziwne!źródło
Bash + GNU sed,
83,72, 69 bajtówseq 0 86399|sed "s/^/date +%T -ud@/e;h;`printf s/%d//\; $@`/\w/d;x;q"
Jak to działa
Wygeneruj wstępnie wszystkie możliwe ciągi czasowe dla znaczników czasu z zakresu od 0 do 86399, używając polecenia GNU-sed e (xecute) +
date
.%seq 0 86399|sed "s/^/date +%T -ud@/e;h;"
Wygeneruj
sed
skrypt z 6 sekwencyjnymi poleceniami podstawiania dla każdej cyfry wejściowej.%echo sed `printf s/%d//\; $@`
Następnie zastosuj podstawienia, usuń wszystkie linie wejściowe, które mają co najmniej jedną cyfrę, wydrukuj pierwszą pasującą linię (oryginalny ciąg czasu zostanie wyodrębniony z przestrzeni wstrzymania za pomocą
x
).Test
Wypróbuj online!
źródło
Kotlin ,
396391389 bajtówNie mam pojęcia, jak to zmniejszyć. Myślę, że jest dwa razy więcej niż to możliwe. Produkuje najwcześniej. Dzięki Kevin za 7 bajtów!
Wypróbuj online!
źródło
var l=0>1
ivar e=1>0
? Ponadto, dlaczego sąl=l
ie=e
konieczne? Dwie rzeczy, które wydają się działać do golfa sąvar e=1>0
dovar e=!l
i usuwanie spacji przed"None"
. Ponadto, każdy wynik falsey jest w porządku, więc"None"
może być również sprawiedliwy0
."0"
0
0
bezbłędnie. A twoja obecna funkcja nie określa typu powrotu, o ile mógłbym powiedzieć, więc czy i tak domyślnie nie powróci jako obiekt? PS: W ogóle nie znam Kotlina, po prostu wypróbowałem go bez cytatów, a wyniki były takie same. ;) Może coś innego z tego powodu nie działa, czego nie jestem świadomy.MATL ,
3130 bajtówWypróbuj online!
Wejście to 6 liczb całkowitych, wyjście to minimalna godzina, minuty i sekundy w tablicy. Awarie dla danych wejściowych, w których taki czas nie jest możliwy.
(-1 bajt dzięki @Luis Mendo.)
źródło
2&A
przez!A
, ponieważ matryca binarna nigdy nie będzie wiersz wektorPerl 6 , 43 bajtów
Wypróbuj online!
Oczekuje posortowanej tablicy wejściowej. Zwraca
Nil
nieprawidłowe dane wejściowe.źródło
Stax , 15 bajtów
Uruchom i debuguj
Do wprowadzenia potrzebny jest ciąg posortowanych cyfr. Zwraca pierwszą permutację, która spełnia kilka kryteriów.
źródło
Retina ,
5847 bajtówWypróbuj online!
Wejście składa się z 6 cyfr w posortowanej kolejności. Dane wyjściowe to 6 cyfr reprezentujących najwcześniejszy prawidłowy czas lub pusty ciąg, jeśli nie istnieje prawidłowy czas.
EDYCJA: Byłem idiotą, -9 bajtów
Wyjaśnienie
Algorytm
Dla zwięzłości zdefiniujmy małą cyfrę jako 0-5, a wysoką cyfrę jako 6-9.
Najpierw zmień kolejność cyfr, aby „niska” lub „wysoka” każdej pozycji była poprawna. Prawidłowe ustawienie dla każdej liczby wysokich cyfr na wejściu:
Ponieważ jakiekolwiek przegrupowanie nie powiedzie się, końcowe sprawdzenie na wejściu ma 4+ wysokie cyfry, możemy całkowicie zignorować tę sprawę.
Następnie posortuj indywidualnie minima i maksima. W połączeniu z przegrupowaniem daje to najniższą wartość, która spełnia ograniczenia minutowe i drugie. To daje najwcześniejszy ważny czas, jeśli taki istnieje.
Na koniec sprawdź, czy mamy odpowiedni czas. Jeśli nie, odrzuć ciąg.
Program
Dopasowuje
LHH
i zamienia pierwsze dwie cyfry w tym (staje sięHLH
) i powtarzaj to, dopóki nie będzie już więcejLHH
. Daje to prawidłowe ustawienie.Właściwie to skłamałem. Sortowanie nie jest konieczne, ponieważ 1) zamiana zachodzi tylko między sąsiednimi cyframi i tylko między niskim a wysokim; i 2) dane wejściowe są posortowane. Tak więc pojedyncze minima i maksima są już posortowane.
Zachowuje ciąg tylko wtedy, gdy jest to prawidłowy czas
źródło