Bei einer gegebenen Liste von Listen finden Sie die kürzeste Liste, die eine zusammenhängende Unterliste von genau einer Liste ist.
Zum Beispiel, wenn wir hatten
[[1,2,3],
[1,2,3,4],
[2,4,5,6],
[1,2,4,5,6]]
Die kürzeste zusammenhängende Unterliste wäre, [3,4]
da sie nur in der zweiten Liste erscheint.
Wenn es keine eindeutige zusammenhängende Unterliste gibt (dies erfordert mindestens einen doppelten Eintrag), geben Sie eine leere Liste aus. Hier ist ein Beispiel
[[1,2,3],
[1,2,3],
[1,2]]
Wenn mehrere zusammenhängende Unterlisten von minimaler Größe vorhanden sind, können Sie eine beliebige oder eine alle enthaltende Liste ausgeben. Zum Beispiel, wenn die Eingabe war
[[1,2,3],[2],[1],[3]]
Sie könnten Ausgang entweder [1,2]
, [2,3]
oder [[1,2],[2,3]]
. Wenn Sie die letztere Option wählen, können Sie Singleton-Listen für die Fälle ausgeben, in denen es nur eine Lösung gibt.
Die Ausgabe kann in derselben Liste mehrmals vorkommen, solange sie in keiner anderen Liste enthalten ist. Beispielsweise
[[1,2,1,2],[2,1]]
sollte ausgegeben werden, [1,2]
weil [1,2]
es sich um eine Unterliste der ersten Liste handelt, aber nicht um die zweite, obwohl es sich auf zwei verschiedene Arten um eine Unterliste der ersten Liste handelt.
Als Eingabe können Sie eine Liste von Listen verwenden, die einen beliebigen Typ enthalten, sofern dieser Typ mehr als 100 mögliche Werte aufweist, dh keine Booleschen Werte.
Dies ist Codegolf, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Testfälle
[[1,1]] : [1]
[[1],[1]] : []
[[1,1],[1]] : [1,1]
quelle
[[1,1]]
Pyth, 15 Bytes
Testsuite
Zunächst generieren wir alle Teilstrings jeder Eingabeliste mit
.:R)Q
. Dann generieren wir alle möglichen Ordnungen dieser Teilzeichenfolgengruppen.p
.Nun zum kniffligen Teil:
-M
. Dies faltet die-
Funktion über jede Bestellliste. Es beginnt mit der ersten Teilzeichenfolgenliste und filtert dann alle Insassen aller anderen Listen heraus.Dann werden die Ergebnisse verkettet, geordnet nach Länge, a
[]
angehängt und dann das erste Element der resultierenden Liste mit extrahierth
.Dies wäre 4 Bytes kürzer, wenn ich auf keinen eindeutigen Unterlisten Fehler machen könnte, anstatt eine leere Liste auszugeben.
quelle
hlDs-M.p.:R
ist wahrscheinlich das, was er meint.Pyth - 20 Bytes
Test Suite .
quelle
[[1,1]]
.Haskell ,
149128126113 BytesProbieren Sie es online!
Dank Wheat Wizard, H.PWiz und Bruce Forte 21 Bytes gespart.
Zwei weitere Bytes dank H.PWiz gespeichert.
13 Bytes dank nimi gespart.
BEARBEITEN Dies war die ursprüngliche Erklärung:
quelle
i=
das Ende Ihres Programms abzählen , da punktfreie Funktionen nicht gemäß unseren Regeln zugewiesen werden müssen.foldl1(++)
einfachconcat
?(length$filter(==x)l)
könnte kürzerlength(filter(==x)l)
oder sogar kürzer sein alssum[1|y<-l,y==x]
[]
davon ist es aber>>=id
noch kürzer;) Auch @jferard: Du kannst viele Funktionen (z. B. etc.) einbindenf
,g
da du sie nur einmal verwendest.Java 8, 251 + 19 = 270 Bytes
Ein sehr grobes Lambda von, minimal,
List<List>
bisList
(am besten, um es zu werfen,Function<List<List<Integer>>, List<Integer>>
obwohl). Es ist eine Brute-Force-Lösung, die Chunk-Längen von 1 bis zur Größe der größten Liste iteriert. Dabei wird jeweils jeder Chunk dieser Länge in jeder Liste durchlaufen und jeder solche Chunk mit jedem Chunk gleicher Größe in jeder anderen Liste verglichen.Fürchte mich, Müllmann.
Ungolfed Lambda
Probieren Sie es online
Java 8, 289 + 45 = 334 Bytes
Dies ist ein funktionalerer Ansatz, bei dem Streams verwendet werden. Wenn es eine Methode gäbe
Stream
, die auf nur einmal auftretende Elemente reduziert, hätte diese Lösung die oben beschriebene übertroffen. Weisen Sie den gleichen Typ wie oben zu.Ungolfed Lambda
Probieren Sie es online
quelle
Gelee , 15 Bytes
Probieren Sie es online!
-3 Bytes dank Jonathan Allan
quelle
ċ1
durch ersetzt werdenS
?[1, 2, 1]
zur Eingabe gedruckt,[[1,2],[1,2,1],[2,1,1]]
solange sie[1,1]
kürzer ist.05AB1E , 15 Bytes
Probieren Sie es online!
quelle
Pyth, 14 Bytes
Probieren Sie es hier aus.
quelle