Это марковский процесс. В математике он реализован. Надо задать начальное распределение
initdist (для первой буквы, которые там цифры) и переходную матрицу
transprob. Правила удаления зададим в массиве
pairstodelete. Для случая, когда пары удаляются в конце процесса и длины строки равной 100, можно так:
Код:
initdist = {1/6, 1/6, 1/6, 1/6, 1/6, 1/6};
transprob = {{1/2, 1/2, 0, 0, 0, 0}, {0, 1/2, 1/2, 0, 0, 0}, {0, 0, 1/2, 1/2, 0, 0}, {0, 0, 0, 1/2, 1/2, 0}, {0, 0, 0, 0, 1/2, 1/2}, {1/2, 0, 0, 0, 0, 1/2}};
P = DiscreteMarkovProcess[initdist, transprob];
pairstodelete = {"11", "22"};
data = StringJoin[ToString /@ RandomFunction[P, {1, 100}][[2, 1, 1]]]
result = StringReplace[data, pairstodelete -> ""]
Результат:
Код:
"2233333455666611222333455611233444561233445566612344561233456122222222222345561123456611223345666611"
"33333455666623334556233444561233445566612344561233456123455623456633456666"
Первая строка в ответе это
data длины 100, а вторая получена в результате удаления нужных пар.