Судоку - это если кто не знает, такая японская головоломка с заполнением цифрами "латинских квадратов" 9x9 (даются несколько базовых уже заполненных цифр, и цифры не должны повторяться в строках, столбцах, и "подквадратах" 3x3). Ну или вместо цифер - буквами. Выдумана она на самом деле в Америке, но из Японии пошла ее популярность.
Что примечательно, если сделал ошибку, то когда она приводит к стадии "не выходит каменный цветок", обычно оказывается легче перерешать все заново с начала, чем найти, где ошибка. Чем-то напоминает некоторые нехорошие программы. А я вам прямо скажу, в починке программ я просто гигант какой-то - в очень многих случаях могу быстро находить и исправлять ошибки там, где другие люди (в частности, авторы этих программ) плюют и начинают переписывать заново.
Так вот, интересно наблюдать во мне развитие экспериментов с этими судоками.
Сначала я ее увидел в "TV Guide", и первую из них решать было интересно. Потом еще несколько. Потом мне надоело и я решил хотя бы самый элементарный шаг - вычеркивание цифер, которые не могут появиться в каждой конкретной клетке, автоматизировать. То есть, конечно, программу, которая тупо перебирает циферки, тоже написать легко можно, но это неинтересно и неспортивно.
Процесс сильно поменялся - гоняем программу пока она не перестает находить что вычеркнуть, после чего смотрим глазами на более интересные комбинации, вычеркиваем чего надо руками, и дальше гоняем программу. Удовольствие все еще есть, но оно сделалось другими. Сам процесс писания программы был тоже вполне забавен, и смотреть на более хитрые комбинации интересно. Но вот этот классический момент с кропотливым выписыванием циферок, когда важно сделать много шагов без ошибки, потерялся.
Потом мне попалась на глаза статья в "Саентифик Америкэне" с более необычными судоками. К необычным разновидностям (треугольной; с замощением квадрата костяшками домино из перечисленного набора; с данными арифметическими связями между цифрами; совсме без базовых цифер, но зато с указаниями отношений больше-меньше между всеми соседними цифрами в каждой подгруппе 3x3) программа оказалась напрямую неприменима, и опять решать было интересно. Мне больше всего понравился вариант с больше-меньше.
С тройной судокой из той же статьи, где перекрываются 3 поля, получился облом даже с программой. В смысле, не то что бы совсем облом, но этих нетривиальных зависимостей оказалось много, и мне их искать надоело. Поэтому я взялся добавить их поиск и следование в программу. Оказалось, что все равно не получается. После чего я обнаружил и сформулировал еще один, более нетривиальный класс зависимостей, и добавил их в программу. Получилось. Программа все решила совершенно на автопилоте. В процессе ее написания опять было получено удовольствие. Там на самом деле есть еще одно сермяжное правило, которое я в программу не вогнал, поскольку его глазом увидеть легко, а в программе проверять - утомительно. Но оно, как оказалось, и не понадобилось. Может быть, что взаимосвязь других правил его полностью покрывает.
Теперь ковыряюсь над последней судокой из той же статьи: в ней вместо квадратов 3x3 нарисованы произвольные связные формы из 9 клеток. Уже неделю, наверное, на нее понемножку каждый день пялюсь, и периодически мне приходят в голову разные мысли. Вчера, вроде, дошел до точки бурного прогресса, но закончился он опять бурным обломом. Похоже, что я где-то по пути сделал ошибку, и непонятно, где именно. Нынче думаю, а не адаптировать ли опять программу. Но пока не до того и лень.
Кстати, если кому та тройная судока интересна, она вот:
Могу и программу дать интересующимся, но с готовой программой неинтересно.
Что примечательно, если сделал ошибку, то когда она приводит к стадии "не выходит каменный цветок", обычно оказывается легче перерешать все заново с начала, чем найти, где ошибка. Чем-то напоминает некоторые нехорошие программы. А я вам прямо скажу, в починке программ я просто гигант какой-то - в очень многих случаях могу быстро находить и исправлять ошибки там, где другие люди (в частности, авторы этих программ) плюют и начинают переписывать заново.
Так вот, интересно наблюдать во мне развитие экспериментов с этими судоками.
Сначала я ее увидел в "TV Guide", и первую из них решать было интересно. Потом еще несколько. Потом мне надоело и я решил хотя бы самый элементарный шаг - вычеркивание цифер, которые не могут появиться в каждой конкретной клетке, автоматизировать. То есть, конечно, программу, которая тупо перебирает циферки, тоже написать легко можно, но это неинтересно и неспортивно.
Процесс сильно поменялся - гоняем программу пока она не перестает находить что вычеркнуть, после чего смотрим глазами на более интересные комбинации, вычеркиваем чего надо руками, и дальше гоняем программу. Удовольствие все еще есть, но оно сделалось другими. Сам процесс писания программы был тоже вполне забавен, и смотреть на более хитрые комбинации интересно. Но вот этот классический момент с кропотливым выписыванием циферок, когда важно сделать много шагов без ошибки, потерялся.
Потом мне попалась на глаза статья в "Саентифик Америкэне" с более необычными судоками. К необычным разновидностям (треугольной; с замощением квадрата костяшками домино из перечисленного набора; с данными арифметическими связями между цифрами; совсме без базовых цифер, но зато с указаниями отношений больше-меньше между всеми соседними цифрами в каждой подгруппе 3x3) программа оказалась напрямую неприменима, и опять решать было интересно. Мне больше всего понравился вариант с больше-меньше.
С тройной судокой из той же статьи, где перекрываются 3 поля, получился облом даже с программой. В смысле, не то что бы совсем облом, но этих нетривиальных зависимостей оказалось много, и мне их искать надоело. Поэтому я взялся добавить их поиск и следование в программу. Оказалось, что все равно не получается. После чего я обнаружил и сформулировал еще один, более нетривиальный класс зависимостей, и добавил их в программу. Получилось. Программа все решила совершенно на автопилоте. В процессе ее написания опять было получено удовольствие. Там на самом деле есть еще одно сермяжное правило, которое я в программу не вогнал, поскольку его глазом увидеть легко, а в программе проверять - утомительно. Но оно, как оказалось, и не понадобилось. Может быть, что взаимосвязь других правил его полностью покрывает.
Теперь ковыряюсь над последней судокой из той же статьи: в ней вместо квадратов 3x3 нарисованы произвольные связные формы из 9 клеток. Уже неделю, наверное, на нее понемножку каждый день пялюсь, и периодически мне приходят в голову разные мысли. Вчера, вроде, дошел до точки бурного прогресса, но закончился он опять бурным обломом. Похоже, что я где-то по пути сделал ошибку, и непонятно, где именно. Нынче думаю, а не адаптировать ли опять программу. Но пока не до того и лень.
Кстати, если кому та тройная судока интересна, она вот:
. . . | . . 1 | 9 . .
. 5 . | . 2 . | . 8 .
6 . 4 | 3 . . | 7 . .
---------------------
7 . . | . . . | 6 . .
. 8 . | . 7 . | . 5 .
9 . . | 5 . . | . . 4
---------------------
. . 9 | . . . | . . . | . . 3
. 5 . | . . . | . . . | . 2 .
6 . . | . . . | . . . | 1 . .
---------------------
7 . . | . . 3 | . . 4
. 6 . | . 5 . | . 9 .
2 . . | 7 . . | 8 . .
---------------------
. . 5 | . . . | . . . | 1 . .
. 8 . | . . . | . . . | . 2 .
9 . . | . . . | . . . | 3 . .
---------------------
6 . . | . . 4 | . . 1
. 7 . | . 5 . | . 2 .
. . 2 | . . . | . . 9
---------------------
. . 3 | . . 1 | 7 . 6
. 5 . | . 8 . | . 1 .
. . 9 | 3 . . | . . .
Могу и программу дать интересующимся, но с готовой программой неинтересно.