Как я могу найти возможные комбинации, которые формируют данный ввод - PullRequest
1 голос
/ 19 октября 2011

У меня есть такой список, скажем, например, имя списка 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 Ответ

4 голосов
/ 19 октября 2011

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

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

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

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

Обновлено для возврата всех перестановок действительных токенов

...