Это намеренно не полный ответ, но это очень хорошее начало.
Если у вас есть n
буквы, есть n + 1
возможные позиции для точек и 2^(n + 1)
, поскольку каждая позиция может иметь либо точку, либо отсутствие точки. Вам просто нужно перебрать эти возможности. Мы начнем с генерации этих 2^(n + 1)
точечных образцов, используя expand.grid
:
input = "abc"
n = nchar(input)
dots = do.call(expand.grid, rep(list(c("", ".")), n + 1))
dots
# Var1 Var2 Var3 Var4
# 1
# 2 .
# 3 .
# 4 . .
# 5 .
# 6 . .
# 7 . .
# 8 . . .
# 9 .
# 10 . .
# 11 . .
# 12 . . .
# 13 . .
# 14 . . .
# 15 . . .
# 16 . . . .
Я дам вам закончить - разбить вашу входную строку на отдельные буквы strsplit(input, "")
и использовать paste0
или аналогичный для объединения букв с точками.
Вы говорите, что ваш ввод может иметь длину до 30. В результате будет 2 ^ 31 = 2 147 483 648 комбинаций, что довольно много. Вы можете столкнуться с ограничениями памяти, делая это в R, в зависимости от вашей машины. Я бы подумал о том, нужно ли вам действительно генерировать все комбинаций. Обычно лучше подходить к использованию итераторов (см., Например, пакет iterators
). Это может помочь вам создать любую произвольную комбинацию, которую вы хотите, без необходимости генерировать каждую комбинацию.