LINUX.ORG.RU
решено ФорумTalks

Happy Programming. Eposode 0x02 - пятничная задачка ::)

 , ,


0

1

В прошлый раз мы с вами рисовали слоников вроде вчера было, а прошло уже много лет. Сегодня же у нас типа «Задача Танежи» но другая. Поехали.

Задача:

Последовательно находя арифметические выражения по правилам (ниже) найти максимальное число получившееся из этого выражения Искать выражение для числа можно только последовательно начиная с 0 и так далее 1,2,3,4,5,6,7,8,9,10,11... то есть найти то число дальше которого выражение составить невозможно. Пропускать числа нельзя.

Пример:

[n=0] 1+2-3/4*567*8/9=0
[n=1] 1-23+45+67-89=1
[n=2] 1-2*3-45/6-7+8+9=2
[n=3] 123+45/6/7+8-9=3
[n=4] 1+23/4-5/6*78-9=4
[n=5] 1-2-3+456-7/89=5
[n=6] 1+2-3/45/6+7+8-9=6
[n=7] 123-45/6-7-8+9=7
[n=8] 12-3-45/6+78/9=8
[n=9] 1*2+34-5+67-89=9
[n=10] 1-2*3+4*56/7/8+9=10

Скобки в выражениях для расчёта всегда расставляются с лева на право левое выражение всегда имеет самую большую глубину. Например.

[n=0] ((((((1+2)-3)/4)*567)*8)/9)=0
[n=1] ((((1-23)+45)+67)-89)=1
[n=2] ((((((((1-2)*3)-45)/6)-7)+8)+9)=2
[n=3] (((((123+45)/6)/7)+8)-9)=3
[n=4] ((((((1+23)/4)-5)/6)*78)-9)=4
[n=5] (((((1-2)-3)+456)-7)/89)=5
[n=6] (((((((1+2)-3)/45)/6)+7)+8)-9)=6
[n=7] (((((123-45)/6)-7)-8)+9)=7
[n=8] (((((12-3)-45)/6)+78)/9)=8
[n=9] (((((1*2)+34)-5)+67)-89)=9
[n=10](((((((1-2)*3)+4)*56)/7)/8)+9)=10

Правила:

  • Дана последовательность чисел 123456789 и операции /*-+
  • Последовательность можно разорвать в любом месте и вставить туда любую арифметическую операцию из /*-+ как в примере выше.
  • Нельзя менять порядок цифр в последовательности она должна быть всегда восходящей от 1 до 9 включительно.

Максимальный результат указать в комментарии + ссылку на всю последовательность до максимального результата выложить на pastebin.com (или иной ресурс) в формате.

[искомое число] [количество попыток подбора выражения] [само выражение] знак "=" [искомое число]

Пример:

(0) [121] 1+2-3*4*5/6789=0
(1) [4023] 12/3-4/567-8+9=1
(2) [11242] 123+4-56-78+9=2
(3) [7135] 1+23+45-67-8+9=3
(4) [20305] 12+345+6-7/89=4
(5) [2033] 12*3+45+6+7-89=5
(6) [4087] 12+34+56-7-89=6
(7) [9487] 1*2*345-67/89=7
(8) [3192] 1*2/3*45+67-89=8
(9) [349] 1*2-3-4+5*678+9=9
(10) [8946] 12-34+56-7-8-9=10

Сам я пока застрялостановился на (909) [4802] 123-4-5+6+789=909, но видимо просто что-то не так. Попозже выложу в коментах свои результаты.

Код можете выкладывать или нет, дело ваше. Главное выложить результаты.

UDP: Лавочка закрыта! Задача фиговаяяяяяяяяяяя.

★★★★★

Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

Можешь выдыхать. Гугл, фейсбук, гитхаб, амазон и прочие заморозили набор новых кадров из-за спада в экономике. Слоников решать больше не надо!

rupert ★★★★★
()
Ответ на: комментарий от rupert

Те лишь бы отмазаться! Слоники были в прошлый раз. У тя вон скока языков в тегах разных, и сила с тобой прибывает. Двааай, пакажи всем как ты можешь страдать бесполезной, но увлекательной фигнёй!

LINUX-ORG-RU ★★★★★
() автор топика

Задача под конкретный скриптовый/интерпретируемый язык. На сишечке тоже можно, но придется сишечку превращать в скриптовый язык. Что тут сложного, не понимаю. Тупой перебор как он есть.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)

Эх, нет бы воксели на асме порисовать. Ушёл из кодинга дух авантюризма :)

yu-boot ★★★★★
()

Думаю, что ключевой момент тут ограниченное кол-во чело-численных делений и жёсткое ограничение на последовательность знаков. Т.ч. если отбросить брут-форс, то вполне можно составить граф всех возможных комбинаций, что сводит задачу к O(1).

beastie ★★★★★
()
Ответ на: комментарий от beastie

Всего в пять с половиной раз меньше, так что быстрее будет перебрать всё, чем оптимизировать поиск.

i-rinat ★★★★★
()

Сам я пока остановился на (909)

Варианта для 910 нет, так что 909 — последний элемент, если начинать с нуля и двигаться по единице вверх.

количество попыток подбора выражения

Нет смысла подбирать под каждое число, если можно просто пройтись по всем вариантам, сложить результаты в словарь, а потом просто спрашивать результат у словаря.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

сложить результаты в словарь, а потом просто спрашивать результат у словаря.

Это в принципе я и имел в виду.

PS: хотя если не ограничиваться ℕ, но допустить варианты .5 - .5, то и тогда оно очень ограниченно.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Ну почему сразу всё. Увеличь число цифр, например, все числа от 1 до 100 записанные подряд. Добавь возможность вставки скобок. И вот у тебя есть задачка, которую уже простым перебором не возьмёшь.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Тогда будет наверное уже слишком сложно, я думал ещё что в процессе решения выражения промежуточные результаты получающиеся с лева на право тоже бы подчинялись основным правилам, то есть можно например сложить первые числа и результат перед например умножением со следующим числом можно было бы «разрезать» произвольно и ещё раз вставить любое из /*-+ снова произвести вычисление и уже двигаться дальше, а с новым результатом опять тоже самое и так до конца основного выражения. Тут уже хоть тоже перебор будет, но более так сказать гибкий. Но уже это мне показалось чересчур. А вот то что 910 нельзя посчитать по текущим условиям я не додумался (и до сих пор не понимаю).

Короче ладно, слишком не весело походу. Слоников людям веселее рисовать =) Чёнить другое придумаю, не такое однобокое. Не каждая попытка должна быть успешной.

И вот у тебя есть задачка, которую уже простым перебором не возьмёшь.

Я слыхал что где-то непонятно где, кто-то непонятно кто проводят эксперимент или типа того по поиску решения всякой всячины тупо рандомно,но это не точно, генерируя формулы, просто надеясь что где то сойдётся, а они уже апосля глядя на то что там нагенерировалось поймут как оно работает. Типа в теории для каких-то вещей вероятнее получить результат нужный случайно, чем ждать лет 200 пока математик допетрит как решить проблему. Сомнительно, но прикольно. Ачёбынет.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.