Cómo puedo encontrar las posibles combinaciones que forman la entrada dada
-
26-10-2019 - |
Pregunta
Tengo una lista como esta, por ejemplo, el nombre de la lista es output
que tiene:
[[[o, g], [g, o]], [[o, g, o, d]], [[o, d]], [[t, s, n, e, e, e, n, c, s]], [[t, s, n, e, e]], [[e, n, c, s]]]
Y tengo una opinión como esta, digamos input
es:
ogodtsneeencs
Ahora obviamente, el input
se puede formar desde output
. Probé el subsequences()
de output
Para encontrar las posibles combinaciones que forman el input
, pero la cosa es que no funcionará para todos los input
.
¿Alguien puede decirme cómo puedo encontrar las combinaciones de output
que será igual a input
? Y posiblemente almacenar en algunos list
.
Gracias por adelantado.
Solución
Dado solo este pequeño conjunto de datos de prueba que ha proporcionado, se me ocurrió esto:
def list = [[['o', 'g'], ['g', 'o']], [['o', 'g', 'o', 'd']], [['o', 'd']], [['t', 's', 'n', 'e', 'e', 'e', 'n', 'c', 's']], [['t', 's', 'n', 'e', 'e']], [['e', 'n', 'c', 's']]]
// For every combination of the lists
def result = list.combinations().collect { combination ->
// Join them into strings
combination*.join().with { stringcombo ->
// Then find every string in the list
stringcombo.findAll { word ->
// Which is not a substring of another string in the list
(stringcombo - word).every { it.indexOf( word ) == -1 }
}
}.permutations()*.join() // Then get every String permutation of these remaining strings
}.flatten().unique() // and get them into a single unique list
// And print them out
result.each {
println it
}
Que imprime:
ogodtsneeencs
tsneeencsogod
Sin más datos, es difícil saber si es correcto, pero podría ser un buen lugar de inicio para usted
editar
Actualizado para devolver todas las permutaciones de los tokens válidos