Как решить эту логику логически без проб и ошибок

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

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

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

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

Автоматически разрешенный ответ:

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

2 ответа

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

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

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

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

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

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

Перейдя по ссылке " Gokigen Naname", я нашел больше правил. Один из них около двух смежных 1 (11), но Мварден уже покрыл его.

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


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

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

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

licensed under cc by-sa 3.0 with attribution.