Podano listę zakresów dat r
jako dane wejściowe, wyjściowe lub zwracające wszelkie zakresy, których nie znaleziono w r
.
Na potrzeby tego przykładu dane wejściowe będą miały YYYY-MM-DD
format.
Załóżmy, że masz trzy zakresy dat:
[2019-01-01, 2019-02-01]
[2019-02-02, 2019-04-05]
[2019-06-01, 2019-07-01]
Widać, że istnieje przerwa między 2019-04-05
i 2019-06-01
.
Wynik będzie taki: [2019-04-06, 2019-05-31]
Zasady
- Dane wejściowe i wyjściowe mogą mieć dowolny rozsądny format daty lub kolekcji, o ile są spójne.
- Załóż, że dane wejściowe nie są uporządkowane.
- Twój zakres dat nie musi być
[latest, earliest]
, ale musi być zgodny z regułą 2. - Załóżmy, że dane wejściowe nie pokrywają się
Przypadki testowe:
Wejście: [[2019-01-01, 2019-02-01],[2019-02-02, 2019-04-05],[2019-06-01, 2019-07-01]]
Wynik: [[2019-04-06, 2019-05-31]]
Wejście: [[2019-01-01, 2019-02-01],[2018-02-02, 2018-04-05],[2019-06-01, 2019-07-01]]
Wynik: [[2018-04-06, 2018-12-31], [2019-02-02, 2019-05-31]]
Wejście: [[2019-01-01, 2019-02-01],[2019-02-02, 2019-03-02],[2019-03-03, 2019-07-01]]
Wynik: []
Wejście: [[2019-01-01, 2019-02-01], [2019-11-02, 2019-11-20]]
Wynik: [[2019-02-02, 2019-11-01]]
Wejście: [[2019-01-01, 2019-02-01],[2019-02-03, 2019-04-05]]
Wyjście: [[2019-02-02, 2019-02-02]]
lub[[2019-02-02]]
YYYY-MM-DD
ponieważ obecny format jest obcy dla wielu osób, a jeszcze trudniejszy do przeanalizowania ze względu na użycie małych dni miesiąca ≤12.Odpowiedzi:
APL (Dyalog Extended) ,
282524 bajtówAnonimowa ukryta funkcja prefiksu. Argument i wynik to 2-kolumnowe macierze liczb dni od epoki, każdy wiersz reprezentuje zakres.
Wypróbuj online! Funkcja
In
preprocesora konwertuje z listy par list 3-elementowych (daty w kolejności ISO) na 2-kolumnową macierz IDN, międzynarodowe numery dni (dni od 1899-12-31). FunkcjaOut
postprocesora konwertuje z macierzy IDN na macierz list 3-elementowych.∧
sortuj rzędy rosnąco1⌽
cyklicznie obracaj daty o jeden krok w lewo,⍢,
gdy jesteś zniszczony (spłaszczony) - następnie przekształć z powrotem do pierwotnego kształtu1 ¯1+
dodaj jeden i jeden ujemny,⍤1
używając tej listy dla każdego wiersza∘
wyniku{
…}
następującej lambdy:⍵
argument-⍨/
odejmij datę po lewej stronie od daty po prawej stronie,1<
maskę w wierszach, gdzie różnice przekraczają jeden (tzn. gdy zakresy nie sąsiadują)⍵⌿⍨
filtr rzędy przy tej masceźródło
C # (interaktywny kompilator Visual C #) , 108 bajtów
Wysyła przez wydruk w formacie
DD/MM/YYYY 12:00:00 AMDD/MM/YYYY 12:00:00 AM
. Powoduje wyjątek IndexOutOfRange, który jest w porządku zgodnie z meta konsensusem.Wypróbuj online!
Jeśli weźmiemy wkład w postaci dni od epoki unixu, możemy sprowadzić to do ...
83 bajty
Wypróbuj online!
Możemy zagrać w golfa jeszcze bardziej z
/u:System.Array
flagą, ponieważ ...78 bajtów
Wypróbuj online!
źródło
Perl 5, 130 bajtów
TIO
źródło
Bash, 125 bajtów
TIO
źródło
Perl 6 , 46 bajtów
Wypróbuj online!
Pobiera listę
Date
par.źródło
PHP,
208 197 190177 bajtówgruby, gruby siedział na ścianie ... choć nowe podejście miało całkiem spory potencjał golfowy.
funkcja przyjmuje tablicę zakresów [początek, koniec] w formacie ISO, drukuje interwały odstępów. Wypróbuj online .
awaria
źródło
Galaretka , 13 bajtów
Galaretka (obecnie) nie ma wbudowanych dat, więc korzysta z dni od epoki.
Lista wejściowa zakresów (par liczb całkowitych) może być w kolejności mieszanej i kierunkach mieszanych.
Wynikiem jest lista rosnących zakresów w kolejności rosnącej.
Wypróbuj online!(formaty stopek, aby wyświetlić pustą listę jako
[]
)W jaki sposób?
Uwaga: Opiera się to na zapewnieniu, że „dane wejściowe nie nakładają się”, zgodnie z zasadami.
źródło
C # (interaktywny kompilator Visual C #) , 103 bajty
Wypróbuj online!
Dane wejściowe to lista krotek daty początkowej / końcowej. Wysyła każdy brakujący zakres do STDOUT.
źródło
R , 88 bajtów
Wypróbuj online!
Pobiera to ramkę danych zakresów dat jako dane wejściowe i wysyła ramkę danych z brakującymi zakresami. Jestem dość pewien, że to może być grałem więcej, ale wpadłem na problemy z
c
,cbind
i innych odpędzania klasy Date.źródło