Страницы: 1
RSS
Необходимы уникальные строки в массиве из 13 имен и 13 фамилий
 
Помогите плз, наставьте на путь истинный.
Есть 13 имен и  13 букв с которых начинаются фамилии.
Необходимо получить таблицу состоящую из 13 столбцов и 2000 строк. При этом в строке должны быть все 13 имен с любыми буквами.(имена в строке не должны дублироваться, буквы могут)
Строки должны быть все уникальны.
Изменено: perentrov - 25.02.2016 00:57:05
 
В картинку вставить или ознакомитесь с правилами и покажете файл-пример в Excel?
 
приложил файл
 
Почему 2000?
Как вариант на 13 строк:
Код
for each l in [p1:p13]
i=i+1
for each c in [b1:n1]
c.offset(i)=c.value & " " & l.value
next
next
 
2000 потому что нужно много.
комбинаторно имена могут в любой последовательности стоять(главное чтобы все они в строке присутствовали), а буквы могут как угодно комбинироваться(то есть могут все А быть или любой порядок).
Важно чтобы строки были уникальными
 
Копируйте формулу вниз столько сколько надо: 2.000, 10.000, 300.000 короче пока строки на листе не закончатся, комбинаций реально больше:) См. вложение.
KL
 
по факту все правильно, но нельзя ли добиться как-то большего рандома? думал растяну до 50000 и выберу рандомно 2000 строк, но там даже близко все фамилии не задействованы. растягивал до 100000+ и все равно. понятно, что комбинаторно там решений "10 в большой степени". Скажем так, хотелось бы получить максимально уникальные строки.
Изменено: perentrov - 25.02.2016 11:15:24
 
Не очень понятно, что такое "максимально уникальные". Строки либо уникальные либо нет. В данном решении они все уникальны. Если не озвученное ранее требование носит эстетический характер, то попробуйте добавить статическую поправку к строке, типа (10000000000000+СТРОКА($A1)-1).
KL
 
Просто сколько не добавляй в вашем варианте нету вариантов смены порядка имен по ячейкам. всегда в первом столбце вася. Под "максимально уникальными" имею ввиду чтобы строки отличались не 1 ячейкой, а максимальным их количеством. Пример того что нужно - верхние 2 строки на приложенной картинке, то есть по сути рандомная вставка имен и фамилий, но обязательное наличие всех имен в строке.
 
Так лучше?

=ИНДЕКС($B$1:$Ч$1;1+ОСТАТ(СТОЛБЕЦ()+СТРОКА();13))&" "&ИНДЕКС($P$1:$P$13;1+ОСТАТ(ЦЕЛОЕ((10000000000000+СТРОКА($A1)-1)/(13^(СТОЛБЕЦ(A$1)-1)));13))
Изменено: KL - 25.02.2016 12:27:26
KL
 
Спасибо большое, взял первую часть вашей формулы, а после пробела добавил СЛУЧМЕЖДУ($P$1;$P$13) и тем самым получил рандом, после проверил на уникальность строки и удалил дубли, оставшиеся 2000 то что нужно! Плюс можно руками менять порядок имен и будет вообще отлично. Большое спасибо
 
Если б знать заранее, что:

- эстетика превыше всего
- задача одноразовая
- ручная доработка допустима

я бы сразу предложил подобное примитивное решение, а не изучал бы учебники по комбинаторике :)
KL
 
Цитата
KL написал: а не изучал бы учебники по комбинаторике
Ну новые знания лишними не бывают. Пригодится :)
 
Это верно :)
KL
Страницы: 1
Наверх