Stundenzettel
An einem Arbeitsplatz müssen Sie häufig Arbeitszeitnachweise ausfüllen. Diese Aufgabe besteht darin, Code zu schreiben, um dies zu unterstützen.
Eingang
Zweimal im 12-Stunden-Format, das nicht dem Standard entspricht und den Beginn und das Ende des Tages durch ein Leerzeichen voneinander trennt. Eine dritte Zahl gibt die Anzahl der Minuten an, die für das Mittagessen benötigt werden. Beispielsweise
9:14 5:12 30
Das bedeutet, dass Sie um 9:14 Uhr mit der Arbeit begonnen haben, um 17:12 Uhr mit der Arbeit fertig sind und 30 Minuten zum Mittagessen gebraucht haben.
Das können Sie annehmen
- Jeder Zeitpunkt in der ersten Spalte ist von 00:00 Uhr (Mitternacht) bis einschließlich 13:00 Uhr und jeder Zeitpunkt in der zweiten Spalte ist frühestens 13:00 Uhr bis 23:59 Uhr.
- Die Mittagspause ist nicht länger als der Arbeitstag!
Das Eingabeformat muss den angegebenen Beispielen entsprechen.
Aufgabe
Ihr Code sollte eine Datei (oder Standardeingabe) dieser Tripel einlesen und für jede Ausgabe angeben, wie lange Sie gearbeitet haben. Diese Ausgabe sollte die Anzahl der Stunden anzeigen. Für das obige Beispiel ist dies:
7 Stunden und 58 Minuten minus 30 Minuten, was 7 Stunden und 28 Minuten entspricht.
Ausgabe
Ihre Ausgabe muss die (vollständige) Anzahl von Stunden und Minuten angeben und darf nicht mehr als 59 Minuten enthalten. Das heißt, Sie können nicht 2 Std. 123 Min. Ausgeben. Abgesehen davon kann Ihr Code in jedem für Sie geeigneten, leicht lesbaren Format ausgegeben werden.
Beispiele
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
:
begrenzte Zeiten im 12-Stunden- Format ) dieser Herausforderung etwas hinzufügt.Antworten:
MATL , 28 Bytes
Probieren Sie es online!
quelle
"XXhr YYmin"
?Retina 0.8.2 , 83 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Konvertieren Sie die Eingabe in Unary.
Fügen Sie der Stoppzeit 12 Stunden hinzu.
Multiplizieren Sie die Stunden mit 60 und addieren Sie sie zu den Minuten.
Subtrahieren Sie die Start- und Pausenzeit von der Stoppzeit.
Divmod by 60. (Sparen Sie 5 Bytes für ein langweiligeres Ausgabeformat.)
quelle
Perl 5 -pl,
807471 BytesProbieren Sie es online!
quelle
Python 3, 161 Bytes
Ich weiß, dass dies nicht annähernd das kleinste ist, aber es liest eine Datei ein:
Ich fühle die Ironie, meine Arbeitszeittabelle anzuhalten, um dies zu tun ...
Python 2.7, 133 Bytes
Danke für die Anregungen in den Kommentaren! Wenn Sie zu Python 2.7 wechseln, werden einige weitere Bytes gespart, da standardmäßig die Ganzzahldivision verwendet wird:
Der gleiche Ansatz mit python3 ist 135 Byte, da die print-Anweisung standardmäßig die float-Division verwendet:
quelle
i=int
am Anfang setzen und die dritte Zeile aufm=-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(':'))
die mehrfachen Konvertierungen in int verwenden und ablegen, alles zu einem Einzeiler reduzieren, indem Sie den Einzug durch;
etc. ersetzen , um ein paar Bytes zu sparen. Darüber hinaus finden Sie unter Tipps zum Golfen in Python weitere interessante Tricks, die andere Benutzer während ihres Golfsportlebens entdeckt haben :).print(m,m%60)
würde es meiner Meinung nach ausreichen. (Beachten Sie auch die Verwendung vonm%60
anstelle vonm-(m//60*60)
)C 105 Bytes
Ganz einfach. Probieren Sie es hier online aus .
Ungolfed:
quelle
a,b,c,d;f(e)
anstelle vona,b,c,d,e;f()
und;printf("%d:%d ",a/60,a%60))a=(12+c-a)*60+d-b-e;}
anstelle von;)a=(12+c-a)*60+d-b-e,printf("%d:%d ",a/60,a%60);
Wolfram Language
125 119111 Bytes8 Bytes gespart dank Benutzer 202729
Beispiel
Abkürzungen werden hier nicht verwendet, um das Verfolgen der Logik zu erleichtern.
Interpreter["Time"][#2 <> "pm"]
interpretiert als Zeit den zweiten Parameter gefolgt von "pm", in diesem Fall "4:12 pm", und gibt einenTimeObject
Wert zurück, der 4:12 pm entspricht.-Interpreter["Time"][# <> "am"])[[1]] - #3/60]
.#3
ist der dritte Parameter, nämlich 20min. Das Minuszeichen subtrahiert das Mittagsstundenintervall vom Ende der Schichtzeit. Sie gibt die eingestellte Schichtendezeit zurück, dh das Schichtende, das gelten würde, wenn die Person keine Mittagspause eingelegt hätte.Interpreter["Time"][#]
interpretiert als Zeit den ersten Parameter, in diesem Fall "9:00", und gibt einenTimeObject
Wert zurück, der 9:00 Uhr entspricht.Subtrahiert man den Schichtstart vom eingestellten Schichtende, ergibt
t
sich das in Stunden ausgedrückte Zeitintervall.IntegerPart[t]
Gibt die Anzahl der geleisteten Arbeitsstunden zurück.IntegerPart[60 Mod[t,1]], "min"}]
gibt die zusätzlich geleisteten Minuten zurück.quelle
Mod[x, 1]
gebraucht.Floor
verwendet werden fürIntegerPart
?-6hr 52min
für die von mir verwendeten Beispielwerte zurück. Ich muss das untersuchen, um zu verstehen, warum ein negativer Wert für Stunden (und anscheinend Minuten) erzeugt wurde.JavaScript,
83 Bytes76 BytesHabe gerade die innere Funktion von unten gelöst (Was habe ich gedacht?). Das Ausgabeformat wurde ebenfalls geändert.
Probieren Sie es online!
ALT: JavaScript,
112 Bytes111 Bytes110 BytesErläuterung:
In der Hauptfunktion definieren wir zunächst eine andere, mit deren Hilfe wir die Minuten einer bestimmten Zeit berechnen können. Dem Stundenparameter werden 12 Stunden hinzugefügt, wenn der dritte Parameter wahr ist:
Als nächstes
teilenwir' '
':'
die Zeichenkette entweder durchoderstimmen mit den Zahlen in der Zeichenkette überein, was zu einem Array aller Zahlen in der Zeichenkette führt.Dann berechnen wir die Differenz von End- und Startzeit und subtrahieren die Mittagszeit mit der zuvor definierten Funktion (konvertieren die Zeichenfolgen bei Bedarf in Zahlen).
Schließlich erzeugen wir die Ergebniszeichenfolge: Stunden sind der ganzzahlige Teil von
r/60
und Minuten sindr%60
.Probieren Sie es online!
quelle
map
:a=>a.map(...)
. Es werden 5 Bytes zu meiner Antwort hinzugefügt. Aber ich warte immer noch auf die Antwort von OP (oder irgendjemandem) auf meinen Kommentar.Python 2 , 100 Bytes
Probieren Sie es online!
Vollständiges Programm, das gemäß den Anweisungen von OP mehrere Zeilen aus einer Textdatei liest. Eine Funktion, die nur eine einzelne Zeile analysiert, würde zusätzliche 10 Bytes einsparen.
quelle
Java 10,
194191 BytesI / O ist in Java schmerzhaft. Wird abnormal beendet, wenn keine weitere zu lesende Eingabezeile vorhanden ist. Probieren Sie es hier online aus .
Ungolfed:
quelle
rot , 35 Bytes
Probieren Sie es online!
Hinweis: Die Ausgabe erfolgt im Format
hh:mm:ss
quelle
R 97 Bytes
Probieren Sie es online!
Für jede Zeile wird zurückgegeben
"hours minutes"
quelle
data.frame
paar Bytes zu speichern - funktioniert bisher nicht . Aber diese einfache Änderung macht :)