Der Wochentag und der Monat des Jahres scheinen viel Aufmerksamkeit zu bekommen, aber niemand scheint sich um die Woche des Jahres zu kümmern. Ich glaube, es ist Zeit, dies zu ändern. Ihre Aufgabe ist es also, ein Programm oder eine Funktion zu schreiben, die bei Angabe eines Datums eine Ganzzahl zwischen 1 und 53 ausgibt, die der aktuellen Woche des Jahres entspricht.
Für die Zwecke dieser Herausforderung werden wir sagen, dass der erste Sonntag des Jahres den Beginn des Jahres markiert. Der einzige Fall, in dem der 1. Januar als Woche 1 betrachtet wird, ist, wenn er auf einen Sonntag fällt.
- Die Eingabe kann ein beliebiges Datumsformat sein, das die Wochennummer (geben Sie einfach das Format in Ihrer Antwort an) für Daten zwischen
1JAN1900
und nicht explizit enthält31DEC2100
. - Die Ausgabe ist eine Ganzzahl zwischen 1 und 53
- Sie können alle Standardmethoden zur Bereitstellung von Eingabe / Ausgabe verwenden.
Testfälle
17MAY2017 -> 20
3JAN2013 -> 53
1JAN2017 -> 1
17MAY1901 -> 19
31DEC2100 -> 52
7JUL2015 -> 27
- Dies ist Code-Golf, daher gelten alle Standard-Golfregeln, und der kürzeste Code (in Bytes) gewinnt.
07/07/2015
)? Kann7JUL2015
sein07JUL2015
?7/7/2015
,2015-07-07
Sind auch gültig.%U
Benutzer: Wie @J_Lard hervorhebt, müssen Sie darauf achten, ob Woche 0 Woche 52 oder 53 des Vorjahres ist. Es ist Woche 53 in 2001, 2007, 2013, 2018, 2024, 2029 und wiederholt sich in einem 28-Jahres-Zyklus. Andere Jahre ist Woche 52.Antworten:
Ohm ,
1233 BytesBEARBEITEN : Die Randfälle für "% U" wurden korrigiert .
Angenommen, die Eingabe kann ein Zeitstempel sein. Erklärung zu kommen.
Probieren Sie es online aus!
quelle
MATL , 50 Bytes
Vielen Dank an @Neil und @NickClifford für den Hinweis auf einen Fehler, der jetzt korrigiert wurde
Probieren Sie es online aus! Oder überprüfen Sie alle Testfälle .
Erläuterung
Dies verwendet die drei Datums- / Zeitkonvertierungsfunktionen, die es in MATL gibt:
XO
: Datum und Uhrzeit in Zeichenfolgenformat konvertieren;YO
: Datum und Uhrzeit in Seriennummer umwandeln;ZO
: Konvertieren Sie Datum und Uhrzeit in den Vektor der Komponenten.Die Bestimmung, ob Woche "0" 52 oder 53 werden soll, war kostspielig, da MATL keine aufrufbaren Funktionen zur Wiederverwendung des
8XO!s310=s
Teils definieren kann. Die Wiederverwendung mittels einer Schleife mit einem Zweig spart nur ein Byte und erschwert die Erklärung, so dass es sich wahrscheinlich nicht lohnt.Es könnte auch etwas gewonnen werden, wenn das Datum als Array [Jahr, Monat, Tag] eingegeben wird. aber das würde ich nicht alle drei datumsfunktionen nutzen :-)
Betrachten Sie die Eingabe
'17MAY2017'
als Beispiel.quelle
%U
, aber ich möchte nur sicher gehen.JavaScript (ES6),
8280 ByteNimmt Eingabe als
(year,month,day)
.quelle
JavaScript (Firefox 34+), 70 Byte
Funktioniert, indem der erste Wochentag mit dem angegebenen Datum und dann die Wochennummer des Tages (die niemals Null ist) ermittelt werden.
quelle
with
. Immer +1 fürwith
!Python 2,
7064 BytesEingabe =>
(year,month,day)
-6 Bytes, danke an @ovs
quelle
JavaScript (nur Firefox), 77 Byte
Nimmt Datum als Zeichenfolge: dh
Jan 1, 2017
quelle
PHP, 125 Bytes
Probieren Sie es online aus!
PHP, 28 Bytes
Version für Montag statt Sonntag
Probieren Sie es online aus!
quelle
C #,
138123121 BytesEs stellt sich heraus, dass es ein eingebautes dafür gibt, obwohl es ziemlich groß ist ...
quelle
Powershell, 260 + 8 = 268 Bytes
+8 Bytes wegen des
-DateTime
FlagsAkzeptiert Argumente als
"day month year"
Format.Kein Powershell-Experte, kann nicht Golf spielen
Testfall
quelle