02:21

All the stars we steal from the nightsky will never be enough
Встала задача перебрать перестановки и выбрать из них те, которые удовлетворяют условиям.
Полным перебором ее решать не вариант - всего шестнадцать элементов, а 16! не самое маленькое число.

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

формулировка задачи

@темы: Алгоритм

Комментарии
09.12.2013 в 02:28

а зачем вам перестановки? проверять нужные суммы по ходу игры - не вариант?
09.12.2013 в 02:30

All the stars we steal from the nightsky will never be enough
ninelya, по ходу игры я задолбалась, потому и пишу программу )
09.12.2013 в 02:34

т.е. вы пишете не саму игру, а её решение? Боюсь, вам всё равно придется перебрать все варианты минимум один раз((
09.12.2013 в 02:39

Миру - мир. А Вам - пломбир!
эпонина из пластилина, здравствуйте (:
Впервые слышу о такой игре посему вопросы. Возможно, глупые. Как должно выглядеть решение?
То есть, почему нельзя просто сгенерить случайную комбинацию n чисел, которая давала бы в сумме 10 (типа 1+2+3+4) и просто расставить их по полю?
09.12.2013 в 08:20

Скептичный циник,
я так понимаю, что уже есть квадртаы с цифрами. Их нужно только расставить по полю.
09.12.2013 в 08:38

All the stars we steal from the nightsky will never be enough
ninelya, да, я пишу решение.
перебрать все варианты минимум один раз - это около 600 часов по верхней оценке. я уверена, что перебор можно оптимизировать )

Скептичный циник, dpleshakov, именно, квадраты уже заданы и их нельзя вертеть или менять )
09.12.2013 в 09:50

Ну, пробьешь ты головой стену. И что ты будешь делать в соседней камере?
Не будет там 16! Там будет что то похожее на алгоритм деиксты - на каждом шаге проверять не набралось ли у вас уже сумма больше 10 и все будет ок.
09.12.2013 в 09:53

Ну, пробьешь ты головой стену. И что ты будешь делать в соседней камере?
Ради интереса можете написать и полный перебор 2*10^13 (=16!) я думаю за пару часов современный комп пеереберт
09.12.2013 в 09:55

All the stars we steal from the nightsky will never be enough
Mr.Freedom, а можно подробнее? у меня нет идей, как это реализовывать.
спасибо)

Mr.Freedom, полный перебор я писала, за ночь не успел :D
09.12.2013 в 10:23

Ну, пробьешь ты головой стену. И что ты будешь делать в соседней камере?
алгоритм простой как апельсин:
1 заполняем все свободные нулями
2 берем первую свободну ячейку - ставим 9
3 берем вторую свободную ставим 9 - проверяем - сумму линий - уже не сойдется значит берем 8
если не подошла ни одно из чисел откатываемся назад(в предыдущую ячейку) и меняем там значение.

ПС обратный порядок перебора мне кажется будет быстре в данном случае - хотя скорее всего на копейки.
09.12.2013 в 10:31

All the stars we steal from the nightsky will never be enough
Mr.Freedom, квадраты с заданными числами уже имеются, задача в том, чтобы их расставить по полю.
09.12.2013 в 10:41

Ну, пробьешь ты головой стену. И что ты будешь делать в соседней камере?
эпонина из пластилина, а ну тогда чуть проще - когда вы берете число из массива вы помечаете галочкой used и в дальнейшем используете только те числа у которых нет этой галочки. Там это пооптимизить можно - но дело десятое.
09.12.2013 в 10:42

All the stars we steal from the nightsky will never be enough
Mr.Freedom, спасибо большое, вроде бы понятно )
только тогда нужно один элемент поставить на первую позицию и зафиксировать его там, я правильно понимаю?
09.12.2013 в 10:47

Ну, пробьешь ты головой стену. И что ты будешь делать в соседней камере?
я не уверен что задача решается с фиксированным элементом. Псевдокод выглядит так
пока(1){
do{
взять следующий возможный кубик
}
while(проверить ненарушено ли правило суммы)
если по прежнему правило суммы нарушено откатится на предыдущюу ячейку(если это первая ячейка игра не имеет решение)
если все ок - переходим на следующую(если это последняя ячейка - игра пройдена)
}
09.12.2013 в 10:49

All the stars we steal from the nightsky will never be enough
Mr.Freedom, а, теперь точно понятно.
еще раз спасибо!:rotate:
09.12.2013 в 10:51

Ну, пробьешь ты головой стену. И что ты будешь делать в соседней камере?
эпонина из пластилина, классическое решение подобных задач - уж очень часто применяется.
09.12.2013 в 10:56

Кстати, задачка в "Играх разума" у меня как-то легко решилась. Точно уже не помню, либо я первым делом раскидал все 9-ки - у них очень мало точек расположения. А остальное расставить - дело техники.
Можно посмотреть, если будут конкретные кубики с цифрами.
09.12.2013 в 11:17

Ну, пробьешь ты головой стену. И что ты будешь делать в соседней камере?
эпонина из пластилина, надо еще туда добавить что если кубики закончились возможные то откатываемя назад в другую ячейку.
А по коду рекомендации сделать основную функцию - ровно это псевдокод переписать на норм код, а а дальше уже писать отдельно функции которые потребовались в алгоритме(что такое брать свободный, как проверять правило суммы и т д)