Как я могу найти возможные комбинации, которые формируют данный ввод

У меня есть такой список, скажем, например, имя списка output у которого есть:

[[[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]]]

И у меня есть такой вклад, скажем, input является:

ogodtsneeencs

Теперь, очевидно, input может быть сформирован из output, Я попробовал subsequences() из output найти возможные комбинации, которые образуют inputНо дело в том, что это не сработает для всех input,

Может кто-нибудь сказать мне, как я могу найти комбинации output это будет равно input? И, возможно, хранить в некоторых list,

Заранее спасибо.

1 ответ

Решение

Учитывая только этот небольшой набор тестовых данных, которые вы предоставили, я придумал следующее:

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
}

Который распечатывает:

ogodtsneeencs
tsneeencsogod

Без дополнительных данных трудно сказать, правильно ли это, но это может быть хорошей отправной точкой для вас

редактировать

Обновлено, чтобы вернуть все перестановки действительных токенов

Другие вопросы по тегам