Wyzwanie
Napisz najkrótszy kod, który może zsumować czas trwania pojawiający się w standardowym wejściu. Program musi brać pod uwagę tylko ciągi znaków, które pasują do jednego z poniższych wzorców, i ignorować pozostałe.
HH:MM:SS (it will be interpreted as HH hours, MM minutes and SS seconds)
H:MM:SS (it will be interpreted as H hours, MM minutes and SS seconds)
MM:SS (it will be interpreted as MM minutes, SS seconds)
M:SS (it will be interpreted as M minutes, SS seconds)
przykłady ciągów pasujących do wyliczonych wzorców:
12:00:01
2:03:22
00:53
9:13
Dane wyjściowe powinny mieć postać
HHh MMm SSs (that means HH hours, MM minutes and SS seconds with non-zero-padding)
Przykład
STDIN
Zobacz film powitalny.
Wideo: 10:37 min.
Zobacz wprowadzenie wideo do kursu.
Wideo: 3:30 min. Zobacz wideo na temat korzystania z Przeglądu lekcji.
Wideo: 9:13 min.
Zobacz przegląd wideo na temat korzystania z systemu Epsilen do udostępniania swojej pracy.
Wideo: 03:15 min.
Obejrzyj film, aby dowiedzieć się więcej o stanie gotowości akademickiej stanu Teksas (STAAR).
Wideo: 1:05:26 min.
STDOUT
1h 32m 1s
źródło
10:4:56
? Zgodnie z obecną specyfikacją należy je traktować jako4m 56s
, część10
zostanie zignorowana. To samo pytanie o10:12:7
to oznacza10m 12s
ignorowanie7
? A może można zdefiniować obsługę takich ciągów?1h 19m 18s
do wyjścia?37+30+13+15+26==121
,10+3+9+3+5==30
,1==1
, Więc spodziewam1h 32m 01s
. Co jest złego w tej logice? Ponadto taki format wyjściowy jest tym, który jest oczekiwany, prawda?Odpowiedzi:
Pyth 105
Wypróbuj online.
Wymaga to wprowadzenia danych STDIN w taki sam sposób jak odpowiedź Javascript, tak jak cytowany tekst z nowymi liniami jak
\n
s.Próba:
Wynik
Przykład pracy z datami Weirdera:
Wynik
(Tylko czasy 10:10 i 1:10 są uzasadnione)
Głównym powodem, dla którego jest to tak długo, jest to, że Pyth nie pozwala wyodrębnić pozytywnych dopasowań. Zamiast tego dopasowuje wszystko, co nie jest poprawnym czasem, i zastępuje je spacją. Następnie dzielenie na białe znaki pozostawia tylko czasy i niektóre niepoprawne liczby. Nadmiarowe liczby są usuwane poprzez sprawdzanie
:
znaków, które zostaną usunięte z nieważnych czasów. Prawie na pewno można by dalej grać w golfa;)źródło
JavaScript ES6, 138 znaków
Funkcja, 139
Pobiera ciąg znaków jako argument i zapisuje dane wyjściowe w konsoli:
Program, 138
Sprawdź działanie
Wynik
źródło
JavaScript, ES6,
208 200197 bajtówWiem, że to jest bardzo długie, ale chciałem poznać najnowsze funkcje ES6, cofania, zmniejszania mapy, funkcji strzałek i rozumienia tablic (operator rozkładania).
Wystarczy uruchomić fragment w najnowszym Firefoksie.
Jak to działa (trochę bez golfa)
źródło
Bash (z grep, sed, awk i datą): 124 bajty, 120 bajtów
Po prostu wstaw tekst do tego:
Jak to działa
0123456789:
źródło
Perl -
228201Zdarza się, że jest to ten sam algorytm co Optymalizator (grep, split, reverse, add).
Nie jestem ekspertem od Perla, więc może liczba bajtów może zostać zmniejszona.
Bez golfa
źródło
my
słowami kluczowymi).Rebol - 174
Nieoznaczony + adnotacja:
Rebol ma własny
time!
typ danych. Możesz zobaczyć, jak powyższy kod korzysta z tego z poniższego przykładu (z poziomu konsoli Rebol):źródło
Groovy - 195
Nie mogę wymyślić, jak to bardziej skompresować.
Bez golfa
źródło
Mathematica 300 znaków
To małe ćwiczenie wymagało dużo kodu, nawet dla Mathematica. Z pewnością istnieją na to bardziej wydajne sposoby.
Grał w golfa
Zakładając, że dane wejściowe są przechowywane
txt
,Jak to działa (używając kodu UnGolfed):
1-Znajdź czasy.
2-Przerwa na godziny, minuty, sekundy
3-Sumuj czasy. Obiekty czasu to czasy zegarowe. Odjęcie jednego obiektu czasowego od drugiego zwraca czas trwania, w tym przypadku 92,0167 minut.
QuantityMagnitude
upuszcza jednostkę miary.4-Konwertuj 92,0167 minut na godziny, minuty i sekundy.
źródło
Perl, 146
Mój wpis drukuje wynik z końcową spacją - mam nadzieję, że to w porządku
Jeśli możemy założyć, że będzie tylko jeden raz na wiersz wprowadzania, możemy posiekać 4 znaki:
Działają one poprzez zsumowanie całkowitej liczby sekund, które upłynęły, a następnie sformatowanie tej wartości.
źródło