Магический квадрат представляет собой квадрат массива чисел с боковым п , состоящими из различных натуральных чисел 1, 2, ..., п ² расположены таким образом, что сумма п чисел в любом горизонтальном, вертикальном или главной диагонали всегда то же число, которое известно как магическая константа.
Ваша программа должна ввести через стандартный ввод число, указывающее длину стороны вашего квадрата, а затем числа в квадрате. Ни одно число не может быть использовано более одного раза, ни одно число больше n ² не может быть использовано, и все числа должны быть больше 0. Программа должна определить, является ли эта комбинация чисел магическим квадратом.
(i,j)
более эффективно, как одно числоx
, принимаяi=x%C
иj=x/C
для некоторых достаточно большойC
. Могу сделать это позже.APL, 35
Пояснение
x←⎕⍴⍨,⍨⎕
запрашивает ввод, формирует его в матрицу и назначает дляx
⌽
Обратить матрицу слева направо.x(...)
Создать массив матриц:x
иx
наоборот.1 1∘⍉¨
Для каждой из этих матриц взять диагональную+/↑
форму матрицы 2 × n из чисел на тех диагонали и суммировать строки⍉x
Транспонировать,x
x,
затем объединить с,x
чтобы сформировать матрицу × 2n+⌿
и суммировать столбцы(+⌿x,⍉x),+/↑1 1∘⍉¨x(⌽x←⎕⍴⍨,⍨⎕)
объединить, чтобы сформировать массив сумм,2=/
проверить, равны ли последовательные пары∧/
и объединить все эти результатыисточник
Mathematica
128125Принимает входные данные, такие как
источник
Input[r=Reverse]
чтобы сохранить байт.#&@@
Байт короче[[1]]
. Возможно, вы также можете использовать инфиксную нотациюPartition
для другого байта. ИThread
должно работать вместоTranspose
. В качестве альтернативы, используйте этот символ Unicode в качестве оператора пост-исправления (Mathematica использует его для верхнего индекса T для транспонирования).APL
4732Используя отличное решение TwiNight и применив еще несколько настроек:
Объяснение:
Для этого используются функциональные поезда, которые были введены в версии 14 интерпретатора Dyalog. APL выполняется справа налево, are - входные данные, поэтому сначала размеры, затем вектор чисел.
⎕⍴⍨, ⍨⎕ создает матрицу NxN
После этого идет последовательность функций, которые в основном представляют собой последовательность функций (между скобками), примененных к правильному аргументу. Функции:
Just возвращает только правильный аргумент (это матрица)
⍉ транспонирует правильную матрицу аргументов
1 1∘⍉ Возвращает диагональ
1 1∘⍉∘⌽ Возвращает диагональ обратной (по горизонтали) матрицы
Все результаты объединяются с помощью функции ","
В этот момент результатом является матрица, столбцы которой затем суммируются (+ ⌿). Полученные таким образом значения затем проверяются на совпадение с with / 2 = /
Я оставлю здесь свое старое решение:
принимает размерность в качестве левого аргумента, вектор элементов в качестве правого аргумента, например:
Можно попробовать онлайн здесь: www.tryapl.org
источник
GolfScript 67 ( демо )
источник
JavaScript (E6) 194
Использование подсказки для чтения ввода и отображения вывода.
Тест в консоли с FireFox> 31 (Array.fill очень новый)
Меньше гольфа
источник
Pyth,
2430 байтПопробуйте это онлайн здесь .
Редактировать: исправлена ошибка, спасибо @KevinCruijssen за сообщение: o)
источник
True
для магических квадратов с числами, которые являются слишком большими, или не все уникальные. Т.е.4
и[12,26,23,13,21,15,18,20,17,19,22,16,24,14,11,25]
или4
и[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
выводим обаTrue
. (Почти все существующие ответы имеют одну и ту же проблему, но поскольку они были опубликованы более 4 лет назад, я не стал исправлять их ошибки в комментарии.)LUA 186 символов
источник
05AB1E , 24 байта
Формат ввода:
4\n[2,16,13,3,11,5,8,10,7,9,12,6,14,4,1,15]
. Выходы1
/0
для правды / фальси соответственно.Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
источник