Arkusze czasu pracy
W miejscu pracy często musisz wypełniać karty pracy. To zadanie polega na napisaniu kodu, który w tym pomoże.
Wejście
Dwa razy w nieco niestandardowym 12-godzinnym zegarze oznaczającym początek i koniec dnia oddzielone spacją. Trzecia liczba reprezentuje liczbę minut zajętych na lunch. Na przykład
9:14 5:12 30
Oznacza to, że zacząłeś pracę o 9:14, skończyłeś o 17:12 i zająłeś 30 minut na lunch.
Możesz to założyć
- Każda pora w pierwszej kolumnie trwa od 00:00 (do północy), ale nie obejmuje 13:00, a każda godzina w drugiej kolumnie to najwcześniej 13:00, aż do 23:59.
- Przerwa na lunch nie trwa dłużej niż dzień roboczy!
Format wejściowy musi być zgodny z podanymi przykładami.
Zadanie
Twój kod powinien czytać w pliku (lub standardowym wejściu) tych potrójnych danych i dla każdego wyjścia, jak długo pracowałeś. Ten wynik powinien wskazywać liczbę godzin. W powyższym przykładzie jest to:
7 godzin i 58 minut minus 30 minut, czyli 7 godzin 28 minut.
Wynik
Dane wyjściowe muszą określać (całkowitą) liczbę godzin i minut i nie mogą zawierać więcej niż 59 minut. Oznacza to, że nie można wyprowadzić 2 godz. 123 min. Poza tym twój kod może generować w dowolnym wygodnym dla ciebie formacie, który jest łatwy do odczytania przez człowieka.
Przykłady
10:00 1:00 30 --> 2hr 30min
12:59 1:00 0 --> 0hr 1min
00:00 11:59 0 --> 23hr 59min
10:00 2:03 123 --> 2hr 0min
:
ograniczenia czasowe na zegarze 12-godzinnym) dodaje coś do tego wyzwania.Odpowiedzi:
MATL , 28 bajtów
Wypróbuj online!
źródło
"XXhr YYmin"
?Retina 0.8.2 , 83 bajty
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Przekształć dane wejściowe w jednoargumentowe.
Dodaj 12 godzin do czasu zatrzymania.
Pomnóż godziny przez 60 i dodaj do minut.
Odejmij czas rozpoczęcia i czas przerwy od czasu zakończenia.
Divmod przez 60. (Zaoszczędź 5 bajtów, aby uzyskać bardziej nudny format wyjściowy.)
źródło
Perl 5 -pl,
807471 bajtówWypróbuj online!
źródło
Python 3, 161 bajtów
Wiem, że nie będzie to nawet najmniejsze, ale czyta się w pliku:
Czuję ironię, jak pauzuje mój grafik, żeby to zrobić ...
Python 2.7, 133 bajty
Dzięki za sugestie w komentarzach! Przejście na Python 2.7 oszczędza kilka dodatkowych bajtów, ponieważ domyślnie jest dzielone na liczby całkowite:
To samo podejście z python3 ma 135 bajtów z powodu instrukcji print i domyślnego podziału na zmiennoprzecinkowe:
źródło
i=int
na początku i zmieniając trzecią linię nam=-i(l[0])*60+i(l[1][:2])+(i(l[1][3:])*60+720+i(l[2][:2])-i(l[2][2:]))
map(int,l[:-1].split(':'))
i upuścić wiele konwersji do int, zwinąć wszystko do jednowierszowego, zastępując wcięcie;
itp., Aby zaoszczędzić kilka bajtów. Dodatkowo możesz odwiedzić Porady dotyczące gry w golfa w Pythonie, aby uzyskać więcej ciekawych sztuczek, które inni użytkownicy odkryli podczas swojego życia golfisty :).print(m,m%60)
że wystarczy. (Zwróć również uwagę na użyciem%60
zamiastm-(m//60*60)
)C, 105 bajtów
Całkowicie proste. Wypróbuj online tutaj .
Nie golfowany:
źródło
a,b,c,d;f(e)
zamiasta,b,c,d,e;f()
i;printf("%d:%d ",a/60,a%60))a=(12+c-a)*60+d-b-e;}
zamiast;)a=(12+c-a)*60+d-b-e,printf("%d:%d ",a/60,a%60);
Wolfram Language
125 119111 bajtów8 bajtów zapisanych dzięki użytkownikowi 202729
Przykład
Skróty nie są tutaj używane, aby ułatwić przestrzeganie logiki.
Interpreter["Time"][#2 <> "pm"]
interpretuje jako czas drugi parametr, po którym następuje „pm”, a mianowicie w tym przypadku „16:12”, zwracając wartośćTimeObject
odpowiadającą 16:12.-Interpreter["Time"][# <> "am"])[[1]] - #3/60]
.#3
to trzeci parametr, a mianowicie 20 min. Znak minus odejmuje przedział godzinny od końca czasu zmiany. Zwraca skorygowany czas zakończenia zmiany, to znaczy koniec zmiany, który obowiązywałby, gdyby osoba nie zrobiła przerwy na lunch.Interpreter["Time"][#]
interpretuje jako czas pierwszy parametr, w tym przypadku „9:00”, zwracając wartośćTimeObject
odpowiadającą 9:00 rano.Odejmując początek zmiany od skorygowanego końca czasu zmiany, uzyskuje
t
się przedział czasu wyrażony w godzinach.IntegerPart[t]
zwraca liczbę pełnych przepracowanych godzin.IntegerPart[60 Mod[t,1]], "min"}]
zwraca dodatkowe minuty przepracowane.źródło
Mod[x, 1]
używane.Floor
być używany doIntegerPart
?-6hr 52min
dla zastosowanych wartości próbek. Muszę się temu przyjrzeć, aby zrozumieć, dlaczego wytworzono ujemną wartość godzin (i najwyraźniej minut).JavaScript,
83 bajty76 bajtówWłaśnie pozbyłem się wewnętrznej funkcji z rozwiązania poniżej (o czym myślałem?). Zmieniono również format wyjściowy.
Wypróbuj online!
STARY: JavaScript,
112 bajtów111 bajtów110 bajtówWyjaśnienie:
Wewnątrz głównej funkcji zaczynamy od zdefiniowania innej, która pomoże nam obliczyć minuty podanego czasu, dodając 12 godzin do parametru godzin, jeśli trzeci parametr jest prawdziwy:
Następnie
dzielimy ciąg znaków na dowolny z nichdopasowujemy liczby w ciągu, co daje tablicę wszystkich liczb w ciągu.' '
lub':'
Następnie obliczamy różnicę czasu zakończenia i czasu rozpoczęcia oraz odejmowania czasu na lunch za pomocą wcześniej zdefiniowanej funkcji (w razie potrzeby przekształcając ciągi na liczby).
Na koniec tworzymy wynikowy ciąg: godziny są liczbą całkowitą,
r/60
a minuty sąr%60
.Wypróbuj online!
źródło
map
:a=>a.map(...)
. Dodanie 5 bajtów do mojej odpowiedzi. Ale wciąż czekam na odpowiedź OP (lub kogokolwiek innego) na mój komentarz.Python 2 , 100 bajtów
Wypróbuj online!
Pełny program, który odczytuje wiele wierszy z pliku tekstowego, zgodnie z zaleceniami OP. Funkcja, która po prostu analizuje pojedynczy wiersz, zaoszczędziłaby dodatkowe 10 bajtów.
źródło
Java 10,
194191 bajtówWe / wy jest bolesne w Javie. Kończy się nieprawidłowo, gdy nie ma następnego wiersza wejścia do odczytu. Wypróbuj online tutaj .
Nie golfowany:
źródło
Czerwony , 35 bajtów
Wypróbuj online!
Uwaga: Dane wyjściowe mają format
hh:mm:ss
źródło
R , 97 bajtów
Wypróbuj online!
Dla każdej linii zwraca
"hours minutes"
źródło
data.frame
aby zaoszczędzić trochę bajtów - do tej pory nie działałem . Ale ta prosta zmiana robi :)