Znajdź punkt przecięcia 2 zestawów w notacji Unioned Interval
Biorąc pod uwagę dwa zestawy liczb rzeczywistych opisanych jako suma przedziałów, wypisz opis przecięcia tych dwóch zbiorów jako sumę tego samego rodzaju przedziału.
Zestawy wejściowe zawsze będą się składały ze związków przedziałów, tak że każdy przedział zaczyna się i kończy na innej liczbie całkowitej (tzn. Żaden przedział nie ma miary zero). Jednak różne interwały w tym samym zestawie mogą rozpoczynać się lub kończyć przy tej samej liczbie całkowitej lub nakładać się.
Zbiór wyjściowy musi być również sumą przedziałów, które zaczynają się i kończą na liczbach całkowitych, ale żaden interwał na wyjściu nie może nakładać się na siebie, nawet na jednej liczbie całkowitej.
Dane wejściowe mogą mieć dowolną formę odpowiednią dla wybranego języka, pod warunkiem, że składają się z dwóch list par liczb całkowitych.
Na przykład możesz reprezentować zestaw jako:
[-10,-4]u[1,5]u[19,20]
Lub jako:
[[-10,-4],[1,5],[19,20]]
Lub jako:
[-10,-4;1,5;19,20]
Reprezentacja wyjściowa musi być identyczna z reprezentacją wejściową (z tym wyjątkiem, że jest to tylko jedna lista przedziałów zamiast dwóch).
Przykłady / przypadki testowe:
Wejście:
[[[-90,-4],[4,90]],[[-50,50]]]
Wynik:
[[-50,-4],[4,50]]
Innymi słowy, przecinamy zbiór zawierający wszystkie liczby rzeczywiste od -90 do -4 i wszystkie liczby rzeczywiste od 4 do 90 z zestawem, który zawiera wszystkie liczby rzeczywiste od -50 do 50. Przecięcie jest zbiorem zawierającym wszystkie liczby rzeczywiste od -50 do -4 i wszystkie liczby rzeczywiste od 4 do 50. Bardziej wizualne wyjaśnienie:
-90~~~~~-4 4~~~~~90 intersected with
-50~~~~~~~~50 yields:
-50~-4 4~~50
Wejście:
"[-2,0]u[2,4]u[6,8]
[-1,1]u[3,5]u[5,9]"
Wynik:
"[-1,0]u[3,4]u[6,8]"
Wejście:
[-9,-8;-8,0;-7,-6;-5,-4]
[-7,-5;-1,0;-8,-1]
Wynik:
[-8,0]
Nieprawidłowy wynik (mimo że reprezentuje ten sam zestaw):
[-8,0;-7,-5;-5,0]
Punktacja:
To jest golf golfowy, więc wygrywa najkrótsze źródło w bajtach, potencjalnie zmodyfikowane przez następujący bonus.
Premia:
-15%, jeśli popierasz również dodatnią i ujemną nieskończoność jako granice przedziałów. Możesz wybrać, które tokeny reprezentują te liczby. (I tak, nieskończoność jest liczbą w hiperreałach; P)
źródło
[[[4,90],[-90,-4]],[[-50,50]]]
Odpowiedzi:
Mathematica, 41 bajtów - 15% = 34,85
Mathematica ma wbudowaną funkcję przecinania interwałów.
Przykład:
źródło
Interval
.Haskell, 145 bajtów
Przykład użycia:
[(-2.0,0.0),(2.0,4.0),(5.0,6.0),(6.0,8.0)] # [(-1.0,1.0),(3.0,5.0),(5.0,9.0)]
->[(-1.0,0.0),(3.0,4.0),(5.0,8.0)]
.Jak to działa:
Kładę się „pół” -values
x.5
na liście, bo trzeba odróżnić(1,2),(3,4)
od(1,4)
. Bez nichx.5
oba staną się[1,2,3,4]
, ale zx.5
pierwszym stanie się[1,1.5,2,3,3.5,4]
(którego brakuje2.5
) i drugim[1,1.5,2,2.5,3,3.5,4]
.źródło
Rubinowy, 90 bajtów
Odwzorowuje każdy z dwóch zestawów na płaską tablicę, pobiera zestaw przecięcia tych tablic, a następnie kroi wynik na ciągłe fragmenty i odwzorowuje każdy fragment na pierwszy i ostatni element. Bułka z masłem.
Stosowanie:
źródło
s = [[[1,2],[3,4]], [[1,2],[3,4]]]
? (Moja wersja ruby nie maslice_when
, więc nie mogę się przetestować)[[1, 4]]
.slice_when
Metoda dodano gdzieś Ruby 2.2 myślę.2.2
nie jest na wejścius = [[[1,2],[3,4]], [[1,2],[3,4]]]
, ale na wyjściu[[1, 4]]
.