santax Опубликовано Четверг в 09:51 Опубликовано Четверг в 09:51 12 часов назад, E.K. сказал: А если приложить головной мозг, то можно и побыстрее что-то придумать.. Обидно, однако! Цель для меня выбрать инструмент, удобный для меня. Тут я могу работать как с телефона, так и с рабочего ноута. Фильтрация позволяет просмотреть только оставшиеся строки. МоёОфис попробовал - через 15 минут закрыл, когда он завис на создании доп строк. Да, понятно, что есть комбинации, которые можно применить разом к нескольким вариантам (0^X и 1^Y) и как это применить быстро к инструменту вопрос хороший. Но у меня первоочередная цель сделать перебор всех вариантов, а не сделать быстро - так как дедлайна нет.
Xandr_5890___ Опубликовано Четверг в 10:28 Опубликовано Четверг в 10:28 (изменено) Думаю, возможна вот такая оптимизационная задумка: (Базовая идея - конкатенировать первые две цифры набора и дальше рассматривать, что получится) 1. Для наборов, которые начинаются на 70, 71... 98, 99 сводим задачу к такой: получить из четырех оставшися цифр числа 30, 29, 28 ... 2, 1. Если для каких-то наборов не выходит, то рассматриваем такой набор отдельно. Например, для набора 700200: из 0200 число 30 никак не получить, но 700/((0! + 2)! + 0!) = 100 2. Набор начинается на 66: 6!/6 = 120, задачу можно свести к первому пункту - "набор начинается на 80" (только со знаком минус, надо получить из четырех цифр не 20, а -20) 3. Набор начинается на 69 или 63. 6!/3! = 6!/(v9)! = 6!/6 Сводим к пункту 2 4. Рассматриваем наборы, начинающиеся на 68, 67, 65, 64, 62, 61, 60, 59, 58, 57, 56, 51 5. - Наборы на 55 сводятся к задаче: "получить из четырех оставщихся цифр четверку", т.к. 5 × 5 = 25 - наборы на 54 - "получить из оставщихся пятерку", 5 × 4 = 20 - наборы на 53 - к пункту 1 для наборов на 75 со знаком минус, т.к 5^3 = 125 - наборы на 52 - к наборам на 55, т.к 5^2 = 25 - наборы на 50 - "получить из 4 цифр двойку" 6. Рассматриваем наборы на 48, 47 7. - Наборы на 49 и 43 сводятся к пункту 4, наборам на 64, т.к 4^v9 = 4^3 = 64 - наборы 46 - к пункту 4, наборам на 56 со знаком минус, т.к 4! × 6 = 144 - наборы на 45 - к наборам на 80 или к наборам на 54 - наборы на 44 - к наборам на 96, 4! × 4 = 96 - наборы на 42 - к наборам на 48, 4! × 2 = 48 - наборы на 40 и 41 - к наборам на 52, т.к 4! + 0! = 25 8. Рассматриваем наборы на 33, 32, 31, 30 9. - наборы на 39 сводятся к наборам на 80 или к наборам на 54, т.к. 3!!/9 = 80, 3! × 9 = 54 - наборы на 38 - к наборам на 90 или наборам на 48 - наборы на 37 - к наборам на 42, 3! × 7 = 42 - наборы на 36 - к наборам на 80 со знаком минус, 3!!/6 = 120 - наборы на 35 - к наборам на 56 со знаком минус, 3!!/5 = 144 - наборы на 34 - к наборам на 81 или на 72, 3^4 = 81, 3 × 4! = 72 10. Рассматриваем наборы на 29, 28, 22, 21, 19, 18, 17, 16, 13, 12, 11, 10 - наборы на 27 сводятся к наборам на 72 со знаком минус, 2^7 = 128 - наборы на 26 - к наборам на 64, 2^6 = 64 - наборы на 25 - к наборам на 52 - наборы на 24 - к наборам на 48, 2 × 4! = 48 - наборы на 23 - к наборам на 64, 2^3! = 64 - наборы на 20 - к наборам на 54, "получить из 4 цифрх пятерку" - наборы на 15 - к наборам на 80 или 79 со знаком минус, 1 + 5! = 121 - наборы на 14 - к наборам на 52, 1 + 4! = 25 Вот такой вот черновой эскиз стратегии. Изменено Четверг в 10:33 пользователем Xandr_5890___
E.K. Опубликовано Четверг в 16:20 Автор Опубликовано Четверг в 16:20 Ход мысли мне нравится! Я рассуждал похоже, но нашёл, как мне кажется, более оптимальный метод. Поскольку перебирать четырёхзнаки - это как-то не очень...
Xandr_5890 Опубликовано вчера в 17:54 Опубликовано вчера в 17:54 (изменено) Можно еще попробовать "разбиение на биграммы", вот набросок стратегии: 1. В начале рассматриваем все пары цифр; для каждой пары составляем множество значений (назовем его "характер биграммы"), которое можно получить с помощью базовых операций: 10 ---> (0,1,2,10,10!) // без учета знака 11 ---> (0,1,2,11,11!) .... .... 99 ---> (0,1,18,81,99...) // еще 9!/9, 9^9 и т.д. 2. Каждый набор разбиваем на биграммы и, опираясь на характеры, смотрим можно ли аддитивно/мультипликативно получить 100: Набор: 102050 ---> 10|20|50 10 ---> (0,1,2,10..) 20 ---> (0,1,2,3,20..) 50 ---> (0,1,4,5,6,50..) 10 × (2 + 0) × (5 + 0) = 100 3. Если набор состоит из трех различных биграмм и из них "чисто" мультипликативно или "чисто" аддитивно можно получить 100, то такой набор порождает еще 5 наборов, получаемых перестановкой биграмм; такие наборы в дальнейшем проверять не нужно: 102050 ---> 105020, 201050, 205010, 501020, 502010 4. Если сопоставление характеров биграмм не дает результат, то рассматриваем набор отдельно: Набор: 110100 11 ---> (0,1,2,11,11!) 01 ---> (0,1,2) 00 ---> (0,1,2) Из биграмм сотня не получается, но: (11 - 0!) × 10 + 0 = 100 (Не могу утверждать, но чутье подсказывает, что таких наборов не очень много - биграммы часто порождают делителей 100) p.s. захожу с одного устройства, с одной почты, а получается, что с разных аккаунтов... Изменено вчера в 17:58 пользователем Xandr_5890
E.K. Опубликовано вчера в 21:32 Автор Опубликовано вчера в 21:32 3 часа назад, Xandr_5890 сказал: p.s. захожу с одного устройства, с одной почты, а получается, что с разных аккаунтов... Эй, админы! Как так? А цепочка рассуждений меня радует! Но не слишком радует
Xandr_5890 Опубликовано 2 часа назад Опубликовано 2 часа назад (изменено) Можно доработать стратегию, добавив такой (по большому счету, важнейший) пункт: После проверки набора и подтверждения его "способности генерировать сотню", вычеркиваем из списка проверки такие наборы, в характерах биграмм которых присутствуют значения, которые индуцировали генерацию в исходном наборе (уфф... прошу прощения за "перегруженный" язык). Пояснение: Набор: 111410 (1+1) × (1+4) × 10 = 100, сотня генерируется произведением 2 × 5 × 10. Соответственно, кроме всех перестановок биграмм набора (111014, 141110, 141011, 101114, 101411), также вычеркиваются из списка проверки все упорядоченные тройки биграмм (и их перестановки), в характерах которых есть 2, 5 и 10: Биграммы с двойкой: 10, 11, 12, 13, 14, 16, 20, 21... Биграммы с пятеркой: 13, 14, 15, 16, 23, 27, 29, 30... Биграммы с десяткой: 10, 19, 25, 28, 37, 43, 46, 49... Соответственно, наборы 101310, 101013, 131010, 111310, 111013 ... 121519... 979491... и т.д Вычеркиваются Предположу, что так мы довольно быстро переберем большой процент от всех наборов. Для "грубой" проверки останется малая доля (как мне кажется). P.s. В принципе, можно отойти и от "чисто" биграммного разбиения и перейти к разбиению смешанному: Выписать аддитивные и мультипликативные "генераторы сотни" и каждому такому генератору сопоставить набор би- и монограмм, в характерах которых есть необходимые значения. Например, 100 = 2 × 5 × 2 × 5, состав набора - Биграммы с двойкой: 10, 11, 12... Биграммы с пятеркой: 13, 14, 15... Монограмма: 2 Монограмма: 5 ( и все их перестановки) 100 = 120 - 24 + 4 + 0, состав набора - Биграммы с 120: 04, 05, 13... Биграммы с 24: 04, 05, 13... Монограмма: 4 Монограмма: 0 ( и перестановки) Вот таким мне видится путь к решению. Изменено 2 часа назад пользователем Xandr_5890
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти