Skip to content

Xanaj-Kimberly/MagicSquare

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

MagicSquare

Growing Normal Magic Squares - NumPy + PyGame

Выращивание магических квадратов с помощью Python + [NumPy + PyGame + SortedContainers].

Использование:

В программе уже есть готовые пресеты для магических квадратов 3х3, 4х4, 5х5 и 7х7. Если вас интересует, как создать свой пресет, следуйте следующим простым шагам:

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

  2. Нарисуйте пустой квадрат со стороной n

  3. Напишите над верхней стороной квадрата цифры от 0 до n-1, по одной цифре над каждым столбцом, слева-направо. Это - X координата

  4. Напишите с левой стороны квадрата цифры от 0 до n-1, по одной цифре перед каждой строкой, сверху-вниз. Это - Y координата.

  5. Начните переписывать числа из имеющегося ассоциативного магического квадрата в следующем порядке:

5.1) Начните с цифры 1. Найдите ее в магическом квадрате.

5.2) Если она находится не на координатах [0, 0], запишите ее координаты рядом с магическим квадратом и перепишите цифру 1 в пустой квадрат на ту же позицию.

5.3) Найдите в магическом квадрате число, которое должно было находиться там, где вы нашли 1. Это число рассчитывается по формуле (X + 1) + (Y * X).

5.4) Запишите координаты этого следующего числа после координат цифры 1.

5.5) Продолжайте шаги 5.2 - 5.4 до тех пор, пока цикл не будет замкнут, т.е., до тех пор, пока следующим магическим числом не окажется 1.

5.6) Выберите другую цифру из магического квадрата, которой соответствует пустая клетка в частично заполненном квадрате, и повторите шаги 5.2 - 5.5, записывая координаты чисел в новой строке.

5.7) Если число, которое вы выбрали, стоит "на своем месте" (i == (X + 1) + (Y * X)), не переписывайте его координаты.

  1. Вы получили один или несколько цепочек координат. Теперь перепишите их в файл программы, под другими пресетами, в обратном порядке в следующем виде:

    [[<---------Первая цепочка координат----------], [<----------Вторая цепочка координат----------], [<---------Третья цепочка координат---------], ...]

---V (замените n на число, равное длине стороны квадрата)

m_n = [[[Xn-1, Yn-1], ... , [X2, Y2], [X1, Y1], [X0, Y0]], [[Xn-1, Yn-1], ... , [X2, Y2], [X1, Y1], [X0, Y0]], [[Xn-1, Yn-1], ... ,[X2, Y2], [X1, Y1], [X0, Y0]], ...]

Для проверки правильности записи нового пресета, вы можете использовать готовые пресеты.

  1. Готовую последовательность можно использовать, изменив строки: pow = 6 (нужная степень основания >= 1) root = n (заменить n на число, равное длине стороны квадрата) m1 = pow_square(root, pow, m_n) (заменить n на число, равное длине стороны квадрата)

Если все сделано правильно, вы получите изображение, обладающее поворотной симметрией (может зависеть от свойств монитора - особенно для больших магических квадратов). Когда вы закроете окно с рисунком, программа выведет суммы для строк, столбцов и диагоналей, чтобы вы могли проверить, является ли квадрат магическим. Также, вы можете попробовать использовать инструкцию to_csv(m1, path), чтобы сохранить магический квадрат для дальнейшей работы с ним в MS Excel, или другом редакторе таблиц.

Остальные функции программы используются, в основном, только для тестирования.

Примечания:

Программа обозначает точками на рисунке числа, оставшиеся на исходных координатах.

About

Growing Normal Magic Squares - NumPy + PyGame

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages