Wer mag es nicht, an einem Sonntagmorgen im Sommer mit einem gekühlten Bier und Fernsehen zu chillen oder im Winter Badminton zu spielen oder ultimativ mit Freunden zu chillen?
Ich denke immer, dass Sie gut informiert sind, wenn Sie wissen, wie viele Tage Sie in einem Monat chillen müssen, und Sie bei der Planung Ihrer Aktivitäten unterstützen. Sei es, wenn Sie vor Ihrem PC sitzen und ein Code-Golf-Problem lösen oder Fußball spielen.
Also, schreiben Sie mir helfen , ein Programm oder eine Funktion , die als Eingang 2 positive ganze Zahlen nimmt, Y
und M
und gibt die Anzahl der Sonntage in dem betreffenden Jahr ( Y
) und Monat ( M
) (nach dem Gregorianischen Kalender), dem Zeitpunkt der jeden Sonntag gefolgt.
Denken Sie auch daran, dass der kürzeste Code gewinnt.
Eingabebeschränkungen
1000 <= Y <= 9999
1 <= M <= 12
Ausgabe
Bei diesen Testfällen werden die Daten jedes Sonntags des Monats in diesem Jahr im Format ausgegeben DD-MM-YYYY
.
Beispiel-Testfälle
Testfall 1
Sample Input
2017 1
Beispielausgabe
5
01-01-2017
08-01-2017
15-01-2017
22-01-2017
29-01-2017
Testfall 2
Sample Input
2018 2
Beispielausgabe
4
04-02-2018
11-02-2018
18-02-2018
25-02-2018
Testfall 3
Sample Input
2016 11
Beispielausgabe
4
06-11-2016
13-11-2016
20-11-2016
27-11-2016
Date()
Objekts und jedes Ausgabeformat einschließlich[4, [<dateobj>, <dateobj>, <dateobj>, <dateobj>]]
(wobei<dateobj>
es sich um ein tatsächliches Datumsobjekt und[]
ein tatsächliches Array handelt) zuzulassen ./
statt-
? Oder kann es ein Monat sein, dann ein Tag, dann ein Jahr?Antworten:
MATL ,
46454235 BytesDie Eingabe ist ein Array des Formulars
[2017 1]
. Ausgabeformat ist29/01/2017
.Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Python 2 ,
150, 148,145 BytesProbieren Sie es online!
-3 Bytes, die das Zeug pythonischer machen (mit zip und filter!)
quelle
JavaScript (ES6), 107 Byte
Bearbeiten: Das Hinzufügen einer expliziten Anzahl kostet 15 Byte. Das Formatieren der Ausgabe würde mindestens weitere 33 Byte kosten, je nachdem, wie streng das Ausgabeformat ist.
quelle
outputs the number of Sundays in that particular year and month
; Es sieht so aus, als würde derzeit nicht die Anzahl der Sonntage ausgegeben.<input type='date'>
.PowerShell , 91 Byte
Probieren Sie es online!
(Besonderer Hinweis - Dies ist abhängig von der Ländereinstellung und den Kultureinstellungen. Da TIO als ausgeführt wird
en-us
es richtig dort arbeitet als Service - Leistung Dieser Code muss möglicherweise für verschiedene Gegenden geändert werden..)Nimmt die Eingabe als zwei Ganzzahlen
$y
und$m
. Schleifen von1
bis31
, wobeidatetime
für jedes mögliche Datum ein neues ObjektGet-Date
abgerufen wird (über das Cmdlet). Wirft Fehler für Monate mit weniger als 31 Tagen an STDERR (bei Code-Golf-Herausforderungen standardmäßig ignoriert), was sich jedoch nicht auf die Ausgabe auswirkt. Wir nehmen jedes dieserdatetime
Objekte und verwenden einWhere-Object
(|?{...}
) mit der Klausel von!$_.dayofweek
. Die Eigenschaft.dayofweek
ist eine Zahl von0
bis6
, die0
zweckmäßigerweise entsprichtSunday
, also der!
Wahrheit entspricht, die im Vergleich zu einer Gleichheitsprüfung wie ein paar Bytes einspart-eq0
.Die Sonntage werden dann in Parens gesammelt und in aufbewahrt
$a
. Wir nehmen dann die.count
davon, und das ist in der Pipeline platziert. Als nächstes durchlaufen wir$a
den-f
ormat-Operator und konstruieren das richtige Ausgabeformat. Beachten Sie, dass hierdurch keine führenden Nullen für Tage oder Monate ausgegeben werden. Diese DatumszeichenfolgenWrite-Output
verbleiben ebenfalls in der Pipeline und werden bei Programmabschluss implizit mit Zeilenumbrüchen gedruckt.Hinweis: Wenn das Ausgabeformat flexibler wäre, könnten wir einfach
$a
in der Pipeline bleiben und müssten keine Schleife durchlaufen. Dadurch werden diedatetime
Objekte als langes Datumsformat mit Zeitinformationen definiert, aber es werden nur 69 Byte angezeigt, die (derzeit) nur von Mathematica und MATL übertroffen werden.quelle
Oktave, 72 Bytes
nweekdate
Gibt die Datumsnummer zurück, die demN
-ten Auftreten eines bestimmten Wochentags im angegebenen Monat / Jahr entspricht. Wir verwenden das Array1:6
anstelle vonN
, um alle Vorkommen in einem Monat zu erhalten. Wenn es weniger alsN
Vorkommen dieses Wochentags in einem Monat gibt, lautet die resultierende Datumsnummer0
. Aus diesem Grund wählen wir nur die gültigen Daten mit aus(x>1)
und konvertieren sie dann mit in Zeichenkettendatestr
.Um die Anzahl der Sonntage zu zählen, zählen wir die Anzahl der Nicht-Nullen (
nnz
) im Ergebnis.Wir wickeln dann das Ganze ein
cellfun
, um jeden Wert anzuzeigen.quelle
Ruby,
140132129118 Bytesquelle
Excel - 103 Zeichen
Geben Sie das Jahr in die Zelle
A1
und den Monat in die Zelle einA2
.Die Zählung erfolgt in Zellen
D1
und sonntags in ZellenD2:D6
.Angenommen,
D2:D6
es ist TT-MM-JJJJ formatiert.quelle
Mathematica,
82-68BytesAnonyme Funktion. Gibt eine Liste der Anzahl der Tage aus, gefolgt von einer Liste der Sonntage als
DateObject
s. Es stellt sich heraus, dass in Mathematica der 0. Tag eines Monats als letzter Tag des Vormonats interpretiert wird.quelle
C #, 183 Bytes
Anonyme Methode, die ein String-Array zurückgibt, das zuerst die Anzahl der Sonntage und dann jeden Sonntag im angegebenen Format enthält. Wenn es nur 4 Sonntage im Monat gibt, ist die letzte Zeichenfolge null.
Volles Programm mit ungolfed Methode und Testfällen:
quelle
REXX, 168 Bytes
quelle
1217
?Bash + bsdmainutils, 94 Bytes
Verwendet den Befehl
cal
der einen Kalender druckt, wird standardmäßig in mehreren UNIX / LINUX / BSD (leider nicht in TIO) installiert.Um es zu versuchen, speichern Sie es
file
unterchmod +x file
, und führen Sie es aus./file 2017 9
Speichert die ersten zwei Bytes der Cal-Ausgabe, die mit der Zeichenfolge "MM-YYYY" als zweitem und erstem Parameter angehängt werden (muss geändert werden, wenn Ihr Gebietsschema nicht wochenweise an Sonntagen beginnt).
Als nächstes wird die Array-Länge um eins (das erste Element ist das Wort, das den Sonntag darstellt) und das Array ohne das erste Element um eins pro Zeile reduziert
fmt -1
quelle
SAS, 182 Bytes
quelle
T-SQL,
316311 BytesIch weiß jedoch nicht, ob es sich um eine gültige Antwort handelt, da die Anzahl der Sonntage nach den Daten ausgegeben wird
Probieren Sie es hier aus
ungolfed:
quelle
PHP,
127 118 112107 BytesNimmt Eingaben von Befehlszeilenargumenten entgegen. starte mit
-r
oder teste es online .Nervenzusammenbruch
quelle
Excel VBA, 190 Byte
quelle