Na podstawie listy list znajdź najkrótszą listę, która jest ciągłą podlistą dokładnie jednej listy.
Na przykład, gdybyśmy mieli
[[1,2,3],
[1,2,3,4],
[2,4,5,6],
[1,2,4,5,6]]
najkrótsza ciągła podlista byłaby, [3,4]
ponieważ pojawia się tylko na drugiej liście.
Jeśli nie ma unikalnej ciągłej podlisty (wymaga to co najmniej jednej zduplikowanej pozycji), wypisz pustą listę. Oto przykład
[[1,2,3],
[1,2,3],
[1,2]]
Jeśli istnieje wiele sąsiadujących podlist o minimalnym rozmiarze, możesz wypisać dowolną z nich lub listę zawierającą wszystkie. Na przykład, jeśli dane wejściowe były
[[1,2,3],[2],[1],[3]]
Możesz wyprowadzić albo [1,2]
, [2,3]
albo [[1,2],[2,3]]
. Jeśli wybierzesz tę drugą opcję, możesz wypisać listy singletonów dla przypadków, w których istnieje tylko jedno rozwiązanie.
Dane wyjściowe mogą występować na tej samej liście więcej niż jeden raz, o ile nie występują na żadnej innej liście. Na przykład
[[1,2,1,2],[2,1]]
powinien wypisywać, [1,2]
ponieważ [1,2]
jest podlistą pierwszej listy, ale nie drugiej, mimo że jest podlistą pierwszej listy na dwa różne sposoby.
Jako dane wejściowe możesz wziąć listę zawierającą dowolny typ, o ile ten typ ma więcej niż 100 możliwych wartości, tj. Brak boolean.
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Przypadki testowe
[[1,1]] : [1]
[[1],[1]] : []
[[1,1],[1]] : [1,1]
źródło
[[1,1]]
Pyth, 15 bajtów
Zestaw testowy
Najpierw generujemy wszystkie podciągi z każdej listy danych wejściowych za pomocą
.:R)Q
. Następnie generujemy wszystkie możliwe uporządkowania tych grup podciągów.p
.Teraz najtrudniejsza część:
-M
. Spowoduje to złożenie-
funkcji na każdą listę zamówień. Zaczyna się od pierwszej listy podciągów, a następnie odfiltrowuje wszystkich użytkowników wszystkich pozostałych list.Następnie wyniki są łączone, uporządkowane według długości,
[]
dołączane jest a, a następnie wypakowywany jest pierwszy element listy wynikowejh
.Byłbym o 4 bajty krótszy, gdybym mógł popełnić błąd na żadnej unikalnej liście podrzędnej zamiast wypisać pustą listę.
źródło
hlDs-M.p.:R
jest prawdopodobnie tym, co ma na myśli.Pyth - 20 bajtów
Pakiet testowy .
źródło
[[1,1]]
.Haskell ,
149128126113 113 bajtówWypróbuj online!
Zaoszczędzono 21 bajtów dzięki Wheat Wizard, H.PWiz i Bruce Forte.
Zaoszczędź dwa kolejne bajty dzięki H.PWiz.
Zaoszczędź 13 bajtów dzięki nim.
EDYCJA To było oryginalne wyjaśnienie:
źródło
i=
na końcu programu, ponieważ funkcje bez punktów nie muszą być przypisywane zgodnie z naszymi zasadami.foldl1(++)
tylkoconcat
?(length$filter(==x)l)
może być krótszylength(filter(==x)l)
lub nawet krótszy jakosum[1|y<-l,y==x]
[]
jest, ale>>=id
jest jeszcze krótszy;) Również @jferard: Można inline wiele funkcji (np.f
,g
Itd.), Gdyż tylko ich użyć tylko raz.Java 8, 251 + 19 = 270 bajtów
Bardzo obrzydliwa lambda od, minimalnie,
List<List>
doList
(Function<List<List<Integer>>, List<Integer>>
chociaż najlepiej ją rzucić ). Jest to rozwiązanie brutalnej siły, które iteruje długości fragmentu od 1 do wielkości największej listy, w każdym przypadku iteruje każdy fragment tej długości na każdej liście i sprawdza każdy taki fragment z każdym kawałkiem o równej wielkości na każdej innej liście.Obawiaj się, śmieciarz.
Niegolfowana lambda
Wypróbuj online
Java 8, 289 + 45 = 334 bajty
Jest to bardziej funkcjonalne podejście wykorzystujące strumienie. Gdyby istniała metoda
Stream
zredukowania do tylko elementów, które pojawiają się raz, to rozwiązanie pokonałoby powyższy. Przypisz do tego samego typu jak powyżej.Niegolfowana lambda
Wypróbuj online
źródło
Galaretka , 15 bajtów
Wypróbuj online!
-3 bajty dzięki Jonathanowi Allanowi
źródło
ċ1
zastąpićS
?[1, 2, 1]
do wprowadzenia,[[1,2],[1,2,1],[2,1,1]]
gdy[1,1]
jest krótsze.05AB1E , 15 bajtów
Wypróbuj online!
źródło
Pyth, 14 bajtów
Wypróbuj tutaj.
źródło