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

20.06.11

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

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

Скачать файлы

Наименование Файл Версия Размер
Перестановка.ert
.ert 21,50Kb
71
.ert 21,50Kb 71 Скачать

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

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

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

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


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


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

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


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

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

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

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

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

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

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

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

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

 

 

См. также

Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм

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

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

23.11.2015    18900    etmarket    14    

20

.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия

Разработка внешних компонент Математика и алгоритмы Платформа 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    51080    Serginio    36    

57

Степень сходства двух наименований справочника

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

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

1 стартмани

25.02.2015    24440    etmarket    46    

17

Задача про сгибание листка

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

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

1 стартмани

26.02.2013    19477    11    Sbelyi78    38    

9

Универсальная печать таблицы значений

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

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

1 стартмани

23.05.2012    14763    66    McSeem    3    

8

Тригонометрические функции в 7.7

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

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

1 стартмани

04.03.2012    8589    4    nysysimara    10    

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

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

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

А Вы попробуйте предложить другой вариант задачи (на 8-ке проще сделать)
6. Ish_2 1104 08.07.09 09:26 Сейчас в теме
(5) Это не своеобразный подход , а ограничение , которое обычно явно указывают.
На 8-ке не осилю.
8. Tatitutu 3855 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 1104 08.07.09 10:37 Сейчас в теме
(8) Хорошо. Сформулируем иначе.
При объявленном ограничении возможен такой своеобразный подход.

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

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

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

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

Параметр : Слон , "/"
возврат
/слнлосолонснонл/лосонлнонслснсо/онлнсоснслолслн/нсослнлслон­олос
17. venger 2121 08.07.09 12:00 Сейчас в теме
(0) Так можно и довести до возможности играть с компом в балду или как там эта игра называется (из слова слова составлять)? Доработать алгоритм, прикрутить проверку (можно через и-нет) слово ли это, а не просто набор символов и вперед... Уровни сложности там еще забахать и будет игруха ниче так..
18. Tatitutu 3855 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 3855 08.07.09 13:45 Сейчас в теме
Нашел !!!! ВАРИАН скорость супер - совсем другое решение
сейчас вылоду. Неограниченная длина строки. Ура=я умничка
(20) Возможно будет ВСЕ ВАРИАНТЫ
22. Kurt 110 08.07.09 14:13 Сейчас в теме
(21) Ну таки опишите алгоритм :-)
Всё таки интересно.
23. Арчибальд 2706 08.07.09 15:15 Сейчас в теме
Во как. Я просил в 3 не перестановки, а именно деление чисел. Как в четвертом классе учат...
24. Tatitutu 3855 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 3855 09.07.09 09:52 Сейчас в теме
Всем спасибо ! Особенно (25)
отличный вариант (обработку не буду выкладывать, т.к кто первый встал того и тапки - poppy (с) )

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

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

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

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

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

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

Процедура Перебор(НачалоСтроки, МассивБукв)
   
   КоличествоБукв = МассивБукв.Количество();
   
   Если КоличествоБукв = 1 Тогда
      Сообщить(НачалоСтроки + МассивБукв[0]);
   Иначе
      РазмерМассива = МассивБукв.ВГраница();
      Для Индекс = 0 По РазмерМассива Цикл
         СледующийСимвол = МассивБукв[Индекс];
         
         // Копирование массива
         НовыйМассив = Новый Массив(КоличествоБукв);
         Для Индекс2 = 0 По РазмерМассива Цикл
            НовыйМассив[Индекс2] = МассивБукв[Индекс2];
         КонецЦикла;
         НовыйМассив.Удалить(Индекс);
         
         Перебор(НачалоСтроки + СледующийСимвол, НовыйМассив);
      КонецЦикла;
   КонецЕсли;
      
КонецПроцедуры
Показать полностью
Tatitutu; +1 Ответить
30. Tatitutu 3855 09.07.09 21:01 Сейчас в теме
(28,29) Молодцы !!! Спасибо огромное - думаю и вам приятно было решить эту с виду простую задачку. Есть еще одно оригинальное решение - я в описании сразу написал - знаю 3.
34. ROM_1C 691 12.07.09 10:50 Сейчас в теме
(0) можно использовать простую формулую комбинаторики, расбить строку на символы и юзать...
а вообще какая применяемость даной обработки?
35. Tatitutu 3855 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 66 06.11.09 15:19 Сейчас в теме
даже не знал что тут есть раздел "Занимательное программирование для 1С" 8)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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


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