Palindrome Datumsangaben sind Datumsangaben, die als Palindrome angezeigt werden: Die Ziffernfolge kann auf die gleiche Weise rückwärts wie vorwärts gelesen werden. Für das nordamerikanische Datumsformat (MM / TT / JJJJ) sind die nächsten palindromischen Daten:
02/02/2020
12/02/2021
03/02/2030
Die Herausforderung
Erstellen Sie eine Funktion, die alle palindromischen Daten in einem konsistenten, gemeinsamen Datumsformat (Ihrer Wahl) zurückgibt, das in einen Datumsbereich fällt ( Bearbeiten: einschließlich des Bereichs selbst ).
Regeln
- Um als Palindrom zu gelten, sollten nur die numerischen Zeichen des Datums überprüft werden.
- Das Datum kann in jedem gängigen Format (
MM/DD/YYYY
,DD-MM-YYYY
) angegeben werden, sofern es sowohl für den Monat als auch für den Tag zwei Ziffern und für das Jahr vier Ziffern verwendet und Teile des Datums durch ein Zeichen voneinander getrennt werden. Der Ausgang muss erhalten Trenn - Zeichen (/
,-
usw.). Ihre Funktion muss nur ein bestimmtes Datumsformat verarbeiten. Bitte geben Sie das Format in Ihrer Antwort an. - Wenn mehr als ein Datum zurückgegeben wird, sollten diese durch Kommas oder Zeilenumbrüche getrennt werden.
- Kürzeste Antwort gewinnt!
Beispiel
date_palindrome('05/02/2050', '12/12/2060')
>>>['05/02/2050', '06/02/2060']
code-golf
date
palindrome
Atlasologe
quelle
quelle
DATE
, der ein vermeidet,to_date()
oder muss ich den weniger golffähigen verwendenVARCHAR2
?Antworten:
MATL,
2423 BytesAkzeptiert Eingaben in Form eines String-Arrays mit
{lower, upper}
dem Datumsformat'MM/DD/YYYY'
. Die Ausgabe erfolgt ebenfalls im FormatMM/DD/YYYY
.Probieren Sie es online
Erläuterung
quelle
Bash + GNU-Dienstprogramme,
11684Erfordert eine 64-Bit-Version des Datums für den angegebenen Testfall.
E / A ist im
YYYY-MM-DD
Format. Die Eingabe erfolgt aus zwei Zeilen stdin, zErläuterung
set
speichert die Datumsbefehlsvorlage, damit über den$@
Parameter darauf zugegriffen werden kanndate -uf- +%s
Konvertiert Endpunktdaten in die Anzahl der Sekunden seit der Unix-Epochejot
interpoliert dies, um eine Liste von Sekunden aus der Epoche zu erhalten, eine pro Tag, denen jeweils ein Präfix vorangestellt ist@
date -uf- +%F
formatiert jeden Listeneintrag alsYYYY-MM-DD
sed
prüft auf Palindrome:h
Speichern Sie die Eingabezeile im Haltepuffer:
definiere "unbenanntes" Etiketts/-|^(.)(.*)\1$/\2/
Wenn ein Bindestrich gefunden wird, entfernen Sie ihn, oder wenn das erste und das letzte Zeichen übereinstimmen, entfernen Sie siet
Wenn oben eine Übereinstimmung gefunden wurde, springen Sie zurück zum unbenannten Etikett/./d
Wenn noch Zeichen übrig sind, ist die Zeile kein Palindrom. Löschen Sie sie und fahren Sie mit der nächsten Zeile fortg
Wenn wir hier sind, ist keine Zeile gelöscht worden. Die Zeile muss also ein Palindrom gewesen sein. Holen Sie sich die Zeile aus dem Haltepuffer zurück und zeigen Sie sie implizit an.quelle
Python 2, 197 Bytes
Ein Byte gespart dank @cat!
Probieren Sie es hier aus!
Eingabe- und Ausgabeformat ist
YYYY-MM-DD
. Erste Absichtsebene sind Leerzeichen, zweite Ebene sind Tabulatoren.Hier ist nichts Besonderes los. Verwendet einen gewissen
exec
Missbrauch, um die Eingabe indate
Objekte zu konvertieren, indem die Datumszeichenfolge aufgespalten-
und die Liste in dendate
Konstruktor aufgeteilt wird. Dann iterieren wir einfach über alle Daten in ihrem Inklusivbereich und drucken diejenigen, die palindrom sind.quelle
from datetime import*
in der ersten Zeile ein Byte zu speichern`a+timedelta(d)`
wiestr(a+timedelta(d))
?repr
entspricht in der Regel nurstr
primitiven Datentypen. Fürdate
Objekte bekomme ichdatetime.date(2012, 12, 12)
zum Beispiel.PowerShell v2 +, 127 Byte
Übernimmt Eingaben als Befehlszeilenargumente
$args
imMM/DD/YYYY
(oder ähnlichen) Format und setzt sie als[datetime]
Array um, speichert sie in$a
und$b
. Das ist der Einrichtungsschritt derfor
Schleife. Die Bedingung ist so lange, wie sie$a
kleiner oder gleich ist$b
.Bei jeder Iteration setzen wir
$c
gleich eine-f
ormattierte Zeichenfolge desyyyyMMdd
Stils, basierend auf$a
. Wir vergleichen dann, ob dies-eq
tatsächlich$c
umgekehrt ist (mithilfe eines Array-Join-Tricks). In diesem Fall wird$a
im richtigen Format ausgegeben. In jedem Fall erhöhen wir uns$a
mit.AddDays(1)
, um zum nächsten Tag überzugehen.Beispiel
quelle
Julia, 132 Bytes
Dies ist eine Funktion, die zwei Zeichenfolgen akzeptiert und ein Array von Zeichenfolgen zurückgibt.
Ungolfed:
Probieren Sie es online!
quelle
JavaScript (ES6),
159 bis154 ByteI / O im ISO-Format. Ungolfed:
quelle
TSQL, 88 Bytes
Verwenden des ISO8601-Formats für das Datum (JJJJ-MM-TT)
Geige
quelle
Java 7,
436435416 Bytes * seufz .. *Eingabe- und Ausgabeformat:
dd-MM-yyyy
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
Oracle 11: SQL: 246 Bytes (hey, zumindest habe ich Java geschlagen: P lol)
Ausgabe:
In lesbarem Format:
Erklärt:
Habe heute etwas über die REVERSE-Funktion gelernt :)
quelle
C #
9794 BytesC # lambda (
Action
), wobei EingabenDateTime
und die Ausgabe mit der.Dump()
Methode gedruckt werden (@ EvilFontis Trick ).C #,
115112 BytesC # lambda (
Func
), wo EingabenDateTime
und Ausgaben sind, ist astring
.Code:
Probiere sie online aus!
quelle
VBA,
240193 BytesDas wars in einem verständlichen Format. Testfall:
Ohne so viel Redundanz:
quelle
Javascript (mit externer Bibliothek) (158 Bytes)
Link zu lib: https://github.com/mvegh1/Enumerable
Code-Erklärung: Ok, ich habe hier endlich mal ein bisschen Code-Golf gespielt. Die Eingaben a, b sind also Datumsobjekte. Erstellen Sie einen Bereich von Ganzzahlen von a bis b, wobei a und b in Ganzzahlen umgewandelt werden und der Abstand zwischen den Werten im Bereich 86400000 beträgt, dh die Anzahl der Ticks an einem Tag. Ordnen Sie jeden Wert im Bereich einem Datumsobjekt zu. Filtern Sie diesen Bereich nach dem Prädikat, das palindromische Daten darstellt. Die Logik, um zu bestimmen, dass dies einfach ist ... Konvertieren Sie die JSON-Zeichenfolgendarstellung des aktuellen Datumsobjekts mithilfe der Bibliothek in ein Zeichenarray, filtern Sie die nicht numerischen Einträge heraus und nehmen Sie nur die ersten 8 Werte (da dies yyyyMMdd wäre) ) und speichere das in der Variablen z und überprüfe dann, ob z gleich z Umgekehrt ist. Zuletzt kehren Sie zum nativen JS-Array zurück
Edit: Rasiert 2 Bytes durch Entfernen unnötiger Parens.
quelle
Java, 269 Bytes
Ungolfed:
quelle