Как сделать судоку в excel
Иногда бывает так, что судоку имеет несколько решений (чаще всего – 2), но при этом все решения будут правильными.
Если мы выполним макрос «Заполнить_очевидные» (я о нем подробно говорил на своем яндекс-дзен-канале, этот макрос заполняет однозначные кандидаты, то есть находит такие клетки, для которых есть только один кандидат и другого не может быть совсем), то получится следующее судоку:
Наше судоку почти заполнилось. Как видно, в каждом из незаполненных блоков не хватает по 2 кандидата, и эти кандидаты – только пятерки и девятки.
Кстати, под основным судоку можно расположить квадрат, в котором будут видны все те ячейки судоку, у которых только два кандидата. А для судоку на рисунке 2 «двойные кандидаты» будут выглядеть так:
Хотя в нашем квадрате представлены двузначные числа, но мы понимаем, что левая цифра всегда будет меньше правой, и если эти две цифры рассматривать в отдельности, то это и есть кандидаты тех ячеек судоку, у которых есть только два кандидата. В нашем примере – пятерки и девятки – это и есть кандидаты.
Формула для ячейки С16 следующая:
=ЕСЛИ(O336=2;10*МИН(AM3;СМЕЩ(AM3;37*1;0);СМЕЩ(AM3;37*2;0);СМЕЩ(AM3;37*3;0);СМЕЩ(AM3;37*4;0);СМЕЩ(AM3;37*5;0);СМЕЩ(AM3;37*6;0);СМЕЩ(AM3;37*7;0);СМЕЩ(AM3;37*8;0))+МАКС(AM3;СМЕЩ(AM3;37*1;0);СМЕЩ(AM3;37*2;0);СМЕЩ(AM3;37*3;0);СМЕЩ(AM3;37*4;0);СМЕЩ(AM3;37*5;0);СМЕЩ(AM3;37*6;0);СМЕЩ(AM3;37*7;0);СМЕЩ(AM3;37*8;0));e)
Конечно же, при копировании этой формулы в другие ячейки этого квадрата, он заполнится полностью.
Хотя формула и длинная, но вероятность ошибки минимальна. Можно ее заменить на более короткую, если заменить все функции СМЕЩ. Так, например, СМЕЩ(AM3;37*1;0) будет заменено на AM40 (потому что 40=3+37*1), СМЕЩ(AM3;37*2;0) – на AM77 (77=3+37*2), и так далее. Но здесь главное – не ошибиться, подсчитывая все эти суммы. И AM3, и AM37, и все остальные ячейки внутри формул «МИН» и «МАКС» - это левые верхние углы тех квадратов, что содержат кандидаты судоку. AM3 – левый верхний угол квадрата. состоящего из кандидатов-единичек, AM40 – левый верхний угол кандидатов-двоек, ну и так далее. Начало формулы, а именно:
означает, что все эти вычисления [а их смысл прост: 10*минимум+максимум] нужно проводить только для таких кандидатов, которых содержится ровно 2 штуки. То есть, хотя мы и формально находим минимум/максимум для девяти ячеек, мы уже точно знаем, что только в двух из этих девяти будут числа, причем эти числа будут не равны между собой. Поскольку каждое из этих чисел находится в диапазоне от 1 до 9, то и в результате этой длинной формулы будет получаться двузначное число, у которого число десятков и число единиц будут разными. По сути эти две цифры от двухзначного числа – это и есть наши кандидаты.
Кстати, «e» в нашей длинной формуле – это латинская буква e, о присвоении этого имени одной из ячеек я уже говорил в других статьях моего канала. Это имя пустой ячейки, в которой есть только одна формула:
Но вернемся к нашему почти заполненному судоку. Оно имеет два решения. Вот первое решение:
В теме “Кодирование и обработка числовой информации” есть подтема “Электронные таблицы”, в которой ученики 8 и 11 классов (УМК Угриновича Н.Д.) изучают сложный раздел “Встроенные функции Excel”. Для того чтобы упростить подачу такого непростого материала и повысить мотивацию учащихся, я использую судоку.
Судоку – математическая игра-головоломка, известная в России довольно давно под названием “Магический квадрат”.
Классический вариант японского судоку – это квадрат 9х9 клеток, в котором необходимо расставить цифры от 1 до 9 так, чтобы в каждой строке, в каждом столбце и в каждом выделенном квадрате 3х3 все цифры были различны.
Я предлагаю учащимся сделать проверку судоку в Excel, чтобы повторить некоторые встроенные функции, а также понятие диапазона ячеек.
Нам потребуется знание одной математической функции: =СУММ(ячейка1;я чейка2)
и двух логических функций, совмещенных в одну сложную: =ЕСЛИ(И(ячейка1=45; ячейка2=45); “молодец!”; “попробуй еще!”)
Теперь можно начать писать формулы для проверки правильности решения судоку. Например, в 11 строке мы напишем все формулы для проверки строк квадрата судоку. Итак, в ячейке А11 будет находиться формула =СУММ(A1:I1), в ячейке В11 будет находиться формула =СУММ(A2:I2) и так далее аналогично до ячейки I11, в которой будет находиться формула =СУММ(A9:I9). Теперь в 12 строке проверим все столбцы, также используя диапазон ячеек. В ячейке А12 будет находиться формула =СУММ(A1:А9), в ячейке В12 будет находиться формула =СУММ(В1:В9) и так далее аналогично до ячейки I12, в которой будет находиться формула =СУММ(I1:I9).
Теперь необходимо проверить все выделенные квадраты 3х3. Следует напомнить, что для такого диапазона нужно указать адреса левой верхней и правой нижней ячеек.
То есть в ячейке А13 будет находиться формула: =СУММ(A1:С3), в ячейке В13 будет находиться формула: =СУММ(D1:F3) и т.д. И, наконец, в ячейке I13 будет находиться формула: =СУММ(G7:I9).
Так как известно, что сумма чисел от 1 до 9 равна 45, то, соответственно в диапазоне А13:I13 все ячейки должны быть равны 45, если судоку решено верно.
Теперь приступим к анализу полученных результатов. Для этого в ячейке К1 запишем следующую формулу:
=ЕСЛИ(И(A11=45; B11=45; C11=45; D11=45; E11=45; F11=45; G11=45; H11=45; I11=45; A12=45; B12=45; C12=45; D12=45; E12=45; F12=45; G12=45; H12=45; I12=45; A13=45; B13=45; C13=45; D13=45; E13=45; F13=45; G13=45; H13=45; I13=45); “МОЛОДЕЦ!”;”Попробуй еще!”).
Изначально функция ЕСЛИ выглядит так:
=ЕСЛИ(условие; если верно; если не верно).
Мы же сделали сложное условие с логической функцией И, чтобы условие было верным только в случае, если все 27 ячеек равны 45.
Классический вариант судоку может иметь также дополнительные условия, которые целесообразно дать в качестве самостоятельной работы или дополнительного задания.
Классический вариант + дополнительное условие: по двум (главным) диагоналям все числа также должны быть различны. Для этого нам потребуется ввести к уже имеющимся еще две формулы примерно такого вида:
=СУММ(A1;B2;C3;D4;E5;F6;G7;H8;I9)
В качестве домашнего задания можно задать так называемое судоку “область”, где надо расставить цифры от 1 до 9 так, чтобы в каждой строке, в каждом столбце и в каждой выделенной области из 9 клеток все цифры были различны. Можно просто раздать рисунки и попросить написать к ним формулы, даже не используя компьютер.
Заполненные справа судоку служат для того, чтоб учитель мог проверить правильность написания формулы, просто введя набор цифр в ячейки Excel. (Приложение)
Нетрадиционный подход к изучению, повторению, закреплению и контролю такой довольно сложной темы, как “Встроенные функции в Excel”, полностью оправдывает себя, потому что ученик с большей мотивацией выполняет новое задние, чем повторяет уже привычное. И хотя при выполнении данного задания от ученика не требуется разгадать судоку, а только сделать форму для проверки, дети увлекаются и стараются усложнить себе задачу, еще и самостоятельно заполнив клеточки цифрами. Именно для таких пытливых учеников в правых рисунках судоку исходные ячейки выделены полужирным шрифтом.
Мои ученики так увлекаются судоку, что принимают участие в чемпионате СНГ по судоку среди школьников, который проводит газета “Информатика”, издательство “Первое сентября”.
В прошлой статье я рассказывал о подготовке файла Excel для решения судоку. В этой статье я расскажу о том, как можно рассчитать все «кандидаты» для каждой из клеток судоку.
Напомню, что такое «кандидат». «Кандидат» - это возможные цифры, которые могут находиться в незаполненных клетках судоку. Чем меньше кандидатов у отдельно взятой клетки судоку, тем лучше. Если у клетки судоку всего один кандидат – то он автоматически перестает быть кандидатом, потому что становится уже конкретным числом судоку.
Приведем пример. Пусть есть одно судоку:
Прежде всего хотелось бы сказать про цифру 32, которую мы видим в левом верхнем углу заголовка судоку. 32 – это число заполненных цифр судоку. Формула для подсчета простая:
В прошлой статье про судоку мы уже говорили, что основные клетки судоку мы будем размещать в ячейках Excel от C3 до K11. Следовательно, эта вышеприведенная формула [=СЧЁТ(C3:K11)] будет находиться в ячейке B2 Excel.
Но вернемся к нашему судоку и к кандидатам. У клетки Ё4 нашего судоку есть всего один кандидат – это единица (цифра 1). Ё4 – это седьмая строка, четвертый столбец и восьмой квадратик судоку. О том, как нумеровать строки, столбцы и квадратики судоку – мы рассказывали в прошлой статье, если кто не еще ее читал – приглашаю на мой канал!
Если собрать все числа, которые уже есть в строке № 7, в столбце № 4 и в квадратике № 8, то мы увидим, что там встречаются как минимум один раз все цифры, кроме единицы. Это значит, что единица – единственный кандидат для Ё4. А единственный кандидат перестает быть кандидатом, потому что он становится той цифрой, которая должна находится в судоку в клетке Ё4.
Что касается автоматизации в вычислении кандидатов – здесь все не очень просто. Сразу выяснить, сколько именно кандидатов есть у каждой свободной клетки судоку, не получится. Но здесь уместен принцип «нужно кушать слона по частям».
Начнем вычисление с того, что на отдельном листе Excel – назовем его «Имена» - разместим 9 цифр:
Затем присвоим имена – ячейке B2 – имя «один», B3 – «два», B4 – «три», ну и так далее. Остальные имена будут сверху вниз: «четыре», «пять», «шесть», «семь», «восемь» и «девять». Конечно же, в графе «имена» будут эти буквенные названия цифр без кавычек.
Мы неспроста выделили ячейки C2 и C3. Это не просто пустые ячейки, а ячейки с формулами:
Это нужно для того, чтобы исключить присвоение нулевого значения пустой ячейке. "Ноль" и "ничего" - это разные вещи. Имена у этих ячеек будет следующее: у ячейки C2 – п (это имя, состоящее из одной буквы – русской буквы «п» - от слова «пустота»); у ячейки C3 – e (тоже одна буква, латинская буква e, от слова «empty».
После присвоения имен мы можем продолжить программирование. В данной статье расскажем только о том, как вычислить, для каких клеток судоку возможен кандидат 1 (единица).
Первый этап – замена заполненных клеток судоку на двойные звездочки:
Формулы для этого квадратика достаточно просты. Например, для ячейки O3 Excel – она же клетка A1 судоку:
Вот здесь и понадобилась наша переменная – русская буква «п». Если скопировать эту формулу и вставить на весь диапазон, в котором находится квадрат, то квадрат будет заполнен полностью. Никаких изменений вносить в формулу не потребуется.
Мо жно было эту формулу записать и по-другому:
Но часто бывает так, что при создании формул используется не только клавиатура, но и мышка. А если мышкой выделить ячейку C3, то в поле имени мы увидим не C3, а «кле_А1», потому что именно это имя присвоено данной клетке. При копировании этой формулы на другие клетки мы получим то, что имя «кле_1» останется без изменения при копировании. Для нас этот вариант не подойдет, поэтому лучше сразу использовать ту формулу, которая содержит «волшебное слово» – «СМЕЩ». То есть, «СМЕЩ(B2;1;1)» – это все равно, что C3, потому что при смещении от ячейки B2 на одну клетку по вертикали и на одну по горизонтали получится именно C3. А при копировании этой формулы на другие ячейки мы получим изменение формулы, и в результате для каждой из клеток судоку будет получен нужный нам результат – копия числа в заполненной ячейке, или две звездочки для пустой клетки судоку.
Продолжим искать кандидаты-единицы. Нарисуем второй квадрат:
Как мы уже знаем, каждое судоку состоит из строк, столбцов и квадратиков. В приведенном выше рисунке мы заменяем каждую клетку судоку на сумму единиц, находящихся в той же строке, в том же столбце, и в том же квадратике, в которых расположена данная клетка судоку. Например, левая верхняя цифра – единица, потому в нашем исходном судоку (рис. 1) в первой строке нет единиц (их 0), в первом столбце – тоже ноль, а в первом квадратике –одна единица. Итого единиц: 0+0+1 – это 1. Теперь понятно, почему в нашем квадрате (рис. 3) все цифры могут быть только от 0 до 3 – ведь сумма единиц в строке, столбце и квадратике одного судоку не может быть больше трех и не может быть меньше нуля.
Следующий этап – непосредственно выявление тех клеток судоку, для которых возможен кандидат единица.
Что мы видим на данном рисунке? Мы видим все те клетки судоку, для которых возможен кандидат 1 (единица).
Справа от этого квадрата – число кандидатов-единиц в каждой из строк судоку; внизу от судоку число кандидатов-единиц в каждом столбце и в каждом квадратике.
Итак, мы нашли те клетки судоку, для которых возможен кандидат единица. Иногда уже этих данных бывает достаточно, чтобы вычислить «однозначные кандидаты».
Конечно же, "однозначный кандидат" может быть любым, а не только единицей. Если бы в какой-то строке, столбце или квадратике был бы всего один кандидат (например, одна единица, одна двойка и так далее) – тогда это число перестало бы быть кандидатом. Поэтому для всех тех цифр, что находятся справа и снизу от квадрата с кандидатами, можно добавить условное форматирование.
Итак, если среди этих цифр встретится единица – то ее формат будет отличаться. В нашем примере – ячейки, содержащие единицы, будут приобретать зеленую заливку.
Кстати, это правило можно использовать и в других случаях – закрашивать в зеленый цвет нужные значения. Можно также закрашивать красным цветом те значения, которые свидетельствуют о какой-нибудь ошибки или об отклонении от какой-то нормы.
Что делать дальше – об этом расскажем в следующих статьях. Поэтому я приглашаю всех любителей математики, Excel и, конечно же, судоку: подписывайтесь на мой канал и ждите новых статей на эту тему.
Как решать судоку с помощью Excel? Известно, что существует очень много видов судоку. Но решение каждого из этих видов судоку можно сделать более интересным, если привлечь к этому решению Excel.
Предлагаю: всем любителям этой увлекательной головоломки судоку создать специальный файл в Excel, который будет помогать в решении судоку. Что конкретно будет в этом файле – об этом я буду достаточно подробно рассказывать в статьях моего яндекс-дзен канала. А в этой статье – первое повествование на эту тему.
Итак, создаем файл для решения судоку. Каковы должны быть его основные особенности?
- расширение файла: «Книга Excel с поддержкой макросов»;
- рекомендуемое название файла – «Судоку_2020.xlsm».
- для выбора папки для файла рекомендуем создать несколько «вложенных» папок. Например, внутри папки «Документы» - папку «Судоку», а внутри папки «Судоку» - папку «Простые_судоку». И уже в эту папку «Простые_судоку» можно записать наш файл. Почему именно так? Всё просто – в будущем для разных типов судоку мы будем создавать и другие файлы, но их все удобно хранить именно в таком виде. Потому что названия у этих файлов будут одинаковыми, а главное отличие между ними будет в расположении, то есть в той папке, в которой будет находиться данный файл.
После того, как файл создан, можно приступить к его форматированию. Во-первых, выберем лист Excel, на котором будут происходить основные вычисления. Переименуем его, назовем его Основное судоку. Данный заголовок (ярлык) вполне допустим, при присвоении заголовков листам пробелы разрешены.
Затем изменим ширину каждого столбца. Оптимальная ширина каждого столбца – 3.
После этого можно подготовить клетки для будущего судоку – добавить название («Основное судоку», а также заголовки строк и столбцов нашего судоку следующим образом:
Столбец A (речь идет о столбце Excel) нам еще понадобится в дальнейшем, поэтому он у нас пока пустой. Как мы видим, наше «основное судоку» будет размещаться в квадрате от C3 до K11 – если мы будем смотреть на заголовки строк и столбцов Excel.
Каждый квадратик судоку мы закрасили в определенный цвет – это сделано для того, чтобы было удобно отличать один квадратик (блок) от другого. Цвета для квадратиков желательно выбирать таким образом, чтобы:
- один цвет был не похож на другой, особенно если речь идет о тех квадратиках, которые расположены рядом друг с другом;
- цвета не должны быть слишком темными, чтобы можно было хорошо видеть те цифры, что будут расположены внутри этих квадратиков.
А теперь продолжим говорить о нумерации клеток внутри судоку. Хотя ячейки Excel имеют свою нумерацию (если смотреть на заголовки строк и столбцов Excel), но в то же время мы придумали и другую нумерацию для «клеток» судоку: от А1 и до З9 (зэ девять - не путать с "тридцать девять", пишется почти одинаково. - шутка) – и здесь уже буквы не латинские, а русские. Чтобы исключить возможную путаницу из-за двойных заголовков, договоримся так: «ячейка» - это ячейка Excel с латинскими буквами в заголовках, а «клетка» - это клетка судоку с русскими буквами в заголовках.
После того, как мы раскрасили каждый из «квадратиков», или блоков, судоку, можно приступить к следующему этапу – к присвоению имен разным клеткам и их группам внутри судоку. Начнем с клеток – каждой из них будет присвоено свое имя. Левая верхняя клетка судоку будет носить имя «кле_А1», остальные имена будут присвоены по этому же принципу.
Хотя нам надо присвоить 81 имя, ничего сложного в присвоении этих имен нет. Достаточно задействовать всего лишь один макрос:
Как видно, данный макрос будет называться «Имена_основного_судоку». В именах макросов пробелов быть не должно, но их можно либо пропустить совсем, либо заменить на символ пробела, то есть нижнее подчеркивание, как и было сделано в нашем случае.
Результат работы этого макроса – за несколько секунд будут присвоены все нужные нам имена.
Затем нужно присвоить имена всем строкам, столбцам и «квадратикам» внутри основного судоку. Но прежде – договоримся о принципах нумерации. Строки будем нумеровать сверху вниз, столбцы – слева направо, блоки, или «квадратики» - с левого верхнего угла и построчно. Более подробная нумерация строк, столбцов и «квадратиков» приведена на рисунке:
Итак, с нумерацией строк, столбцов и квадратиков внутри судоку все понятно.
Чтобы присвоить имена диапазонам ячеек Excel, нужно сначала выделить весь диапазон, а затем в поле имени ввести нужное нам имя этого диапазона. Как будем присваивать имена диапазонам? Первая строка судоку будет называться «стр_1», вторая – «стр_2», и так далее. Первый столбец будет носить имя «сто_1», первый квадратик – «ква_1». Всего мы должны присвоить имена для 27 диапазонов – это 9 строк, 9 столбцов и 9 квадратиков. Зачем нужны эти имена? Чтобы было гораздо удобнее решать сами судоку, более подробно мы поговорим об этом в следующих статьях.
После присвоения имен остается еще добавить одну небольшую деталь. Поскольку мы решаем судоку 9 х 9, то внутри нашего судоку могут быть целые числа от 1 до 9. Нужно выделить все клетки судоку и с помощью команды Данные→Проверка данных→Проверка данных задать нужные нам параметры:
Вот, в принципе, и всё – основное форматирование ячеек для решения судоку завершено. А что делать дальше – об этом я расскажу в следующих статьях. Поэтому всех любителей судоку приглашаю подписаться на мой канал и ждать новых статей о том, как с помощью Excel можно быстро решать судоку и о многом другом – обо всем, что имеет отношение к Excel, математике и, конечно же, судоку!
Программа для решения судоку проста в использовании. Если на Вашем компьютере имеется установленное приложение Microsoft Office Excel, просто откройте с его помощью файл, скаченный с нашего сайта, заполните то, что у Вас уже получилось и нажмите кнопку «Разгадать». Программа приступит к решению задачки, за чем Вы сможете наблюдать.
Если программа вернет ошибку, то вероятнее всего Вы допустили ошибку в ведении данных.
В случаях решения сложных судоку программа приступает к угадыванию. В момент очередного угадывания уже разгаданные числа могут стереться. Это значит, что текущее угадывание прошло неверно, и программа приступит к новому варианту решения.
Процесс угадывания редко превышает по времени 1 минуту, но может превышать этот показатель. Чтобы остановить работу программы зажмите клавишу «Esc» на клавиатуре.
У Вас недостаточно прав для комментирования.
Судоку – математическая игра-головоломка.
Классический вариант японского судоку – это квадрат 9 * 9 клеток, в котором необходимо расставить цифры от 1 до 9 так, чтобы в каждой строке, в каждом столбце и в каждом выделенном квадрате 3 * 3 все цифры были различны.
О том, как решать судоку можно прочитать, например, здесь.
Здесь мы рассмотрим пример использования некоторых функций Excel, помогающих решить судоку.
— возвращает значение элемента таблицы или массива, заданного номером строки и номером столбца.
- если используется один аргумент, номер_строки или номер_столбца, то функция вернет массив значений (строку или столбец соответственно)
- если используются оба аргумента номер_строки и номер_столбца, то функция возвращает значение, находящееся в ячейке на пересечении указанных строки и столбца.
Схематично можно представить так
СЧЁТЕСЛИ(диапазон;критерий) — подсчитывает количество ячеек внутри диапазона, удовлетворяющих заданному критерию.
Разместим исходные данные в ячейках «A1 : I9»
Теперь мы хотим, зная номер строки и столбца какой-то ячейки нашего судоку, определить какие в этой ячейке могут быть числа.
Для начала присвоим диапазону «A1 : I9» имя «СУДОКУ».
Для примера определим количество вхождений числа 2 в строку 6
=СЧЁТЕСЛИ(ИНДЕКС(Судоку;6;);2)
Работает эта формула таким образом:
- ИНДЕКС(Судоку;5;) представляет из себя строку номер 6 нашей таблицы
- Функция СЧЕТЕСЛИ() считает количество элементов этой строки, которые равны 2
Чтобы проверить присутствие числа 2 в столбце 3, к примеру, запишем
=СЧЁТЕСЛИ(ИНДЕКС(Судоку;;3);2)
А чтобы проверить и строку и столбец просто сложим два выражения
=СЧЁТЕСЛИ(ИНДЕКС(Судоку;6;);2)+СЧЁТЕСЛИ(ИНДЕКС(Судоку;;3);2)
Об использовании функции СМЕЩ() читайте в следующей заметке. Похожие по тематике посты — еще почитать:
Судоку Подробности Создано 31 Март 2011
Пример решения головоломки «Судоку 9х9» без программирования. К экономике отношения не имеет, зато отлично показывает возможности Excel в задачах комбинаторики.
Подробно описать использованные в примере формулы не представляется возможным (желающие могут открыть «подвал» с расчетами). Алгоритм примерно такой же как вы используете при решении вручную. Сначала отсекаются заранее невозможные варианты, затем перебором подставляются оставшиеся цифры с контролем каждого шага.
Открывайте файл только в новом окне приложения Excel — это позволит автоматически установить параметры итераций.
Благодарность за идею Тимуру Чулинину. Он сказал, что видел пример на иносайте. Даже ссылку дал, но я ее, честное слово, не открывал.
Смотри также » Перекрестный расчет себестоимости
При разработке экономических моделей одной из самых интересных задач является решение проблемы перекрестных связей между формулами….
У продвинутых пользователей Excel очень популярен вопрос о возможности объединения диапазона ячеек, содержащих текст, в одну строку при…
» Распределение начислений по платежам
При ведении финансового учета в электронных таблицах обычно ограничиваются, так называемым «котловым» методом расчета задолженности…
» Календарный план выпуска изделий
Одной из самых сложных задач экономического менеджмента является составление календарного плана выпуска продукции в условиях…
» Поиск кратчайшего маршрута
При решении сложных алгоритмических задач с использование электронных таблиц иногда приходится сталкиваться с ошибками из-за…
Читайте также: