Eingang:
Ein Date (enthält dd
, MM
und yyyy
). Ein Datumsobjekt oder drei separate Ganzzahlen sind ebenfalls als Eingabe gültig.
Ausgabe:
Jedes Teil ( dd
, MM
und yyyy
) wird einzeln zurückgesetzt und auf das nächste gültige Datum gerundet.
Zum Beispiel (im Format dd-MM-yyyy
):
21-10-2016
wird12-01-6102
Herausforderungsregeln:
- Nur
dd
,MM
,yyyy
gültig ist , aber die Reihenfolge und die getrennten-Symbole , die Sie verwenden , ist Ihre eigene Wahl.
Das sind also einige gültige Format Beispiele:dd-MM-yyyy
;MM/dd/yyyy
;yyyy MM dd
;ddMMyyyy
Etc.
Und das sind einige ungültige Format Beispiele:dd MMM yyyy
;dd-MM-'yy
; etc. - Sie können auch nur ein Datumsobjekt eingeben, wenn Ihre Sprache dies unterstützt, oder drei separate Ganzzahlparameter anstelle der Zeichenfolge, die ein Datum darstellt.
- Bitte geben Sie an, welches Datumsformat Sie verwendet haben! (Und die Eingabe und Ausgabe müssen im selben Format sein.) Es ist auch erlaubt, ein Date-Objekt auszugeben, solange es alle Testfälle und die unten stehende Herausforderungsregel verarbeiten kann.
- Der Übergang vom Julianischen zum Gregorianischen Kalender wird für diese Herausforderung ignoriert. Ist
1582
also nur ein gültiges umgekehrtes Jahr für2851
.
Siehe Challenge-Info / Tipps für alle gültigen Jahre, Monate und Tage. - Da der Februar von keinem anderen Monat umgekehrt werden kann, müssen Sie sich keine Gedanken über Schaltjahre machen.
Alle umgekehrten Jahre, Monate und Tage:
- Das Jahr kann jederzeit problemlos umgekehrt werden und reicht von 0001 (umgekehrt von
1000
) bis 9999 (verbleibend9999
). (Also0000
keine gültige Eingabe, und es gibt auch keine Testfälle dafür.) - Die einzigen Monate, die Sie umgekehrt haben, sind: Januar (umgekehrt von Oktober /
10
); Oktober (umgekehrt ab Januar /01
); November (bleibt November /11
); und Dezember (umgekehrt zu jedem zweiten Monat /02
-09
,12
). - Die einzigen Tage, die Sie rückgängig gemacht haben, sind: 01 (rückgängig gemacht von
10
), 02 (rückgängig gemacht von20
), 03 (rückgängig gemacht von30
), 10 (rückgängig gemacht von01
), 11 (übrig geblieben11
), 12 (rückgängig gemacht von21
), 13 (rückgängig gemacht von31
) , 20 (rückgängig gemacht von02
), 21 (rückgängig gemacht von12
), 22 (übrig geblieben22
), 30 (rückgängig gemacht von03
oder dasselbe wie 31 für November!), 31 (rückgängig gemacht von04
-09
/13
-19
/23
-29
).
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Standardregeln gelten für Ihre Antwort, daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und Rückgabeanweisungen / Ausgabe, vollständige Programme verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle ( dd-MM-yyyy
als Format):
21-07-2016 -> 12-12-6102
12-11-1991 -> 21-11-1991
01-01-2000 -> 10-10-0002
27-08-1875 -> 31-12-5781
18-12-2010 -> 31-12-0102
13-01-1981 -> 31-10-1891
04-11-1671 -> 30-11-1761 // Semi-tricky case, since November has 30 days
28-11-2036 -> 30-11-6302 // Semi-tricky case, since November has 30 days
14-06-1855 -> 31-12-5581
30-10-9999 -> 03-01-9999
01-01-2851 -> 10-10-1582
21-07-2016
wird zurückgesetzt,12-70-6102
was auf gerundet ist12-12-6102
. Nicht sicher, wie Sie das Ergebnis erhalten##-10-6107
..70
, in dem das Jahr zunimmt.10-10-2
im dritten Fall eine gültige Ausgabe?Antworten:
Konvex , 23 Bytes
Die Byteanzahl setzt die CP-1252-Codierung voraus.
E / A-Format ist
dd mm yyyy
.Probieren Sie es online!
Dies ist ein direkter Port meiner CJam-Antwort . Convex basiert stark auf CJam. Der einzige Unterschied besteht in der Verwendung des Convex-
¶
Operators, der die beiden obersten Stapelelemente in eine Liste einschließt und so ein Byte überschreibt[...]
.quelle
CJam, 24 Bytes
E / A-Format ist
dd mm yyyy
.Probieren Sie es online!
Gleiche Byteanzahl, E / A-Format
mm dd yyyy
:Probieren Sie es online!
Erläuterung
Die andere Version funktioniert ähnlich, mit der Ausnahme, dass wir von der Ganzzahl
1230
oder1231
vor der Konvertierung in["12" "30"]
oder beginnen["12" "31"]
.quelle
1=
den umgekehrten Monat abrufen ,:=
prüfen , ob die Ziffern gleich sind, und^
das Ergebnis in 31 zerlegen, wobei 30 für Monat11
und 31 für alles andere angegeben werden.Pyth,
5553464341 Byteswo
❤❤
waren zwei unprintables, jeweils U + 001C und U + 001F.Testsuite.
quelle
Python 3, 82 Bytes
Eine anonyme Funktion, die das Datum über ein Argument als Liste von Zeichenfolgen des Formulars
['dd', 'mm', 'yyyy']
eingibt und das validierte umgekehrte Datum im gleichen Format zurückgibt.Wie es funktioniert
Python vergleicht Zeichen und Zeichenketten anhand ihrer Unicode-Codepunkte. Dies bedeutet, dass jeder Vergleich mit zwei oder mehr Ganzzahlen den gleichen Wert wie der Vergleich mit diesen Ganzzahlen als Zeichenfolgen zurückgibt. Wenn Sie also
min
zwei Ganzzahlen als Zeichenfolgen aufrufen, wird die kleinste Ganzzahl als Zeichenfolge zurückgegeben. Indem der umgekehrte Datumsteil als ein Argument und der Maximalwert als ein anderer verwendet werden, werden Tag und Monat auf den gewünschten Bereich begrenzt. Die Datumsteile werden durch Indizieren mit den Schritten von-1
([::-1]
) umgekehrt , und der Maximalwert für den Monat wird durch Indizieren in eine Liste mit dem Booleschen Ergebnis einer Bedingung von in geändert'31'
,'30'
wenn der Monat November ist.Probieren Sie es auf Ideone
quelle
Dyalog APL ,
3233 BytesI / O ist eine Liste mit drei Zeichenfolgen (
'dd' 'mm' 'yyyy'
).TryAPL , aber beachten Sie, dass
⎕
(Eingabeaufforderung) durch ersetzt wurde⍵
und die gesamte in{
... eingeschlossene Zeile}
, um Online-Tests zu ermöglichen, und⍎
(Ausdruck ausführen) durch2⊃⎕VFI
(Eingabe überprüfen und korrigieren) ersetzt wurde, da die Ausführung von beliebigem Code blockiert ist .quelle
C #
314305299249232223 BytesVielen Dank an @KevinCruijssen für den Hinweis, dass ich meine Variablendeklaration verkürzen konnte, wodurch auch Aliasing-Strings einige Bytes einsparen konnten.
Es wurden 50 Byte für die Speicherung der Umkehrfunktion zur Wiederverwendung und weitere 13 Byte für das Runden und Entfernen der Variablendeklarationen eingespart.
Beim letzten Update wird die Aliasing-Zeichenfolge nicht länger als Byte-Speicher verwendet.
Ungolfed Version:
Teste es hier
quelle
using System.Linq;
und der Funktion ignorieren, das ist also -1 Byte. Außerdemvar n=...;var e=...;
kann stattdessen mit diesem Befehl 1 Byte Golf gespielt werden:string n=...,e=...;
Es ist nicht viel, aber immer noch -2 Byte. ;)Javascript,
10610594 BytesTestsuite (Rev. 3)
Erläuterung
Vielen Dank an @KevinCruijssen für das Speichern von 1 Byte für
b==1
tob<2
. Vielen Dank an @Neil, dass Sie 11 Bytes gespart haben, indem Sie ein ES6-Vorlagenliteral und ein,
Trennzeichen vorgeschlagen haben.quelle
b==1
herabgolfen werden kannb<2
. Es kann nicht mehr 0 sein, da Sie dies bereits!b?
im Code überprüft haben . Es scheint in Ihrer Testsuite zu funktionieren, wenn ich es ändere.join``
anstattjoin('')
beispielsweise -, aber Sie können etwas mehr sparen, indem Sie,
als Trennzeichen verwenden, mit dem Sie+''
die drei Werte miteinander verbinden können.,
als Trennzeichen in der Eingabe?Ruby,
9284 + 1 (-p
Flag) =9385 BytesVerwendet
-
als Trennzeichen.quelle
Pyke, 29 Bytes
Probieren Sie es hier aus!
Ich kann definitiv sehen, dass das Golf ist
quelle
Python 2, 154 Bytes
Übernimmt die Eingabe als Zeichenfolge, daher müssen Anführungszeichen in der Eingabe angegeben werden, z. B. "11-04-2016".
quelle
z=[x[::-1]for x in z];z[1]=min(z[1],'12');z[0]=min(z[0],['31','30'][z[1]=='11']);print"-".join(z)
. Grundsätzlich müssen Sie überhaupt nicht verwendenr
undmin
erledigen eine Menge der Dinge, die Sie tun möchten.05AB1E , 24 Byte
Port von @MartinEnders CJam-Antwort , also auch Ein- und Ausgaben als String im Format
dd MM yyyy
.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle