Исходник программы, показывающей пример создания пазла, в котором нужно найти 86 различных комбинаций из 4 чисел в квадрате, которые в сумме дают число 34.
Волшебный квадрат Дюрера изображен на известной медной гравюре «Меланхолия» (первый магический квадрат, опубликованный в Европе), созданной в 1514 году немецким художником Альбрехтом Дюрером.
Программа будет последовательно отображать все 86 способов выбрать четыре числа, сумма которых равна 34. Первые 20 решений найти не так уж сложно. После этого поиск решений путем визуального осмотра становится все труднее.
Программирование этой задачи довольно простое. StringGrid используется для отображения квадрата и OnDrawCell для выделения текущего набора ячеек, выбранных пользователем. Для этого массив строк S содержит выбранные значения ячеек. По мере рисования каждой ячейки ее значение сравнивается со значениями в S, и, если найдено совпадение, ячейка выделяется. Пользовательские решения помещаются в список строк Listbox. Чтобы заблокировать повторяющиеся решения, мы сортируем четыре числа перед добавлением их в список, чтобы можно было использовать процедуру Items.IndexOf для проверки дублирующихся решений.