Einführung
Häufig werden Daten als "zweiter Freitag im August 2018" oder "vierter Sonntag im März 2012" bezeichnet. Aber es ist schwer zu sagen, welches Datum das ist! Ihre Aufgabe besteht darin, ein Programm zu schreiben, das ein Jahr, einen Monat, einen Wochentag und eine Ganzzahl empfängt, und dieses Datum auszugeben.
Herausforderung
Als Eingabe erhalten Sie ein Jahr, einen Monat, einen Wochentag und eine Zahl.
Sie können Eingaben in jedem vernünftigen Format vornehmen, z. B. unter Verwendung einer Zeichenfolge für den Wochentag oder unter Verwendung eines mit Null indizierten Wochentags, oder sogar das Jahr und den Monat in einer einzelnen Zeichenfolge. Erläutern Sie jedoch Ihr Eingabeformat in Ihrer Antwort.
Die Ganzzahl, die angibt, an welchem Wochentag im Monat das Ziel festgelegt werden soll, ist eine Ganzzahl von 1-5. Die Ganzzahl bezieht sich niemals auf einen Wochentag, der nicht existiert (z. B. den fünften Freitag im Februar 2019, der nicht existiert).
Jahre werden immer positiv sein.
Ihre Ausgabe kann in jedem vernünftigen Format erfolgen, einschließlich des Ausdrucks Ihres Enddatums. Bitte erläutern Sie jedoch Ihr Ausgabeformat und Ihre Antwort.
Die Angabe von Jahr und Monat in der Ausgabe ist optional. Sie können auch davon ausgehen, dass das Datum gültig ist.
Beispiel für Ein- und Ausgabe
Betrachten Sie diese Eingabe, wobei das Format das Jahr als 4-stellige Zahl, den Monat als Ganzzahl, den Wochentag als Zeichenfolge und die Ordnungszahl als Ganzzahl verwendet:
2019, 3, Samstag, 2
2019, 12, Sonntag, 1
2019, 9 Samstag, 1
Ausgabe:
9. März, 1.
Dezember,
7. September
Das ist Code-Golf , also gewinnt die kürzeste Antwort.
date
, aber amüsanterweise hat der Parser hier eine interessante Interpretation .Antworten:
MediaWiki-Vorlage, 19 Bytes
Dies ist ein MediaWiki Template ParserFunctions Port dieser PHP Antwort
Hinweis:
#time
Verwenden Sie PHPstrtotime
intern.Sample Input
Beispielausgabe
quelle
Japt,
1915 BytesEingabe ist: Jahr, 0-basierter Index des Monats, 0-basierter Index des Wochentags (
0
ist Sonntag) &n
.Versuch es
quelle
C # (Visual C # Interactive Compiler) , 59 Byte
Probieren Sie es online!
-27 Bytes dank @EmbodimentOfIgnorance!
Weniger Golf Code ...
Der Rückgabewert ist eine Ganzzahl für den Tag des Monats des angeforderten Datums.
quelle
SmileBASIC,
5851484645 BytesDie Eingabe erfolgt in der Form:
week,year/month/weekday
week
: Wochennummer, 0-indiziertyear
: Jahr, 4 Stellenmonth
: Monat (1-indiziert), 2-stellig0
aufgefülltweekday
: Wochentag (1-indiziert, 1 = Sonntag), 2-stellig0
aufgefülltAusgabe ist der Tag des Monats, 0 indiziert.
Der 2. Samstag im März 2019 wäre
1,2019/03/07
→8
(9. März)Ungolfed
Erläuterung
Das Eingabeformular wurde speziell ausgewählt, damit das Jahr / Monat / Wochentag direkt übergeben werden kann.
DTREAD
Dies ist eine Funktion, die eineYYYY/MM/DD
Zeichenfolge analysiert und das Jahr / Monat / Tag als Zahlen zurückgibt sowie den Wochentag berechnet.Beachten Sie jedoch, dass
DTREAD
wir den Wochentag angeben, an dem der Tag des Monats erwartet wird. Dies macht die Sache komplizierter, bedeutet aber auch, dass weniger Eingabewerte vorhanden sind und/01
das Ende der Datumszeichenfolge nicht ergänzt werden muss .DTREAD
AusgängeW
undD
.W
ist der Wochentag und der WochentagD
desW
dritten Tages des Monats.(Wenn Sie also
7
als Wochentag eingeben,D
wird7
undW
wird dies der Wochentag sein, an dem der 7. Tag des Monats liegt.)Der Ausdruck
(5-W+D*2)MOD 7
wird verwendet, um das erste Vorkommen des eingegebenen Wochentags als 0-indizierten Tag des Monats abzurufen. (Ich habe dies hauptsächlich durch Ausprobieren herausgefunden.)Danach fügt das Programm nur noch hinzu
WEEK*7
.Ich wünschte wirklich, es gäbe getrennte Wörter für "Tag der Woche" und "Tag des Monats".
quelle
Perl 6 ,
5248 BytesProbieren Sie es online!
Anonymer Codeblock, der als Jahr, Monat, Wochentag (Sonntag ist 0) und Wochennummer (0 indiziert) eingegeben wird. Die Ausgabe ist ein Datumsobjekt.
Alte Erklärung:
quelle
$^c+4-$!.daycount
.MATL ,
2827 BytesDies verwendet drei Eingänge:
'March 2019'
Sat
'2
.Die Ausgabe ist eine Zeichenkette mit Tag, Monat und Jahr mit Bindestrichen getrennt:
09-Mar-2019
.Probieren Sie es online!
Erläuterung
Betrachten Sie Eingänge
'March 2019'
,'Sat'
,2
.quelle
Python 3 ,
9282 Bytes82 Bytes dank @Jo King
Probieren Sie es online!
Originalversion, 92 Bytes
Probieren Sie es online!
Nimmt das Jahr als Ganzzahl, den Monat als 1-indexierte Ganzzahl, den Wochentag als 0-indexierte Ganzzahl, wobei Montag
0
und Sonntag sind6
, und die Woche des Monats als 1-indexierte Ganzzahl.Wie es funktioniert:
quelle
R ,
7269 BytesProbieren Sie es online!
Eingaben nehmen als:
quelle
PHP ,
46,43, 31 BytesProbieren Sie es online!
Das Programm erhält als Eingabe einen String wie
"second saturday of March 2019"
Das Programm druckt die Tageszahl.
-12 Bytes dank Shaggy.
quelle
of
in der Eingabe brauchst .Groovy , 46 Bytes
Probieren Sie es online!
Eingabe als Jahre seit 1900, 0-indizierter Monat, 0-indizierter Tag (Sonntag ist 0) und Wochennummer
quelle
Scala , 86 Bytes
Probieren Sie es online!
quelle
Rot ,
6460 BytesProbieren Sie es online!
Nimmt das Jahr, den Monat und den Wochentag als Zahlen, 1-indiziert, Montag ist der erste Tag der Woche.
quelle
to-date
ist eine sache. Vielleicht wäre dies in der Weihnachtsabend-Format-Herausforderung nützlichnow
für diese Herausforderung verwendet" Eve"
date2-date1 times> -Methode iirc)>> 25-Dec-2019 - 1-1-2019 == 358
APL (Dyalog Unicode) , 36 Byte SBCS
Volles Programm. Eingabeaufforderungen für
[year,month]
(Januar ist 1), dann für Tag (Sonntag ist 0), dann für n (zuerst ist 1).Probieren Sie es online!
⎕CY'dfns'
c o p y in der dfns- bibliothek⊣
verwerfe das Ergebnis zugunsten von ...⎕
Eingabeaufforderung für[year,month]
Zahlendays
[c] Tage [n] seit 1899.12.31 des 0 - ten des Monats(⍳31)+
addieren sich die i ntegers 1 ... 31 , dassd←
store ind
(für d ay Zahlen)7|
Divisionsrest bei Division durch 7 (Wochentag, wobei Sonntag aufgrund einer guten Epoche 0 ist)⎕=
Eingabeaufforderung zur Eingabe der Wochentagsnummer und zum Abrufen einer Maske, bei der die Wochentagsnummern gleich sindd/⍨
Filterd
mit dieser Maske⎕⊃
Eingabeaufforderung Konsole für n und verwenden Sie diese, um aus der Liste der Tagesnummern auszuwählendate
[c] datetime stamp [n] (hat nachgestellte Nullen für Stunden, Minuten, Sekunden, Millisekunden)Klicken Sie für Code auf [c] und für Notizen auf [n] .
quelle
JavaScript (ES6),
4948 BytesÜbernimmt Parameter als
f([year, month], day, number)
. Monat und Wochentag (ab Sonntag) werden mit Nullen indiziert. Bearbeiten: 1 Byte dank @Shaggy gespeichert.quelle
0
in JS.TSQL, 106 Bytes
Ausgabe:
Versuch es
quelle
Kotlin ,
13184 Bytes47 Bytes dank nur ASCII-Code und Kommentar.
Eingabe: Jahr, Monat, Wochentag, Woche
Alle ganzen Zahlen von 1 bis maximal in einer einzelnen Zeile. Die Wochentagsnummer ist Sonntag von 1 bis Samstag von 7. Das Hauptprogramm lässt das Jahr 1900 für Datumsklasse verlieren und Monat und Wochentag werden so verschoben, dass sie mit Null anstelle von Eins beginnen, bevor das Lambda aufgerufen wird. Sie können Ihre Argumente in das Eingabetextfeld eingeben, um Ihre eigenen Daten zu testen.
Ausgabe: eine Datumsklasseninstanz. Das Hauptprogramm zeigt das Ergebnis wie folgt an: Sat Mar 09 00:00:00 UTC 2019.
Es gibt eine erweiterte Version mit Kommentaren, die den Code für diejenigen erklären, die mehr erfahren möchten.
Probieren Sie es online!
quelle