Ich arbeite einen Standard neun bis fünf. Montag bis Freitag. Ich nehme mir eine halbe Stunde Zeit zum Mittagessen von 12:30 bis 13:00 Uhr.
Schreiben Sie mir ein Programm, das beim Ausführen den Prozentsatz der Arbeitswoche berechnet, den ich zum aktuellen Zeitpunkt abgeschlossen habe.
Regeln
- Zählen Sie nur die tatsächlich geleistete Arbeitszeit. Ich bin pünktlich und arbeite nicht beim Mittagessen.
- Keine Eingabe. Sie können Informationen wie die aktuelle Uhrzeit / das aktuelle Datum erhalten, dies ist jedoch zweckmäßig.
- Die Arbeitswoche gilt vom Freitagende bis Mitternacht zwischen Sonntag und Montag als abgeschlossen.
- Zeitzone ist die lokale Zeitzone.
- Die Ausgabe sollte eine Dezimalzahl sein, z. B. 66.25498, Prozentzeichen optional.
- Das Programm sollte einigermaßen zukunftssicher sein. Es sollte in der Lage sein, Schaltjahre zu bewältigen.
- Die Ausgabeauflösung sollte eine Sekunde oder besser sein. Ich mag es, den Wasserkocher kochen zu sehen.
- Code Golf. Der kürzeste Code gewinnt.
Antworten:
Q,
111102quelle
Python 3, 132
Die Auflösung beträgt eine Minute oder 2/45 Prozent. Das ist mehr als genug IMO.
quelle
Excel,
132,129,123,119, 117Einfügen in A2: A4
Formatieren Sie die Zelle A4 als%, um das richtige Format zu erhalten
40 Stunden Arbeitswoche - Bezahltes Mittagessen:
88, 81quelle
NOW()
es eine Zeit nach 17 Uhr ist.0
) hinzugefügt , das nicht notwendig ist!Perl, 124 Zeichen
OK, einfache erste Lösung zum Setzen des Par:
Führen Sie mit aus
perl -M5.010
, um die Perl 5.10+say
-Funktion zu aktivieren . Die Auflösung beträgt eine Sekunde. Wenn eine Auflösung von einer Minute akzeptabel ist, kann das+$s/3600
Teil für eine Gesamtlänge von 116 Zeichen gelöscht werden .Diese Lösung verwendet
localtime
, um den Wochentag und die Tageszeit zu ermitteln. Sie sollte daher unabhängig von Jahresänderungen, Schalttagen oder anderen Besonderheiten des Kalenders funktionieren, zumindest solange sich der Zyklus der Woche mit sieben Tagen nicht ändert. Änderungen der Sommerzeit während des Arbeitstages würden es leicht verwirren, aber diese treten im Grunde sowieso nie auf, vermutlich gerade deshalb, weil dies zu viel Verwirrung führen würde.(Beachten Sie zum Testen, dass
localtime
ein Unix-Zeitstempel als optionales Argument akzeptiert wird.)quelle
Mathematica
169 168 212 214 211 218 210190 ZeichenLangatmig, nach Code Golf Standards.
Im Folgenden werden Arbeitswochen berücksichtigt, die Monats- oder Jahresgrenzen überschreiten, sowie Schaltjahre. Die Arbeitszeit wird nach Stunden und Minuten berechnet.
Ich konnte mir keinen Weg vorstellen, die Wochentage nicht zu buchstabieren. Mathematica gibt den Wochentag als 3-stellige Zeichenfolge zurück, die in eine Zahl umgewandelt werden muss.
De-Golf gespielt
quelle
VBA 141
Formatiert, um aus dem unmittelbaren Fenster ausgeführt zu werden. Vielen Dank an Sean Cheshire für den Hinweis auf eine Verbesserung um 10 Zeichen!
quelle
n=(Now-Int(Now))*24:a=(Weekday(Now,3)*7.5+IIf(n>17,7.5,IIf(n>9,IIf(n<12.5,n,IIf(n>13,n-.5,n))-9,0)))/37.5:MsgBox Format(IIf(a>1,1,a),".0%")
R, 115 Zeichen
Hier ist eine einwöchige Simulation:
quelle
Ruby,
191,116,115,113Die Logik wird aus der Fraxtils Python-Lösung gestohlen .
Wenn Sie den Code mit dem Komponententest testen möchten, benötigen Sie diese 143-Zeichen-Lösung:
Nicht der kürzeste und effizienteste Code, aber mit einem Unit-Test;)
Die 191 Zeichen enthalten die Zeilenumbrüche (ich könnte es zu einem Einzeiler machen, ersetzen Sie einfach jeden Zeilenumbruch durch einen
;
).Und der Testcode:
quelle
Python 2 130 Zeichen
Mein dritter Versuch ist eine schwache Sauce, aber ich glaube, ich habe die Logik richtig verstanden.
quelle