Тема: Магічні квадрати
Магічний квадрат NxN це 2 вимірний масив цілих чисел, де
кожний елемент квадрата унікальний
кожний ряд містить N цілих чисел, сума яких = S
кожна колона містить N цілих чисел, сума яких = S
для кожної з кутових діагоналів, сума чисел діагоналі = S
де S ціле число.
Як майстер магічних мистецтв магістр математичних наук, ділюсь знанями які майже забув і не давно згадав.
3x3
Python 3:
def A_f(x, y): return 1 - (1 - x + y) % 3
def B_f(x, y): return 1 - (x - 1 + y) % 3
def magic_square_f(w, h, v, l):
return [
[ + A_f(x, y) * v[0]
+ B_f(x, y) * v[1]
+ l
for x in range(w)
] for y in range(h)
]
for a in [+1, -1]:
for b in [+3, -3]:
for v in [[a, b], [b, a]]:
print(magic_square_f(3, 3, v, +5))
JavaScript:
const mod = (x, m) => (x % m + m) % m;
const A_f = (x, y) => 1 - mod(1 - x + y, 3);
const B_f = (x, y) => 1 - mod(x - 1 + y, 3);
let n = 0;
const magic_square_log = (w, h, v, l) => {
let s = 'Magic #' + ++n;
for(let y = 0; y < h; ++y) {
s += "\r\n";
for(let x = 0; x < w; ++x) {
let value = l;
value += A_f(x, y) * v[0];
value += B_f(x, y) * v[1];
s += x === 0 ? "\t" : ' ';
s += value;
}
}
console.log(s);
}
for(let a of [+1, -1])
for(let b of [+3, -3])
for(let v of [[a, b], [b, a]])
magic_square_log(3, 3, v, +5);