Ihre Aufgabe ist es, eine einzelne Zahl auszugeben; Die Anzahl der ISO-Wochen, die ein bestimmter Datumsbereich überschneidet. Wikipedia zitieren:, An average year is exactly 52.1775 weeks long
aber das ist nicht etwa der Durchschnitt.
Die Eingabe besteht aus zwei durch Leerzeichen getrennten ISO-Daten:
0047-12-24 2013-06-01
Das Enddatum liegt niemals vor dem Startdatum. Der Einfachheit halber verwenden wir den extrapolierten Gregorianischen Kalender.
Testfälle:
Format: input -> output
2015-12-31 2016-01-01 -> 1 (both are within week 53 of 2015)
2016-01-03 2016-01-04 -> 2 (the 3rd is within week 53, and the 4th is in week 1)
2015-12-24 2015-12-24 -> 1 (this single day is of course within a single week)
Ihre Lösung sollte Daten zwischen 0001-01-01
und verarbeiten 9999-12-31
.
Weeks start with Monday.
Antworten:
Ruby,
898886 BytesEine sehr primitive Lösung: das erste Datum gegeben
a
und das zweite Datumb
, erhöhta
, zu überprüfen , ob es ein Montag ist (wenn ja, wir „überrollen“ zu einer neuen Woche haben), und zu stoppen , sobalda
istb
.Nimmt Eingaben in dem genauen Format vor, das in der Frage angegeben ist: eine einzelne durch Leerzeichen getrennte Zeichenfolge. (So wie es parst der Eingang fancy-Ish: es verwendet Ruby „Klecks“ Operator
*
. Dieser Operator „erweitert“ , ein Array oder enumerable geführt, soTime.gm *[2013, 06, 01]
wirdTime.gm 2013, 06, 01
.)Aus einer Kommentardiskussion importiert:
Nur um künftige Verwechslungen mit dem korrekten Umgang mit Jahresgrenzen zu vermeiden - laut Wikipedia beginnen alle Wochen immer am Montag und enden am Sonntag.
Für einige ausgefallene Tricks sind diese alle gleichwertig:
quelle
a==b
indem Sie es ersetzena<b
?VBA, 125 Bytes
Erwarten von 2 Funktionseingängen als Zeichenfolgen
Ziemlich sicher, dass man Golf spielen kann. Dies durchläuft jeden Tag eine Schleife zwischen den beiden Daten und erhöht den Zähler jedes Mal, wenn sich das ISO-Datum ändert.
DatePart("ww",f+i,2,2)
ist die ISO-Wochennummer in VBA die erste 2 bedeutetMonday (complies with ISO standard 8601, section 3.17)
. dann bedeutet die zweite 2Week that has at least four days in the new year (complies with ISO standard 8601, section 3.17)
140 Bytes mit einem Eingang
quelle
R, 76 Bytes
Nach dem Gespräch mit @Doorknob ist es endlich so einfach wie die Montagszählung.
seq
Erlauben Sie, einen Vektor von Datumsangaben (von jedem Tag zwischen zwei Datumsangaben) zu erstellen und diese in die 'Nummer des Wochentags' umzuwandeln. Zählen Sie nun die Zeiten, zu denen es 1 ist, um die Anzahl der von Ihnen geänderten Wochentage zu erhalten und 1 zu addieren vorherige Woche berücksichtigen.Eine weitere Annäherungsschleife:
R, 85 Bytes
quelle
Mathematica
135 79 96 8474 BytesIn Übereinstimmung mit dem Vorschlag von @ Doorknob
Generiert alle Daten im Bereich
zählt die Anzahl der Montage (
ISOWeekDay
== "1") in derDateRange
(außerd
), undaddiert sich
1
zur Summe.quelle