Зачем изобретать ВЕЛОСИПЕД или как переставить символы ?

20.06.11

Разработка - Математика и алгоритмы

Как написать алгоритм перестановки всех символов в строке, чтобы
получить все уникальные (возможные) значения перестановок (одинаковые символы считать за один).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Перестановка.ert
.ert 21,50Kb
71
71 Скачать (1 SM) Купить за 1 850 руб.

Как написать алгоритм перестановки всех символов в строке, чтобы
получить все уникальные (возможные) значения перестановок.

Пример : слово Юзер

Возможных вариантов - 24

(математика n=1*2*3*4)


Юзер зЮер еЮзр рЮзе
Юзре зЮре еЮрз рЮез
Юезр зеЮр езЮр рзЮе
Юерз зерЮ езрЮ рзеЮ
Юрзе зрЮе ерЮз реЮз
Юрез зреЮ ерзЮ резЮ


К примеру у слова ВЕЛОСИПЕД  их 362880

(а уникальных 40320 , так Е повторяется два раза - по умолчанию буду считать ее за 1 символ т.е варианты ЕЕ=Е)


С чего сам вопрос возник?

"Крошка сын к отцу пришел и спросила кроха..." как получить все варианты перестановок слова ШКОЛА. 

И вспомнилась данная история: когда на собеседовании принимали молодых (только начинающих !!! не путать) программистов

я всегда считал : чтобы быть программистом нужен - какой то особый дар, как у художника или музыканта (другими словами не всем дано)

как проверить его потенциал, спросить знание платформы, языка - видел зубрили наизусть, а тольку иногда 0.

так было такое задание (сабж): важен подход к решению задачи, правильность результата, скорость работы.

Вот мне интересны варианты решения данной задачи (их много - сам видел и знаю 3 )

"Вещь"  может и не имеет практического применения, но МОЗГОДЕР - хороший.

Попробуйте сами на досуге написать вариант решения.

 

 

См. также

Загрузка и выгрузка в Excel Математика и алгоритмы Программист Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).

23.11.2015    19386    etmarket    14    

21

Разработка внешних компонент Математика и алгоритмы Программист Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия, а так же генерация модулей на C# и 1С для подключения к событиям. Использование DynamicMethod и ILGenerator. Представлены примеры для использовании событий System.IO.FileSystemWatcher (Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.) и SerialPort (обработка сканера штрих кода подключенного к COM порту). Обертка позволяет использовать классы .Net только на языке 1С. Реализация 1C Messenger описанного здесь http://infostart.ru/public/434771/

12.11.2015    52094    Serginio    36    

58

Математика и алгоритмы Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Статья посвящена исследованию следующего вопроса: необходимо сравнить 2 наименования справочников с целью вычисления их степени сходства. По задумке, степень сходства должна выражаться в процентах.

1 стартмани

25.02.2015    25388    etmarket    46    

18

Математика и алгоритмы Программист Платформа 1С v7.7 1C77 Абонемент ($m)

Часто при приеме на работу встречается задача про сгибание листка

1 стартмани

26.02.2013    19881    11    Sbelyi78    38    

9

Математика и алгоритмы Системный администратор Программист Бухгалтер Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 1C77 Россия Абонемент ($m)

Универсальная печать таблицы значений, которую не стыдно прикрутить к рабочей базе данных. Группировка данных, подсчет итогов, составление диаграмм, выгрузка в быстрый доступ к исходной ТЗ.

1 стартмани

23.05.2012    14946    66    McSeem    3    

8

Математика и алгоритмы Программист Платформа 1С v7.7 1C77 Россия Абонемент ($m)

Алгоритм получения значения тригонометрических функций путем разложения их в ряд Тейлора

1 стартмани

04.03.2012    8839    4    nysysimara    10    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Kyrales 146 08.07.09 04:25 Сейчас в теме
Толком ниче не понял...видимо утро потому что....но за такого рода мысли в кризис + :))
31. alexk-is 6544 09.07.09 22:57 Сейчас в теме
Код
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   ДлинаСлова = СтрДлина(Слово);
   Если ДлинаСлова = 0 Тогда
      Возврат;
   КонецЕсли;
   
   ТаблицаБукв = Новый ТаблицаЗначений();
   ТаблицаБукв.Колонки.Добавить("Буква", 
      Новый ОписаниеТипов("Строка",, 
      Новый КвалификаторыСтроки(1)));
   
   СтрокаСлово = "";
   СтрокаИз = "";
   СтрокаГде = "";
   
   // Разбросаем слово по таблице
   Для Индекс = 1 По ДлинаСлова Цикл
      НоваяСтрока = ТаблицаБукв.Добавить();
      НоваяСтрока.Буква = Сред(Слово, Индекс, 1);
      
      Если Индекс = ДлинаСлова Тогда
         // Хвостики
         СтрокаСлово = СтрокаСлово + 
             "ТаблицаБукв" + Индекс + ".Буква";
         СтрокаИз = СтрокаИз + "
         |   ТаблицаБукв КАК ТаблицаБукв" + Индекс;
      Иначе
         СтрокаСлово = СтрокаСлово + 
            "ТаблицаБукв" + Индекс + ".Буква + ";
         СтрокаИз = СтрокаИз + "
         |   ТаблицаБукв КАК ТаблицаБукв" + Индекс + ",";
      КонецЕсли;
      
      Для Индекс2 = Индекс + 1 По ДлинаСлова Цикл
         Если Индекс = 1 и Индекс2 = 2 Тогда
            СтрокаГде = СтрокаГде + "
            |   ТаблицаБукв" + Индекс + 
               ".Буква <> ТаблицаБукв" + 
               Индекс2 + ".Буква"
         Иначе
            СтрокаГде = СтрокаГде + "
            |   И ТаблицаБукв" + Индекс + 
            ".Буква <> ТаблицаБукв" + 
            Индекс2 + ".Буква"
         КонецЕсли;
      КонецЦикла;
   КонецЦикла; 
   
   Запрос = Новый Запрос(
   "ВЫБРАТЬ
   |   ТаблицаБукв.Буква
   |ПОМЕСТИТЬ ТаблицаБукв
   |ИЗ
   |   &ТаблицаБукв КАК ТаблицаБукв
   |;
   |
   |//////////////////////////////////////////
   |ВЫБРАТЬ РАЗЛИЧНЫЕ
   |   " + СтрокаСлово + " КАК Слово
   |ИЗ" + СтрокаИз + "
   |ГДЕ" + СтрокаГде);
   
   Запрос.УстановитьПараметр("ТаблицаБукв", ТаблицаБукв);
   Результат = Запрос.Выполнить().Выбрать();
   
   Пока Результат.Следующий() Цикл
      Сообщить(Результат.Слово);
   КонецЦикла;
   
КонецПроцедуры
Показать полностью
32. alexk-is 6544 09.07.09 23:13 Сейчас в теме
Поторопился :)
Добавил проверку на дублирующиеся символы.
Код
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   ДлинаСлова = СтрДлина(Слово);
   Если ДлинаСлова = 0 Тогда
      Возврат;
   КонецЕсли;
   
   ТаблицаБукв = Новый ТаблицаЗначений();
   ТаблицаБукв.Колонки.Добавить("Буква", 
      Новый ОписаниеТипов("Строка",, 
      Новый КвалификаторыСтроки(1)));
   
   СтрокаСлово = "";
   СтрокаИз = "";
   СтрокаГде = "";
   
   // Разбросаем слово по таблице
   Для Индекс = 1 По ДлинаСлова Цикл
      НоваяСтрока = ТаблицаБукв.Добавить();
      НоваяСтрока.Буква = Сред(Слово, Индекс, 1);
   КонецЦикла;
   ТаблицаБукв.Свернуть("Буква");
   ДлинаСлова = ТаблицаБукв.Количество();
      
   // Это для запроса
   Для Индекс = 1 По ДлинаСлова Цикл
      Если Индекс = ДлинаСлова Тогда
         // Хвостики
         СтрокаСлово = СтрокаСлово + 
             "ТаблицаБукв" + Индекс + ".Буква";
         СтрокаИз = СтрокаИз + "
         |   ТаблицаБукв КАК ТаблицаБукв" + Индекс;
      Иначе
         СтрокаСлово = СтрокаСлово + 
            "ТаблицаБукв" + Индекс + ".Буква + ";
         СтрокаИз = СтрокаИз + "
         |   ТаблицаБукв КАК ТаблицаБукв" + Индекс + ",";
      КонецЕсли;
      
      Для Индекс2 = Индекс + 1 По ДлинаСлова Цикл
         Если Индекс = 1 и Индекс2 = 2 Тогда
            СтрокаГде = СтрокаГде + "
            |   ТаблицаБукв" + Индекс + 
               ".Буква <> ТаблицаБукв" + 
               Индекс2 + ".Буква"
         Иначе
            СтрокаГде = СтрокаГде + "
            |   И ТаблицаБукв" + Индекс + 
            ".Буква <> ТаблицаБукв" + 
            Индекс2 + ".Буква"
         КонецЕсли;
      КонецЦикла;
   КонецЦикла; 
   
   Запрос = Новый Запрос(
   "ВЫБРАТЬ
   |   ТаблицаБукв.Буква
   |ПОМЕСТИТЬ ТаблицаБукв
   |ИЗ
   |   &ТаблицаБукв КАК ТаблицаБукв
   |;
   |
   |//////////////////////////////////////////
   |ВЫБРАТЬ РАЗЛИЧНЫЕ
   |   " + СтрокаСлово + " КАК Слово
   |ИЗ" + СтрокаИз + "
   |ГДЕ" + СтрокаГде);
   
   Запрос.УстановитьПараметр("ТаблицаБукв", ТаблицаБукв);
   Результат = Запрос.Выполнить().Выбрать();
   
   Пока Результат.Следующий() Цикл
      Сообщить(Результат.Слово);
   КонецЦикла;
   
КонецПроцедуры
Показать полностью
33. Tatitutu 3849 10.07.09 09:02 Сейчас в теме
(32) И тебе большое спасибо. Вот бы здорово было сравнить твое решение с (25) они оба на 8 у кого скорость быстрее ?
2. Craig 275 08.07.09 07:47 Сейчас в теме
Видать заняться нечем))) Это ж надо было придумать такую задачу гы))) (+) за то что повеселил! Ну а теперь жду комментария – как такое в голову пришло?
5. Tatitutu 3849 08.07.09 09:17 Сейчас в теме
(2) "Крошка сын к отцу пришел и спросила кроха..." как получить все варианты перестановок слова ШКОЛА. - я же написал в описании.

(3) Спасибо. Маленький каприз - это про описание ))),через полчаса будет Вам такая обработка

(4) Нет при 10 символах (еще не сильно придется менять так как, как раз с таким подходом 10 символов и есть 0,1,2,3,4,5,6,7,8,9.
Вот про это я и писал - своеобразный подход к решению задачи (один из вариантов - если не помнишь математику и формулы, но решить нужно)
ИсходноеСлово = ВРег(ИсходноеСлово) - впринципе согласен , так как Ю и ю для программы это разные символы.

А Вы попробуйте предложить другой вариант задачи (на 8-ке проще сделать)
6. Ish_2 1114 08.07.09 09:26 Сейчас в теме
(5) Это не своеобразный подход , а ограничение , которое обычно явно указывают.
На 8-ке не осилю.
8. Tatitutu 3849 08.07.09 10:03 Сейчас в теме
(6) позволь не согласится с тобой
Своебразный подход - заключается в данном случае в том

порядковый номер символа в строке - приравниваем к цифре
(проверяется уникальность символов в строке,лишние отбрасываются)
(да строка длинной 9 знаков и это будет 987 654 321 (макс число))
Например: слово ДОМ = 123
значит что бы найти все варианты
нужно перебрать с 123 по 321
и проверить чтобы не было задвоение символов (типа ДДО)
т.е. в новом слове должны быть все символы по 1 разу.
123 132 213 231 312 321
(идет прирост 9 81 18 81 9) но закономерность не смог вспомнить или вычислить - может кто знает формулу?
9. Ish_2 1114 08.07.09 10:37 Сейчас в теме
(8) Хорошо. Сформулируем иначе.
При объявленном ограничении возможен такой своеобразный подход.

Любопытно. Итак , ряд чисел , упорядоченных по возрастанию.
Кажде число составлено путем перестановок цифр из множества (0.,9).
Известна ли реккурентня формула для определения каждого члена ряда ?

Предположительный ответ : нет.
7. oskar 08.07.09 09:56 Сейчас в теме
(5)прикольно, позновательно
3. Арчибальд 2709 08.07.09 08:10 Сейчас в теме
Описание в обработке - это круто ...
Еще хочу обработку, чтобы делила "столбиком". С распечаткой.
4. Ish_2 1114 08.07.09 08:49 Сейчас в теме
В теме нужно прямо указать , что количество сиволов в исходной строке
ограничено : не более 9. Существенное упрощение.
При 10 символах в строке алгоритм придется менять.

Возможно , логичней также сделать в исходном слове неразличимость по регистру : ИсходноеСлово = ВРег(ИсходноеСлово).
10. Ish_2 1114 08.07.09 10:48 Сейчас в теме
+9 Исправление :
Кажде число составлено путем перестановок N неповторяющихся цифр из множества (0.,9).
11. Tatitutu 3849 08.07.09 10:57 Сейчас в теме
(10) ну... еще чуть - чуть ))) Давай свой алгоритм.
Этот вариант - решен в ЛОБ. Нужен научный подход
12. Ish_2 1114 08.07.09 10:58 Сейчас в теме
Чего чуть - чуть ?
Позиция моя обозначена сразу : не осилю.
13. Tatitutu 3849 08.07.09 11:04 Сейчас в теме
(12) я вот помню учил (я имею ввиду про научный подход)...
а где посмотреть не помню (Яндекс тоже меня не понимает)
14. Ish_2 1114 08.07.09 11:07 Сейчас в теме
Яндекс понимает "форум по математике."
Сформулируй вопрос и вперед.
15. Арчибальд 2709 08.07.09 11:22 Сейчас в теме
Функция СтрПерестановок(Строчка, Префикс="")
Рез="";
лСтр=Строчка;
Дл=СтрДлина(лСтр);
Если Дл=1 Тогда
Рез = Строчка;
Иначе
Для й=1 по Дл Цикл
Сим=Лев(лСтр,1);
Арг=Сред(лСтр,2);
Рез=Рез+Префикс+СтрПерестановок(Арг,Сим);
лСтр=Арг+Сим;
КонеЦикла;
КонецЕсли;
Возврат Рез;
КонецФункции

Останется поделить полученную строку на кусочки требуемой длины..
16. Tatitutu 3849 08.07.09 11:33 Сейчас в теме
(15) пока сыровато....не взлетает

Параметр : Слон , "/"
возврат
/слнлосолонснонл/лосонлнонслснсо/онлнсоснслолслн/нсослнлслон­олос
17. venger 2124 08.07.09 12:00 Сейчас в теме
(0) Так можно и довести до возможности играть с компом в балду или как там эта игра называется (из слова слова составлять)? Доработать алгоритм, прикрутить проверку (можно через и-нет) слово ли это, а не просто набор символов и вперед... Уровни сложности там еще забахать и будет игруха ниче так..
18. Tatitutu 3849 08.07.09 12:15 Сейчас в теме
(17) Идея хорошая. Но не нова
игра Балда для 1С 7.7. есть - разработчик spirit@kitcom.ru
но там принцип другой - изначально есть словарь (база данных слов)
19. Kurt 110 08.07.09 13:11 Сейчас в теме
Теория вроде здесь есть
http://ru.wikipedia.org/wiki/Перестановка

А вот здесь раздел более глобальный
http://ru.wikipedia.org/wiki/Категория:Комбинаторика

Вот еще про комбинаторику
http://combinatorica.narod.ru/third.html

Посмотрел я на эти значки и подмножества... ужос... это как заново изучать... и даже не помню это "высшая математика" или нет?
20. Kurt 110 08.07.09 13:30 Сейчас в теме
Перестановки. Факториал
http://mmmf.math.msu.su/archive/19992000/spivak67/s_comb.html

Что обидно :( никто не ставит задачи именно получить все возможные значения. В теории ставят задачу просто посчитать количество возможных вариантов, а это совсем разные вещи.

1. Так что по-моему решать придется в лоб, прямым пересчётом, например от 1234 до 4321 (для 4х элементов).

2. Можно только попробовать откидывать лишние варианты по контрольной сумме, например 1+2+3+4=10 (в любой их комбинации) Возможно, что такая проверка, да еще при большем количестве элементов наоборот, только затормозит процесс???

3. Но этого еще не достаточно. "Подходящий" вариант надо дополнительно проверять на вхождение в него всех элементов, т.к. могут возникать левые числа 0+6+0+4=10, прокатывающие под контрольную сумму :(((

Т.е. выполнять п.3 для всех чисел исключив п.2.
4. Выгрузив результат в таблицу значений, свернуть её, тем самым избавимся от одинаковых вариантов в случае повторяющихся букв.

Очень медленный вариант решения в лоб. Другого пока не вижу.
21. Tatitutu 3849 08.07.09 13:45 Сейчас в теме
Нашел !!!! ВАРИАН скорость супер - совсем другое решение
сейчас вылоду. Неограниченная длина строки. Ура=я умничка
(20) Возможно будет ВСЕ ВАРИАНТЫ
22. Kurt 110 08.07.09 14:13 Сейчас в теме
(21) Ну таки опишите алгоритм :-)
Всё таки интересно.
23. Арчибальд 2709 08.07.09 15:15 Сейчас в теме
Во как. Я просил в 3 не перестановки, а именно деление чисел. Как в четвертом классе учат...
24. Tatitutu 3849 08.07.09 15:57 Сейчас в теме
Вот я и сделал перестановкой. Завтра выложу - сегодня не успеваю уже.
Затык произошел если больше 6 символов - двоится начали (разбираюсь почему)
25. poppy 08.07.09 17:38 Сейчас в теме
http://infostart.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=10022&action=download

Обработка под восьмерку. Используется рекурсия.
lavrenko81; kuimov_81; Tatitutu; +3 Ответить
26. Tatitutu 3849 09.07.09 09:52 Сейчас в теме
Всем спасибо ! Особенно (25)
отличный вариант (обработку не буду выкладывать, т.к кто первый встал того и тапки - poppy (с) )

Вот код кому нужно тот поймет:
АВТОР poppy (с)
роцедура Перестановка(Слово, Префикс, ДлинаСлова)
Если ДлинаСлова = 1 Тогда
Ном = Ном+1;
Сообщить(Строка(Ном) + " " + Префикс+Слово);
Возврат;
КонецЕсли;

Для ии = 1 По ДлинаСлова Цикл
НовоеСлово = Лев(Слово, ии-1) + Сред(Слово, ии+1);
Перестановка(НовоеСлово, Префикс + Сред(Слово, ии, 1), ДлинаСлова-1);
КонецЦикла;

КонецПроцедуры

Процедура Проба()
Исходное=СокрЛП(НачальноеСлово);
ДлинаСлова=СтрДлина(Исходное);
Перестановка(Исходное,"",ДлинаСлова);
КонецПроцедуры
27. Арчибальд 2709 09.07.09 16:22 Сейчас в теме
(15,26)
Функция СтрПерестановок(Строчка,Префикс="")
Рез="";
лСтр=СокрЛП(Строчка);
Дл=СтрДлина(лСтр);
Если Дл=0 Тогда
Рез = Префикс;
Иначе
Для й=1 по Дл Цикл
Сим=Сред(лСтр,й,1);
Арг=Лев(лСтр,й-1)+Сред(лСтр,й+1);
Рез=Рез+СтрПерестановок(Арг,Префикс+Сим);
КонецЦикла;
КонецЕсли;
Возврат Рез;
КонецФункции

//*******************************************
Процедура Сформировать()
Сообщить(СтрПерестановок(тхт));
КонецПроцедуры

Теперь летает... Переставил слово одно...
28. Арчибальд 2709 09.07.09 16:24 Сейчас в теме
Посмотрел - одинаково...
Tatitutu; +1 Ответить
29. alexk-is 6544 09.07.09 20:26 Сейчас в теме
Код
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   ДлинаСлова = СтрДлина(Слово);
   Если ДлинаСлова = 0 Тогда
      Возврат;
   КонецЕсли;
   
   МассивБукв = Новый Массив(ДлинаСлова);
   
   // Разбросаем слово по массиву
   Для Индекс = 0 По МассивБукв.ВГраница() Цикл
      МассивБукв[Индекс] = Сред(Слово, Индекс + 1, 1);
   КонецЦикла; 
   
   Перебор("", МассивБукв);
   
КонецПроцедуры

Процедура Перебор(НачалоСтроки, МассивБукв)
   
   КоличествоБукв = МассивБукв.Количество();
   
   Если КоличествоБукв = 1 Тогда
      Сообщить(НачалоСтроки + МассивБукв[0]);
   Иначе
      РазмерМассива = МассивБукв.ВГраница();
      Для Индекс = 0 По РазмерМассива Цикл
         СледующийСимвол = МассивБукв[Индекс];
         
         // Копирование массива
         НовыйМассив = Новый Массив(КоличествоБукв);
         Для Индекс2 = 0 По РазмерМассива Цикл
            НовыйМассив[Индекс2] = МассивБукв[Индекс2];
         КонецЦикла;
         НовыйМассив.Удалить(Индекс);
         
         Перебор(НачалоСтроки + СледующийСимвол, НовыйМассив);
      КонецЦикла;
   КонецЕсли;
      
КонецПроцедуры
Показать полностью
Tatitutu; +1 Ответить
30. Tatitutu 3849 09.07.09 21:01 Сейчас в теме
(28,29) Молодцы !!! Спасибо огромное - думаю и вам приятно было решить эту с виду простую задачку. Есть еще одно оригинальное решение - я в описании сразу написал - знаю 3.
34. ROM_1C 692 12.07.09 10:50 Сейчас в теме
(0) можно использовать простую формулую комбинаторики, расбить строку на символы и юзать...
а вообще какая применяемость даной обработки?
35. Tatitutu 3849 12.07.09 13:45 Сейчас в теме

(34) конечно можно.стоит только попробовать самому.
Применяемость?
-решить задачу для сына
-опробовать свои мозги и возможности
-перебор вариантов (подбор пароля)
39. AhtungG 17.07.09 07:24 Сейчас в теме
(35) еще один пункт применяемости:
- генерация внутренних кодов, состоящих из огранич списка 'допустимых' символов.

к примеру, у нас:
во избежание разночтений символов (да-да, 'ноль' и O, С и S, H и N такое техзадание )) автогенерация кодов на собств продукцию ограничена 0-1..9,ABCEHKLMPTXYZ.
Этого достаточно, чтобы в пятизначке ХХ.YYY обеспечить макс 529 групп товаров с возможными 12167 эл-в в группе (реально 180 групп до 4 тыс.эл. в нескольких группах)
Tatitutu; +1 Ответить
41. AhtungG 29.07.09 09:11 Сейчас в теме
для своей задачи (39) нашел имхо более разумное решение,
использовал 'перевод чисел в разные системы исчисления' http://www.kb.mista.ru/article.php?id=78

схитрил чуток, в Функция Из_10_В_Любую() вынес строку в параметр "012..89ABC..Z"
подсовываю свой набор )
Tatitutu; +1 Ответить
50. jk3 65 06.11.09 15:19 Сейчас в теме
даже не знал что тут есть раздел "Занимательное программирование для 1С" 8)

(35) тогда пора переходить на что-нибудь более серьезное: нейросети на 1С -- как звучит ;)
36. CheBurator 2695 15.07.09 18:24 Сейчас в теме
задача тривиальная, решается достаточно просто рекурсией,
другой вопрос чтобы сделать алгоритм максимально быстрым.
.
На разминку предлагаю другую подобную задачу.
Есть N предметов.
Необходимо выдать все возможные комбинации расположения этих N предметов по кучкам. 1шт - это тоже кучка. Например, 4 предмета:
возможные варианты расположения по кучкам:
- 4
- 3 1
- 2 1 1
- 1 1 1 1
- 2 2
и т.д.
порядок выдачи разбиения на кучки - непринципиален.
это была одна из первых задач, но которой я обломал зубы, будучи молодым и необразованным... ;-) у меня разбиение все время получалось на N кучек по 1 шт.
37. Ёпрст 1065 15.07.09 18:28 Сейчас в теме
(36) ты нас тут основами комбинаторики хочешь достать ?
:))
38. CheBurator 2695 15.07.09 18:40 Сейчас в теме
Да я не хочу достать, я могу достать! ;-)
нет, принцип не в этом! принцип в эффективности решения.
40. Tatitutu 3849 17.07.09 07:27 Сейчас в теме
Спасибо за пример применения.
42. MiCe 12 30.07.09 12:37 Сейчас в теме
разберите слово ОКОЛОТОК
=))
43. Tatitutu 3849 30.07.09 12:40 Сейчас в теме
(42) вопрос к кому ?

В описание у автора написано "(а уникальных 40320 , так Е повторяется два раза - по умолчанию буду считать ее за 1 символ т.е варианты ЕЕ=Е)"
так в этом слове ОКОЛОТОК = ОКЛТК

44. Арчибальд 2709 30.07.09 12:49 Сейчас в теме
45. MiCe 12 30.07.09 13:26 Сейчас в теме
(43) а я вот из описания понял что два подряд за один....
т.е. например слово "око" дает 3 варианта
око
ок
ко
49. kitt 323 15.10.09 10:42 Сейчас в теме
да вот арчибальд подсказывает что уникальных букв в слове ОКОЛОТОК всего четыре ОКЛТ. Значет решение будет 4^8 = 65536

А то в первый раз я из (43) неправильно буквы скопипастил :)
46. MiCe 12 30.07.09 13:30 Сейчас в теме
дано - около
около-олоко-окло-олко-олк-окл-лко-кло
47. KnightWarlock 28.09.09 10:37 Сейчас в теме
Беспонт, если слова с двумя или более повторяющимяся символами сокращает убирая повторения. НЕ ИНТЕРЕСНО...
48. kitt 323 15.10.09 10:39 Сейчас в теме
рассчитать количество возможных вариантов для последовательности символов - возвести длину алфавита в степень равную максимальной разрядости (длине последовательности). Всем измвестный пример - байт состоит из 8 бит, возможных значений два - ноль и единица, максимальная длина последовательности - восемь. Итого количество уникальных комбинаций байта - 2^8=256 (255 если считать с ноля), то есть 00000000, 00000001, 00000011, 00000111, ... 11111111.

Ваш пример: исходное слово - ОКОЛОТОК, уникальных букв 5 (ОКЛТК), то есть длина алфавита равна пяти. Длина слова равна восьми, итого по формуле получается 5^8, то есть 390 625 уникальных слов.

51. Tatitutu 3849 06.11.09 15:32 Сейчас в теме
(51) чего тут только нет - и чем разообразнее тем лучше - у кого то может ТОЛЬКО идея возникнет, а кто то ВООДУШИВИТСЯ ею и сделает что-нибудь НАСТОЯЩЕЕ.
Как говорится лучше - "С миру по нитке и голому рубаха (с)"
чем стоять на месте и
"Переливать из пустого в порожнее (с)"
52. Altair777 647 06.11.09 16:04 Сейчас в теме
(0) Вопрос...
А зачем переставлять символы? Тем более, так механически?
Было бы интереснее, если бы задача стояла так - сколько правильных слов русского языка можно составить из перествленных символов?
А так это просто математика...
53. Tatitutu 3849 06.11.09 16:11 Сейчас в теме
(52) Открою тебе тайну
человек этим и отличается от животного мира
что ОН задает ВОПРОСЫ и ищет на него ОТВЕТЫ
а самое главное НАХОДИТ.
Наша ЖИЗНЬ в ПОИСКЕ.

не было бы интереснее , поверь

вот тебе загадка про РУССКИЙ язык

"Попробуй придумать слово на русском языке из девяти букв, которое содержит в себе шесть других слов"
54. Altair777 647 06.11.09 16:13 Сейчас в теме
(53) А я думал, что он разумом отличается, а не тупой перестановкой буковок...
:)
55. Tatitutu 3849 06.11.09 16:13 Сейчас в теме
(54) Думают - люди умные (с)
57. Altair777 647 06.11.09 16:17 Сейчас в теме
(55) Снова началось?
А потом скажешь, что пароль пропал или тебя взломали?
Обрати внимание, (52) был корректен. А вот ответ на него - совсем нет.
Тайны мне открывать не надо. Тем более, такие сокровенные... для тебя.
58. Tatitutu 3849 06.11.09 16:26 Сейчас в теме
(57) Неужели так трудно признать ....- я не знаю ответ на твою загадку.
а нужно "изобретать ВЕЛОСИПЕД или как переставить символы"
твой ответ не правильный :!:

правильный ответ:

Слово ПРИДУМАТЬ, которое ты уже прочитал не один раз, содержит в себе слова:
ИДУ, ДУМАТЬ, ДУМА, УМ, МАТЬ и МАТ.

я ответил на (52)
59. Altair777 647 06.11.09 16:33 Сейчас в теме
(58) я еще загадку не рассматривал
Интересно, а сколько бы ты решал ее, если бы не знал отвтета?
Придумать самому или найти в инете, а потом с гордым видом рассказывать как ты быстро ее решил - это, конечно, круто :)
61. Tatitutu 3849 06.11.09 16:49 Сейчас в теме
(59) ну ты не нашел же ответа (или я быстрее нашел)
"...там где - ты учился , я преподавал " (с)

для (60)
нет, условия были другие (см.53)

Где слово МИР, например?

там написано, в условии.
"которое СОДЕРЕЖИТ в себе "

а МИР - это опять из области
"зачем изобретать ВЕЛОСИПЕД или как переставить символы"
62. Altair777 647 06.11.09 16:56 Сейчас в теме
(61)

1) Я еще и не искал ответ. И не обязан был, что характерно :-)
Вот так сразу кинуться

2) Ты ответ знал заранее.

3) > нет, условия были другие (см.53)
Не вяжется с (58) > я ответил на (52)

Прочти все внимательнее с (52) поста.
67. venger 2124 06.11.09 18:09 Сейчас в теме
(61)
"...там где - ты учился , я преподавал " (с)


Как бы тоже не стоит желаемое, за действительное выдавать, вообще то;-) Ну да ладно, пора по домам, поэтому стоит переключиться и заняться темой этой ветки вплотную на практике: http://infostart.ru/forum/forum1/topic28571/messages/

;-)
60. Altair777 647 06.11.09 16:36 Сейчас в теме
(58) > я ответил на (52)
Нет, условия были другие: сколько правильных слов русского языка можно составить из перествленных символов?
Где слово МИР, например?
56. Tatitutu 3849 06.11.09 16:14 Сейчас в теме
(54) на загадку в (53) не ДУМАЛ как ответить ?
63. Tatitutu 3849 06.11.09 17:05 Сейчас в теме
хотел сначала написать так

ты жил с (54) а поведал про (53), на что ты примитивно в (57) обиделся :cry: (кстати совершенно не поделу)


не буду, напишу просто

"Хоть ссы в глаза, все божья роса" (с) не мое, народная мудрость.


И заканчиваем "нарушать - флудить не по теме" Удачных выходных :D
64. Altair777 647 06.11.09 17:15 Сейчас в теме
(63) мда... Неужели СССР (Странник Сети (Советник Разума)) вернулся?! :)
65. Tatitutu 3849 06.11.09 17:18 Сейчас в теме
(64) Не выдавай ЖЕЛАЕМОЕ, за ДЕЙСТВИТЕЛЬНОЕ. :D :D :D
" и не м....." (с) Tatitutu
Altair777 удачных выходных !
66. Altair777 647 06.11.09 17:50 Сейчас в теме
Оставьте свое сообщение