Как решить эту головоломку логически без проб и ошибок - PullRequest
8 голосов
/ 01 марта 2012

Я столкнулся с загадкой Наклон в Ubuntu. Я хочу решить головоломку логически, а не методом проб и ошибок и т. Д.

Правила просты:

  1. Мы должны заполнить все полянаклон вправо или влево.
  2. Количество косых черт, соприкасающихся с числом, должно быть равно этому числу.
  3. На доске не допускаются петли.то есть наклоны не должны образовывать петли.

Головоломка:

Question

Ответ автоматически решен:

enter image description here

С чего мне начать?

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Вместо левого и правого уклона я буду использовать косую черту (/) и обратную косую черту (\).

Давайте возьмем один квадрат с углами (x1) (11), где x - что угодно, кроме 1. В левом верхнем углу есть один такой. Предположим, что наклон на этом квадрате является косой чертой, которая соединяет две единицы. Эти 1 «израсходованы», и все квадраты, касающиеся их, должны иметь линии, которые не касаются чисел. Но это приводит к невозможной ситуации, потому что у нас будет косая черта как слева, так и ниже нашего квадрата, что означает, что оставшаяся 1 касается двух наклонов. Вывод: если у вас есть квадрат с тремя 1, линия в этом квадрате должна касаться угла, который не равен 1 . Это правило может не применяться к краям и углам, но если у вас есть 1 в углу, вы должны нарисовать линию, касающуюся этого угла.

Числа 1 и 3 являются симметричными, и, используя аналогичную логику, мы получаем другое правило: если у вас есть квадрат с тремя 3, линия в этом квадрате должна касаться двух из этих трех 3 .

Существуют более общие правила, но они не применяются в углах. Там должны быть квадраты, окружающие площадь, о которой идет речь. Давайте возьмем квадрат два противоположных 1 (x1) (1y), где x и y - что угодно, включая число без номера. Есть один такой два квадрата от левого нижнего угла. Предположим, что наклон на этом квадрате является косой чертой, которая соединяет две единицы. Эти 1 «израсходованы», и все квадраты, касающиеся их, должны иметь линии, которые не касаются чисел. Но это приводит к петле вокруг 1. Вывод: если у вас есть квадрат с двумя противоположными единицами, линия в этом квадрате не должна касаться этих двух единиц . Это правило может не распространяться на края доски.

Числа 1 и 3 являются симметричными, но предыдущее правило использует правило «без петель», и нет симметричного правила «без петель боковых линий», и, следовательно, не существует правила, имеющего две противоположные 3.

Теперь, когда вы знаете, какая строка касается 1, вы можете заключить, что никакая другая линия не может коснуться ее. Мы можем обобщить это рассуждение для следующих правил заполнения: если число x касается линий x, то все остальные соседние квадраты имеют линии, которые не касаются числа . И симметрично: если число x является углом (4-х) квадратов со строками, которые не касаются числа, то все остальные соседние квадраты должны иметь линии, которые касаются числа .

Погуглил по термину " Gokigen Naname " Я нашел больше правил. Один из них о двух смежных единицах (11), но Mweerden уже покрыл это.

Этих правил недостаточно для решения доски. Есть и другие правила, наверное. Но в конечном итоге алгоритм может сделать предположение.

2 голосов
/ 02 марта 2012

«Логически» - это очень широкий термин.Как отметил Орблинг в комментариях, откат можно считать логичным.Можно также понимать «логически» как означающее, как решить это, переводя его в логическую формулу.Из комментариев, которые я собираю, вы пытаетесь реализовать решатель, похожий на, возможно, обычный решатель судоку.

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

Некоторые примеры очевидных шаблонов - <11> и >33<.Особенно 2 имеет некоторые хорошие "переходные" свойства.Например: <12...23 -> <12...23< (с 2 ... 2 произвольное количество 2 с).Попробуйте свой решатель на различных примерах, и когда он застрянет, я уверен, что вы нашли пример, который может научить вас другой схеме.

...