Dada una lista de listas, encuentre la lista más corta que sea una sublista contigua de exactamente una lista.
Por ejemplo si tuviéramos
[[1,2,3],
[1,2,3,4],
[2,4,5,6],
[1,2,4,5,6]]
la sublista contigua más corta sería [3,4]
ya que solo aparece en la segunda lista.
Si no hay una sublista contigua única (esto requiere al menos una entrada duplicada), envíe una lista vacía. Aquí hay un ejemplo
[[1,2,3],
[1,2,3],
[1,2]]
Si hay varias sublistas contiguas de tamaño mínimo, puede generar cualquiera de ellas o una lista que las contenga a todas. Por ejemplo, si la entrada fue
[[1,2,3],[2],[1],[3]]
Puede generar cualquiera [1,2]
, [2,3]
o [[1,2],[2,3]]
. Si elige hacer la última opción, puede generar listas singleton para los casos en los que solo hay una solución.
La salida puede aparecer en la misma lista más de una vez, siempre que no aparezca en ninguna otra lista. Por ejemplo
[[1,2,1,2],[2,1]]
debería salir [1,2]
porque[1,2]
es una sublista de la primera lista pero no la segunda, aunque es una sublista de la primera lista de dos maneras diferentes.
Puede tomar como entrada una lista de listas que contienen cualquier tipo siempre que ese tipo tenga más de 100 valores posibles, es decir, no Booleanos.
Esto es código golf por lo que las respuestas se puntuarán en bytes, siendo mejores menos bytes.
Casos de prueba
[[1,1]] : [1]
[[1],[1]] : []
[[1,1],[1]] : [1,1]
fuente
[[1,1]]
Pyth, 15 bytes
Banco de pruebas
Primero, generamos todas las subcadenas de cada lista de entrada con
.:R)Q
. Luego, generamos todos los pedidos posibles, de esos grupos de subcadenas.p
.Ahora viene la parte difícil:
-M
. Esto dobla el-
función sobre cada lista de pedidos. Comienza con la primera lista de subcadenas, luego filtra a todos los ocupantes de todas las demás listas.Luego, los resultados se concatenan, se ordenan por longitud,
[]
se agrega a, y luego se extrae el primer elemento de la lista resultante conh
.Esto sería 4 bytes más corto si pudiera error en ninguna sublista única en lugar de generar una lista vacía.
fuente
hlDs-M.p.:R
es probablemente lo que quiere decir.Pyth - 20 bytes
Test Suite .
fuente
[[1,1]]
.Haskell ,
149128126113 bytesPruébalo en línea!
Ahorró 21 bytes gracias a Wheat Wizard, H.PWiz y Bruce Forte.
Ahorró dos bytes más gracias a H.PWiz.
Guardado 13 bytes gracias a nimi.
EDITAR Esta fue la explicación original:
fuente
i=
al final de su programa porque no es necesario asignar funciones sin puntos de acuerdo con nuestras reglas.foldl1(++)
justoconcat
?(length$filter(==x)l)
podría ser más cortolength(filter(==x)l)
o incluso más cortosum[1|y<-l,y==x]
[]
lo es, pero>>=id
es aún más corto;) También @jferard: puede incorporar muchas funciones (por ejemplof
,g
etc.) ya que solo las usa una vez.Java 8, 251 + 19 = 270 bytes
Una lambda muy asquerosa de, mínimamente,
List<List>
aList
(mejor lanzarlo aFunction<List<List<Integer>>, List<Integer>>
aunque ). Es una solución de fuerza bruta que itera longitudes de fragmentos desde 1 hasta el tamaño de la lista más grande, en cada caso iterando sobre cada fragmento de esa longitud en cada lista y verificando cada fragmento en cada fragmento del mismo tamaño en todas las demás listas.Teme, recolector de basura.
Lambda sin golf
Pruébalo en línea
Java 8, 289 + 45 = 334 bytes
Este es un enfoque más funcional que utiliza flujos. Si hubiera un método
Stream
para reducir a solo elementos que aparecen una vez, esta solución habría superado la anterior. Asignar al mismo tipo que el anterior.Lambda sin golf
Pruébalo en línea
fuente
Jalea , 15 bytes
Pruébalo en línea!
-3 bytes gracias a Jonathan Allan
fuente
ċ1
puede reemplazar conS
?[1, 2, 1]
para entrada[[1,2],[1,2,1],[2,1,1]]
mientras[1,1]
es más corta.05AB1E , 15 bytes
Pruébalo en línea!
fuente
Pyth, 14 bytes
Pruébalo aquí.
fuente