Geben Sie eine Liste von Datumsbereichen r
als Eingabe, Ausgabe oder Rückgabe von Bereichen ein, die in nicht gefunden wurden r
.
In diesem Beispiel erfolgt die Eingabe im YYYY-MM-DD
Format.
Angenommen, Sie haben drei Datumsbereiche:
[2019-01-01, 2019-02-01]
[2019-02-02, 2019-04-05]
[2019-06-01, 2019-07-01]
Sie können sehen, dass es eine Lücke zwischen 2019-04-05
und gibt 2019-06-01
.
Die Ausgabe wird diese Lücke sein: [2019-04-06, 2019-05-31]
Regeln
- Die Eingabe und Ausgabe kann in jedem vernünftigen Datums- oder Erfassungsformat erfolgen, sofern dies konsistent ist.
- Angenommen, der Eingang ist nicht geordnet.
- Ihr Datumsbereich muss nicht sein
[latest, earliest]
, er muss jedoch Regel 2 entsprechen. - Angenommen, die Eingabe enthält keine überlappenden Daten
Testfälle:
Eingang: [[2019-01-01, 2019-02-01],[2019-02-02, 2019-04-05],[2019-06-01, 2019-07-01]]
Ausgabe: [[2019-04-06, 2019-05-31]]
Eingang: [[2019-01-01, 2019-02-01],[2018-02-02, 2018-04-05],[2019-06-01, 2019-07-01]]
Ausgabe: [[2018-04-06, 2018-12-31], [2019-02-02, 2019-05-31]]
Eingang: [[2019-01-01, 2019-02-01],[2019-02-02, 2019-03-02],[2019-03-03, 2019-07-01]]
Ausgabe: []
Eingang: [[2019-01-01, 2019-02-01], [2019-11-02, 2019-11-20]]
Ausgabe: [[2019-02-02, 2019-11-01]]
Eingang: [[2019-01-01, 2019-02-01],[2019-02-03, 2019-04-05]]
Ausgabe: [[2019-02-02, 2019-02-02]]
oder[[2019-02-02]]
YYYY-MM-DD
da das aktuelle Format vielen Menschen fremd ist und das Parsen aufgrund der Verwendung von kleinen Tagen im Monat ≤ 12 noch schwieriger wird.Antworten:
APL (Dyalog Extended) ,
282524 BytesAnonyme implizite Präfixfunktion. Argument und Ergebnis sind zweispaltige Matrizen von Tageszahlen seit einer Epoche, wobei jede Zeile einen Bereich darstellt.
Probieren Sie es online! Die
In
Vorverarbeitungsfunktion konvertiert aus einer Liste von Paaren von Listen mit drei Elementen (Daten in ISO-Reihenfolge) eine zweispaltige Matrix von IDNs (International Day Numbers) (Tage seit dem 31.12.18999). DieOut
Postprozessorfunktion konvertiert von einer Matrix von IDNs in eine Matrix von Listen mit drei Elementen.∧
Zeilen aufsteigend sortieren1⌽
Drehen Sie die Datteln zyklisch um einen Schritt nach links,⍢,
während Sie sie geglättet haben, und formen Sie sie anschließend wieder in ihre ursprüngliche Form zurück1 ¯1+
Fügen Sie eine und eine negative unter⍤1
Verwendung dieser Liste für jede Zeile∘
des Ergebnisses von{
...}
dem folgenden Lambda hinzu:⍵
Das Argument-⍨/
subtrahieren das Datum der linken Hand vom Datum der rechten Hand, zeilenweise1<
Maske, bei der Unterschiede einen⍵⌿⍨
Filter überschreiten (dh bei denen Bereiche nicht benachbart sind) die Zeilen von dieser Maskequelle
C # (Visual C # Interactive Compiler) , 108 Byte
Ausgabe durch Drucken im Format
DD/MM/YYYY 12:00:00 AMDD/MM/YYYY 12:00:00 AM
. Verursacht eine IndexOutOfRange-Ausnahme, die gemäß Metakonsens in Ordnung ist.Probieren Sie es online!
Wenn wir Eingaben in Form von Tagen seit der Unix-Epoche machen, können wir dies auf ...
83 Bytes
Probieren Sie es online!
Wir können das mit der
/u:System.Array
Flagge noch weiter nach unten spielen , denn ...78 Bytes
Probieren Sie es online!
quelle
Perl 5, 130 Bytes
TIO
quelle
Bash, 125 Bytes
TIO
quelle
Perl 6 , 46 Bytes
Probieren Sie es online!
Nimmt eine Liste von
Date
Paaren.quelle
PHP
208, 197, 190177 BytesHunky Chunky saß an einer Wand ... obwohl der neue Ansatz einiges an Golfpotential hatte.
Funktion nimmt Array von Bereichen [Start, Ende] im ISO-Format, druckt Lückenintervalle. Probieren Sie es online aus .
Nervenzusammenbruch
quelle
Gelee , 13 Bytes
Jelly hat (derzeit) keine eingebauten Daten, daher werden Tage seit der Epoche verwendet.
Die Eingabeliste der Bereiche (Paare von ganzen Zahlen) kann in gemischter Reihenfolge und in gemischten Richtungen vorliegen.
Das Ergebnis ist eine Liste aufsteigender Bereiche in aufsteigender Reihenfolge.
Probieren Sie es online! (Fußzeilenformate, um eine leere Liste als
[]
)Wie?
Hinweis: Dies beruht auf der Gewissheit, dass "keine überlappenden Daten in der Eingabe vorhanden sind", wie in den Regeln angegeben.
quelle
C # (Visual C # Interactive Compiler) , 103 Byte
Probieren Sie es online!
Die Eingabe ist eine Liste von Start- / Enddatumstupeln. Gibt jeden fehlenden Bereich an STDOUT aus.
quelle
R 88 Bytes
Probieren Sie es online!
Dies nimmt einen Datenrahmen von Datumsbereichen als Eingabe und gibt einen Datenrahmen mit den Bereichen aus, die fehlen. Ich bin mir ziemlich sicher, dass dies mehr Golf sein könnte, aber ich bin auf Probleme gestoßen
c
,cbind
und andere, die die Date-Klasse strippen.quelle