Судоку в excel как решать

В курсе информатики средней школы (УМК
Угриновича Н.Д.) зачастую сложные темы лучше
усваивается учениками с помощью игровых методов

В теме “Кодирование и обработка числовой
информации” есть подтема “Электронные
таблицы”, в которой ученики 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”, полностью
оправдывает себя, потому что ученик с большей
мотивацией выполняет новое задние, чем повторяет
уже привычное. И хотя при выполнении данного
задания от ученика не требуется разгадать
судоку, а только сделать форму для проверки, дети
увлекаются и стараются усложнить себе задачу,
еще и самостоятельно заполнив клеточки цифрами.
Именно для таких пытливых учеников в правых
рисунках судоку исходные ячейки выделены
полужирным шрифтом.

Мои ученики так увлекаются судоку, что
принимают участие в чемпионате СНГ по судоку
среди школьников, который проводит газета
“Информатика”, издательство “Первое
сентября”.

Судоку – математическая игра-головоломка.
Классический вариант японского судоку – это квадрат 9 * 9 клеток, в котором необходимо расставить цифры от 1 до 9 так, чтобы в каждой строке, в каждом столбце и в каждом выделенном квадрате 3 * 3 все цифры были различны.

О том, как решать судоку можно прочитать, например, здесь.

Здесь мы рассмотрим пример использования некоторых функций Excel, помогающих решить судоку.

ИНДЕКС(массив;номер_строки;номер_столбца) — возвращает значение элемента таблицы или массива, заданного номером строки и номером столбца.

  • если используется один аргумент, номер_строки или номер_столбца, то функция вернет массив значений (строку или столбец соответственно)
  • если используются оба аргумента номер_строки и номер_столбца, то функция возвращает значение, находящееся в ячейке на пересечении указанных строки и столбца.

Схематично можно представить так

СЧЁТЕСЛИ(диапазон;критерий) — подсчитывает количество ячеек внутри диапазона, удовлетворяющих заданному критерию.

Разместим исходные данные в ячейках «A1 : I9«

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

Для начала присвоим диапазону «A1 : I9» имя «СУДОКУ«.

Для примера определим количество вхождений числа 2 в строку 6

=СЧЁТЕСЛИ(ИНДЕКС(Судоку;6;);2)

Работает эта формула таким образом:

  1. ИНДЕКС(Судоку;5;) представляет из себя строку номер 6 нашей таблицы 
  2. Функция СЧЕТЕСЛИ() считает количество элементов этой строки, которые равны 2

Чтобы проверить присутствие числа 2 в столбце 3, к примеру, запишем

=СЧЁТЕСЛИ(ИНДЕКС(Судоку;;3);2)

А чтобы проверить и строку и столбец просто сложим два выражения

=СЧЁТЕСЛИ(ИНДЕКС(Судоку;6;);2)+СЧЁТЕСЛИ(ИНДЕКС(Судоку;;3);2)

Об использовании функции СМЕЩ() читайте в следующей заметке.

Похожие по тематике посты — еще почитать:

Программа для решения судоку проста в использовании. Если на Вашем компьютере имеется установленное приложение Microsoft Office Excel, просто откройте с его помощью файл, скаченный с нашего сайта, заполните то, что у Вас уже получилось и нажмите кнопку «Разгадать». Программа приступит к решению задачки, за чем Вы сможете наблюдать.

как сделать судоку в excel

Если программа вернет ошибку, то вероятнее всего Вы допустили ошибку в ведении данных.

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

Процесс угадывания редко превышает по времени 1 минуту, но может превышать этот показатель. Чтобы остановить работу программы зажмите клавишу «Esc» на клавиатуре.

Скачать Программу для решения судоку в Excel (sudoku.rar)

Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы мы могли развивать его дальше.

У Вас недостаточно прав для комментирования.

Судоку – математическая игра-головоломка.

Классический вариант японского судоку – это квадрат 9 * 9 клеток, в котором необходимо расставить цифры от 1 до 9 так, чтобы в каждой строке, в каждом столбце и в каждом выделенном квадрате 3 * 3 все цифры были различны.

О том, как решать судоку можно прочитать, например, здесь.

Здесь мы рассмотрим пример использования некоторых функций Excel, помогающих решить судоку.

ИНДЕКС(массив;номер_строки;номер_столбца)

— возвращает значение элемента таблицы или массива, заданного номером строки и номером столбца.

  • если используется один аргумент, номер_строки или номер_столбца, то функция вернет массив значений (строку или столбец соответственно)
  • если используются оба аргумента номер_строки и номер_столбца, то функция возвращает значение, находящееся в ячейке на пересечении указанных строки и столбца.

Схематично можно представить так

как сделать судоку в excel

СЧЁТЕСЛИ(диапазон;критерий) — подсчитывает количество ячеек внутри диапазона, удовлетворяющих заданному критерию.

Разместим исходные данные в ячейках «A1 : I9»

как сделать судоку в excel

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

Для начала присвоим диапазону «A1 : I9» имя «СУДОКУ».

Для примера определим количество вхождений числа 2 в строку 6

=СЧЁТЕСЛИ(ИНДЕКС(Судоку;6;);2)

Работает эта формула таким образом:

  1. ИНДЕКС(Судоку;5;) представляет из себя строку номер 6 нашей таблицы 
  2. Функция СЧЕТЕСЛИ() считает количество элементов этой строки, которые равны 2

Чтобы проверить присутствие числа 2 в столбце 3, к примеру, запишем

=СЧЁТЕСЛИ(ИНДЕКС(Судоку;;3);2)

А чтобы проверить и строку и столбец просто сложим два выражения

=СЧЁТЕСЛИ(ИНДЕКС(Судоку;6;);2)+СЧЁТЕСЛИ(ИНДЕКС(Судоку;;3);2)

Об использовании функции СМЕЩ() читайте в следующей заметке. Похожие по тематике посты — еще почитать:

Судоку Подробности Создано 31 Март 2011

Пример решения головоломки «Судоку 9х9» без программирования. К экономике отношения не имеет, зато отлично показывает возможности Excel в задачах комбинаторики.

Подробно описать использованные в примере формулы не представляется возможным (желающие могут открыть «подвал» с расчетами). Алгоритм примерно такой же как вы используете при решении вручную. Сначала отсекаются заранее невозможные варианты, затем перебором подставляются оставшиеся цифры с контролем каждого шага.

Открывайте файл только в новом окне приложения Excel — это позволит автоматически установить параметры итераций.

Благодарность за идею Тимуру Чулинину. Он сказал, что видел пример на иносайте. Даже ссылку дал, но я ее, честное слово, не открывал.

Смотри также » Перекрестный расчет себестоимости

При разработке экономических моделей одной из самых интересных задач является решение проблемы перекрестных связей между формулами….

» Объединение строк

У продвинутых пользователей Excel очень популярен вопрос о возможности объединения диапазона ячеек, содержащих текст, в одну строку при…

» Распределение начислений по платежам

При ведении финансового учета в электронных таблицах обычно ограничиваются, так называемым «котловым» методом расчета задолженности…

» Календарный план выпуска изделий

Одной из самых сложных задач экономического менеджмента является составление календарного плана выпуска продукции в условиях…

» Поиск кратчайшего маршрута

При решении сложных алгоритмических задач с использование электронных таблиц иногда приходится сталкиваться с ошибками из-за…

Судоку

Подробности
Создано 31 Март 2011

Пример решения головоломки «Судоку 9х9» без программирования. К экономике отношения не имеет, зато отлично показывает возможности Excel в задачах комбинаторики.

Подробно описать использованные в примере формулы не представляется возможным (желающие могут открыть «подвал» с расчетами). Алгоритм примерно такой же как вы используете при решении вручную. Сначала отсекаются заранее невозможные варианты, затем перебором подставляются оставшиеся цифры с контролем каждого шага.

Открывайте файл только в новом окне приложения Excel — это позволит автоматически установить параметры итераций.

Благодарность за идею Тимуру Чулинину. Он сказал, что видел пример на иносайте. Даже ссылку дал, но я ее, честное слово, не открывал.

Смотри также

» Перекрестный расчет себестоимости

При разработке экономических моделей одной из самых интересных задач является решение проблемы перекрестных связей между формулами….

» Объединение строк

У продвинутых пользователей Excel очень популярен вопрос о возможности объединения диапазона ячеек, содержащих текст, в одну строку при…

» Распределение начислений по платежам

При ведении финансового учета в электронных таблицах обычно ограничиваются, так называемым «котловым» методом расчета задолженности…

» Календарный план выпуска изделий

Одной из самых сложных задач экономического менеджмента является составление календарного плана выпуска продукции в условиях…

» Поиск кратчайшего маршрута

При решении сложных алгоритмических задач с использование электронных таблиц иногда приходится сталкиваться с ошибками из-за…

Здесь, на Среднем Западе, мы немного медлительны. Недавно журнал Akron Beacon Journal начал публиковать ежедневные головоломки судоку на страницах комиксов. Вау! Поговорим о расточителе времени! Я почти пристрастился к разгадыванию этих головоломок.

Судоку — это сетка 9×9. В газете каждый день могут заполнять 20-30% из 81 числа в сетке. Ваша цель — заполнить оставшиеся числа. Каждая строка, столбец и подсетка 3×3 должны содержать каждую из цифр от 1 до 9 без повторения цифр.

Судоку

Когда вы рассматриваете загадку выше, верхний левый квадрат не может содержать 1, 5, 6 или 8, потому что эти числа уже появляются в первом столбце. Верхний левый квадрат не может содержать 4 или 9, потому что эти числа уже находятся в той же строке. Он не может содержать 4, потому что 4 появляется в верхней левой подсетке 3×3. Таким образом, возможные числа для верхней левой ячейки — 2, 3 или 7. Попытка решить загадку из утренней газеты быстро отнимает все время на завтрак и может привести к опозданию на работу, если вы не будете осторожны.

Входит Майк Олдройд. Несколько месяцев назад он прислал мне книгу Excel для решения судоку. Майк пишет: «Несколько дней назад я решил попробовать использовать Excel для решения головоломок Soduku. Прилагаю результат. Я не защищал код VBA, поэтому любой желающий может заглянуть внутрь, чтобы посмотреть, как он работает».

У Майка очень классная рабочая тетрадь. Это дает вам полное решение за несколько секунд. Теперь я могу сосредоточиться на написании следующей книги Excel, вместо того, чтобы решать эти головоломки. Возможно, было бы круче, если бы я адаптировал рабочую тетрадь для решения головоломки, но показал бы только один квадрат, на котором я застрял. Иногда, если бы я мог решить только один квадрат, остальная часть головоломки начинала становиться на свои места.

Итак — большое спасибо Майку за участие в этой книге. Я заархивировал его по этой ссылке.

Чтобы узнать больше о Майке, посетите http://www.mikeoldroyd.com/.

Обновить! Джоби Джонс из графства Суррей, Англия, прислал рабочую тетрадь, которая является помощником по судоку. Вместо того, чтобы дать вам решение, он быстро выполняет большую часть работы, связанной с решением судоку.

Введите головоломку в его сетку, и многие формулы предоставят статистику. Дело в том, что цифры от 1 до 9 в сумме дают 45, поэтому сначала Джоби вычисляет общее количество для каждой строки, столбца, подсетки и сравнивает его с 45. Он сообщает, какие числа отсутствуют в строке, столбце и каждом подсетка.

Мне больше всего нравится этот раздел, где он показывает, какие числа все еще возможны в каждой ячейке сетки. Ясно, что во 2-м столбце 5-й строки должна быть цифра 9, поскольку это единственное оставшееся значение.

Образец Джоби Джонса

Если вы все еще хотите поработать над решением судоку, загрузите этот архив sudoku2.zip. Этот файл был обновлен до версии 2 10 августа 2006 г.

Подсказка

Если у вас есть обе программы, вы можете ввести головоломку в одной форме, а затем использовать Копировать / Вставить специальные — Значения для копирования в другую программу.

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

Обновите снова! Джерри из Эри, штат Нью-Йорк, прислал еще одну рабочую тетрадь, посвященную решению судоку. Этот классный, потому что он позволяет вам увидеть, как итеративно решать судоко. Введите загадку из бумаги. Рабочая тетрадь Джерри показывает, какие квадраты можно решить прямо сейчас. Щелкните Решить, чтобы поместить эти числа в сетку. Затем новые квадраты загораются желтым цветом, как решаемые. Нажмите Решить, чтобы поместить эти квадраты в сетку. Если вы новичок в судоку, это поможет вам понять, что решение судоку — это пошаговый процесс.

Войдите в загадку в верхней левой сетке.

Джерри из Эри Сэмпл — 1

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

Джерри из Эри Сэмпл — 2

Вот как он узнает, что в правом нижнем квадрате должна быть 6: все остальные числа от 1 до 9 уже используются: 2, 3, 4 и 5 находятся в той же строке. 4, 7 и 9 находятся в одном столбце. 1, 2, 5 и 8 находятся в одной подгруппе. Это означает, что осталась единственная возможность — 6.

Джерри из Эри Сэмпл — 3

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

Вот хороший пример из второго тура. В правом столбце три незаполненные ячейки. Все они могут содержать 3. На желтом может быть только 3, это означает, что квадрат с вероятностью 3 или 8 должен быть 8. В этих случаях квадрат 3,8 выделяется светло-желтым, а когда вы нажмете решить, в сетку будет отправлено 8. Нижняя правая сетка показывает вам, какие из светло-желтых чисел попадут в сетку.

Джерри из Эри Сэмпл — 4

Спасибо Джерри за помощь в этой книге. Загрузите его в архиве с JerrySuduko.zip.

Обновление на 2010 год! Дэвид Доусон из Сиднея прислал свою версию решателя MS Excel Suduko. Интерфейс красочный и предлагает не только рабочую версию головоломки, но и стартовую.

Пример Дэвида Доусона — 1
Пример Дэвида Доусона — 2

Вы можете загрузить заархивированную версию David’s Puzzle с помощью DDawsonSuduko.zip.

Image 1

Introduction

There is no shortage of Sudoku solvers implemented in all possible languages. But I could not find one that works in Excel. This article describes how to build Sudoku solver and generator in C# and expose it to Excel using Excel-DNA. The solver/generator algorithm is very basic and easy to follow.

Background

Excel is perfect for working with numbers arranged on the grid, so adding ability to generate and solve Sudoku puzzles is fairly straightforward. The solver is implemented in C# and exported to Excel with the help of Excel-DNA library.

Using the Code

The following Excel functions have been implemented for solving Sudoku puzzles.

  1. acq_sudoku_generate — generates a random Sudoku puzzle. Takes an optional seed as an argument. if seed is not specified, it uses computer ticks as a seed. The function produces 9×9 matrix, and therefore needs to be entered in Excel as an array formula (Ctrl+Shift+Enter)
  2. acq_sudoku_solve — solves Sudoku puzzle. Takes 9×9 Sudoku puzzle as an input argument and produces solved 9×9. Needs to be entered in Excel as an array formula (Ctrl+Shift+Enter).
  3. acq_sudoku_solution_count — Returns a number of possible solutions to the specified puzzle. Normally, there should be only one solution, but if you manually remove digits from the puzzle, number of possible solutions goes up. The function stops counting solutions after 1024 are found.

Puzzle generator is implemented in ACQ.Math.Sudoku.Generate. We call it from Excel wrapper function by first checking the seed argument. Generate function produces 9 x 9 array. Elements equal to zero in this array represent empty Sudoku cells. Since we don’t want Excel to show zeros, we convert int array to array of objects and replace zeros with empty strings.

[ExcelFunction(Description = "Generate Sudoku puzzle", IsThreadSafe = true)]
public static object[,] acq_sudoku_generate(object seed)
{
    int[,] grid;
    if (seed != null && seed is double)
    {
        grid = ACQ.Math.Sudoku.Generate((int)(double)seed);
    }
    else
    {
        grid = ACQ.Math.Sudoku.Generate();
    }
    
    object[,] result = new object[grid.GetLength(0), grid.GetLength(1)];
    for (int i = 0; i < grid.GetLength(0); i++)
    {
        for (int j = 0; j < grid.GetLength(1); j++)
        {
            if (grid[i, j] == 0)
                result[i, j] = String.Empty;
            else
                result[i, j] = grid[i, j];
        }
    }
    return result;
}

Solving is done in ACQ.Math.Sudoku with a very primitive recursive algorithm. The function returns all the solutions up to specified maximum (1 in the code below). ExcelHelper.BoxArray converts int[,] into object[,]. If now solutions are found, ExcelError.ExcelErrorNull is returned. The function does not check that solution is unique.

[ExcelFunction(Description = "Solve Sudoku puzzle", IsThreadSafe = true)]
public static object[,] acq_sudoku_solve(object[,] grid)
{
    const int size = 9;
    int[,] sudoku = acq_sudoku_convertgrid(grid, size);
    if (sudoku != null)
    {
        List<int[,]> solutions = new List<int[,]>();
        ACQ.Math.Sudoku.Solve(sudoku, solutions, 1);
        if (solutions.Count > 0)
        {
            return ExcelHelper.BoxArray(solutions[0]);
        }
    }   
    return ExcelHelper.CreateArray(1, 1, ExcelError.ExcelErrorNull);
}

Code for the function that returns a number of possible Sudoku solutions is shown below. The implementation is almost identical to acq_sudoku_solve. This function can be used to track your progress when you are solving Sudoku puzzle manually in Excel. The number of possible solutions becomes zero when you make a mistake.

[ExcelFunction(Description = "Count solutions to Sudoku puzzle", IsThreadSafe = true)]
public static int acq_sudoku_solution_count(object[,] grid)
{
    const int size = 9;
    const int max_count = 1024;
    int[,] sudoku = acq_sudoku_convertgrid(grid, size);
    int count = 0;
    if (sudoku != null)
    {
        List<int[,]> solutions = new List<int[,]>();
        ACQ.Math.Sudoku.Solve(sudoku, solutions, max_count);
        count = solutions.Count;                
    }
    return count;
}

The algorithm used for solving Sudoku puzzle, is simple recursion. There are much better algorithms out there, therefore it is not listed here (search code for ACQ.Math.Sudoku.Solve for more details).

Puzzle generation is a little more interesting. On the first step, Knuth shuffle (a.k.a. the Fisher-Yates shuffle) is used to fill diagonal 3 x 3 blocks (as shown in Figure below). These blocks are independent and therefore can be filled randomly. Then puzzle is solved and numbers are randomly removed from the puzzle while there is still a unique solution.

Image 2

The latest version is available at https://github.com/ratesquant/ACQ.

Acknowledgment

This ACQ add-in is based on Excel-DNA https://exceldna.codeplex.com/. Thanks to Govert van Drimmelen (creator of Excel-DNA) for making it happen.

Currently use C++, C# and Python. Pascal, Delphi and FORTRAN in the past.

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Студенты какой специальности изобрели прототип электронной таблицы excel
  • Сумм в excel одного аргумента
  • Сувениру от word of
  • Сумм в excel какая категория
  • Струмпэ оператор эвм word

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии