Группы симметрии магических квадратов 4*4
Так же как для позиций ферзей,не атакующих друг друга,здесь можно выделить группы симметрии. Магические квадраты не переходят сами в себя при симметричных преобразованиях,так что этих групп будет 880(7040:8). Ниже приведена программа для их получения.Здесь не приводятся номера квадратов в группах,которые они имеют в списке полученном с помощью 1-й программы – этот расчёт занял бы много времени. Приводятся номера только первых позиций в группе (n0). Номера приведены только для 1-й группы. Как и следовало ожидать их сумма равна 7041*4=28164,т.к. сумма номеров позиций связанных симметрией отражения в данном случае от вертикальной оси равна n+1,где n – полное количество обьектов.
Чтобы нам хватило обьёма памяти для массивов, мы работаем с QBasic-ом 4.5(1.1 не годится). Кроме этого,величину массивов задаём переменной.
CLS
DEFINT A-Z
OPEN "mag4sn2" FOR OUTPUT AS #1
g = 7040
p = 3500
DIM n(16)
DIM c1(g), c2(g), c3(g), c4(g), c5(g), c6(g), c7(g), c8(g)
DIM c9(g), c10(g), c11(g), c12(g), c13(g), c14(g), c15(g), c16(g)
DIM b1(p), b2(p), b3(p), b4(p), b5(p), b6(p), b7(p), b8(p)
DIM b9(p), b10(p), b11(p), b12(p), b13(p), b14(p), b15(p), b16(p)
FOR a1 = 1 TO 16
FOR a2 = 1 TO 16
IF a2 = a1 THEN 1
FOR a3 = 1 TO 16
IF a3 = a2 OR a3 = a1 THEN 2
a4 = 34 - a1 - a2 - a3
IF a4 <= 0 OR a4 > 16 THEN 2
IF a4 = a3 OR a4 = a2 OR a4 = a1 THEN 2
x(1) = a1: y(1) = a2: z(1) = a3: w(1) = a4
FOR a5 = a1 TO 16
IF a5 = a4 OR a5 = a3 OR a5 = a2 OR a5 = a1 THEN 4
FOR a6 = 1 TO 16
IF a6 = a5 OR a6 = a4 OR a6 = a3 OR a6 = a2 OR a6 = a1 THEN 5
a7 = 34 - a1 - a5 - a6
IF a7 <= 0 OR a7 > 16 THEN 5
IF a7 = a6 OR a7 = a5 OR a7 = a4 OR a7 = a3 OR a7 = a2 OR a7 = a1 THEN 5
x(2) = a5: x(3) = a6: x(4) = a7
FOR a8 = 1 TO 16
IF a8 = a7 OR a8 = a6 OR a8 = a5 OR a8 = a4 OR a8 = a3 OR a8 = a2 OR a8 = a1 THEN 6
FOR a9 = 1 TO 16
IF a9 = a8 OR a9 = a7 OR a9 = a6 OR a9 = a5 OR a9 = a4 OR a9 = a3 OR a9 = a2 OR a9 = a1 THEN 7
a10 = 34 - a1 - a8 - a9
IF a10 <= 0 OR a10 > 16 THEN 7
IF a10 = a9 OR a10 = a8 OR a10 = a7 OR a10 = a6 OR a10 = a5 OR a10 = a4 OR a10 = a3 OR a10 = a2 OR a10 = a1_ THEN 7
y(2) = a8: z(3) = a9: w(4) = a10
w(2) = 0
21 w(2) = w(2) + 1
IF w(2) > 16 THEN 7
w(3) = 34 - w(1) - w(2) - w(4)
IF w(3) <= 0 OR w(3) > 16 THEN 21
z(2) = 34 - x(2) - y(2) - w(2)
IF z(2) <= 0 OR z(2) > 16 THEN 21
y(3) = 34 - x(3) - z(3) - w(3)
IF y(3) <= 0 OR y(3) > 16 THEN 21
y(4) = 34 - y(1) - y(2) - y(3)
IF y(4) <= 0 OR y(4) > 16 THEN 21
z(4) = 34 - z(1) - z(2) - z(3)
IF z(4) <= 0 OR z(4) > 16 THEN 21
IF z(1) + z(2) + z(3) + z(4) <>34 THEN 21
IF x(4) + y(3) + z(2) + w(1) <> 34 THEN 21
n(1) = x(1): n(2) = y(1): n(3) = z(1): n(4) = w(1)
n(5) = x(2): n(6) = y(2): n(7) = z(2)
n(8) = w(2): n(9) = x(3): n(10) = y(3): n(11) = z(3)
n(12) = w(3): n(13) = x(4): n(14) = y(4): n(15) = z(4): n(16) = w(4)
FOR i = 1 TO 16
FOR j = 1 TO 16
h = n(i) - n(j)
IF h = 0 AND i <> j THEN 21
NEXT
NEXT
k = k + 1
b1(k) = x(1): b2(k) = y(1): b3(k) = z(1): b4(k) = w(1)
b5(k) = x(2): b6(k) = y(2): b7(k) = z(2): b8(k) = w(2)
b9(k) = x(3): b10(k) = y(3): b11(k) = z(3): b12(k) = w(3)
b13(k) = x(4): b14(k) = y(4): b15(k) = z(4): b16(k) = w(4)
IF k = p THEN 100
7 NEXT a9
6 NEXT a8
5 NEXT a6
4 NEXT a5
2 NEXT a3
1 NEXT a2
NEXT a1
100 o = o + 1
IF o = p THEN END
FOR l = 1 TO m
IF b1(o) = c1(l) AND b2(o) = c2(l) AND b3(o) = c3(l) AND b4(o) = c4(l) AND b5(o) = c5(l) AND b6(o) = c6(l) AND b7(o) = c7(l) AND b8(o) = c8(l) AND b9(o) = c9(l) AND b10(o) = c10(l) AND b11(o) = c11(l) AND b12(o) = c12(l) THEN 100
NEXT
e = e + 1
r = r + 1
PRINT "группа"; e; " n0="; o
PRINT #1, "группа"; e; " n0="; o
PRINT #1, r
PRINT #1, b1(o); b2(o); b3(o); b4(o)
PRINT #1, b5(o); b6(o); b7(o); b8(o)
PRINT #1, b9(o); b10(o); b11(o); b12(o)
PRINT #1, b13(o); b14(o); b15(o); b16(o)
PRINT #1, " "
a1 = b1(o): a2 = b2(o): a3 = b3(o): a4 = b4(o)
a5 = b5(o): a6 = b6(o): a7 = b7(o): a8 = b8(o)
a9 = b9(o): a10 = b10(o): a11 = b11(o): a12 = b12(o)
a13 = b13(o): a14 = b14(o): a15 = b15(o): a16 = b16(o)
'симметрия относительно гор. оси
x(1) = a13: y(1) = a14: z(1) = a15: w(1) = a16
x(2) = a9: y(2) = a10: z(2) = a11: w(2) = a12
x(3) = a5: y(3) = a6: z(3) = a7: w(3) = a8
x(4) = a1: y(4) = a2: z(4) = a3: w(4) = a4
GOSUB 11
GOSUB 12
'симметрия относительно верт.оси
x(1) = a4: y(1) = a3: z(1) = a2: w(1) = a1
x(2) = a8: y(2) = a7: z(2) = a6: w(2) = a5
x(3) = a12: y(3) = a11: z(3) = a10: w(3) = a9
x(4) = a16: y(4) = a15: z(4) = a14: w(4) = a13
GOSUB 11
GOSUB 12
'симметрия относительно диагонали " \ "
x(1) = a1: y(1) = a5: z(1) = a9: w(1) = a13
x(2) = a2: y(2) = a6: z(2) = a10: w(2) = a14
x(3) = a3: y(3) = a7: z(3) = a11: w(3) = a15
x(4) = a4: y(4) = a8: z(4) = a12: w(4) = a16
GOSUB 11
GOSUB 12
'симметрия относительно диагонали " / "
x(1) = a16: y(1) = a12: z(1) = a8: w(1) = a4
x(2) = a15: y(2) = a11: z(2) = a7: w(2) = a3
x(3) = a14: y(3) = a10: z(3) = a6: w(3) = a2
x(4) = a13: y(4) = a9: z(4) = a5: w(4) = a1
GOSUB 11
GOSUB 12
'поворот на 90 гр.
x(1) = a4: y(1) = a8: z(1) = a12: w(1) = a16
x(2) = a3: y(2) = a7: z(2) = a11: w(2) = a15
x(3) = a2: y(3) = a6: z(3) = a10: w(3) = a14
x(4) = a1: y(4) = a5: z(4) = a9: w(4) = a13
GOSUB 11
GOSUB 12
'поворот на 180 гр.
x(1) = a16: y(1) = a15: z(1) = a14: w(1) = a13
x(2) = a12: y(2) = a11: z(2) = a10: w(2) = a9
x(3) = a8: y(3) = a7: z(3) = a6: w(3) = a5
x(4) = a4: y(4) = a3: z(4) = a2: w(4) = a1
GOSUB 11
GOSUB 12
'поворот на 270 гр.
x(1) = a13: y(1) = a9: z(1) = a5: w(1) = a1
x(2) = a14: y(2) = a10: z(2) = a6: w(2) = a2
x(3) = a15: y(3) = a11: z(3) = a7: w(3) = a3
x(4) = a16: y(4) = a12: z(4) = a8: w(4) = a4
GOSUB 11
GOSUB 12
GOTO 100
END
11 PRINT " "
r = r + 1
PRINT x(1); y(1); z(1); w(1)
PRINT x(2); y(2); z(2); w(2)
PRINT x(3); y(3); z(3); w(3)
PRINT x(4); y(4); z(4); w(4)
PRINT #1, r
PRINT #1, x(1); y(1); z(1); w(1)
PRINT #1, x(2); y(2); z(2); w(2)
PRINT #1, x(3); y(3); z(3); w(3)
PRINT #1, x(4); y(4); z(4); w(4)
IF r / 8 = INT(r / 8) THEN PRINT #1, "*********************"
RETURN
12 m = m + 1
c1(m) = x(1): c2(m) = y(1): c3(m) = z(1): c4(m) = w(1)
c5(m) = x(2): c6(m) = y(2): c7(m) = z(2): c8(m) = w(2)
c9(m) = x(3): c10(m) = y(3): c11(m) = z(3): c12(m) = w(3)
c13(m) = x(4): c14(m) = y(4): c15(m) = z(4): c16(m) = w(4)
RETURN
группа 1 n0= 1
1
1 2 15 16 :1
12 14 3 5
13 7 10 4
8 11 6 9
2
8 11 6 9 :3334
13 7 10 4
12 14 3 5
1 2 15 16
3
16 15 2 1 :7040
5 3 14 12
4 10 7 13
9 6 11 8
4
1 12 13 8 :222
2 14 7 11
15 3 10 6
16 5 4 9
5
9 4 5 16 :3603
6 10 3 15
11 7 14 2
8 13 12 1
6
16 5 4 9 :6819
15 3 10 6
2 14 7 11
1 12 13 8
7
9 6 11 8 :3707
4 10 7 13
5 3 14 12
16 15 2 1
8
8 13 12 1 :3438
11 7 14 2
6 10 3 15
9 4 5 16
*********************
группа 2 n0= 2
9
1 2 15 16
13 14 3 4
12 7 10 5
8 11 6 9
10
8 11 6 9
12 7 10 5
13 14 3 4
1 2 15 16
11
16 15 2 1
4 3 14 13
5 10 7 12
9 6 11 8
12
1 13 12 8
2 14 7 11
15 3 10 6
16 4 5 9
13
9 5 4 16
6 10 3 15
11 7 14 2
8 12 13 1
14
16 4 5 9
15 3 10 6
2 14 7 11
1 13 12 8
15
9 6 11 8
5 10 7 12
4 3 14 13
16 15 2 1
16
8 12 13 1
11 7 14 2
6 10 3 15
9 5 4 16
*********************
группа 3 n0= 3
17
1 2 16 15
13 14 4 3
12 7 9 6
8 11 5 10
18
8 11 5 10
12 7 9 6
13 14 4 3
1 2 16 15
19
15 16 2 1
3 4 14 13
6 9 7 12
10 5 11 8
20
1 13 12 8
2 14 7 11
16 4 9 5
15 3 6 10
21
10 6 3 15
5 9 4 16
11 7 14 2
8 12 13 1
22
15 3 6 10
16 4 9 5
2 14 7 11
1 13 12 8
23
10 5 11 8
6 9 7 12
3 4 14 13
15 16 2 1
24
8 12 13 1
11 7 14 2
5 9 4 16
10 6 3 15
*********************
группа 4 n0= 4
25
1 3 14 16
10 13 4 7
15 6 11 2
8 12 5 9
26
8 12 5 9
15 6 11 2
10 13 4 7
1 3 14 16
27
16 14 3 1
7 4 13 10
2 11 6 15
9 5 12 8
28
1 10 15 8
3 13 6 12
14 4 11 5
16 7 2 9
29
9 2 7 16
5 11 4 14
12 6 13 3
8 15 10 1
30
16 7 2 9
14 4 11 5
3 13 6 12
1 10 15 8
31
9 5 12 8
2 11 6 15
7 4 13 10
16 14 3 1
32
8 15 10 1
12 6 13 3
5 11 4 14
9 2 7 16
*********************
группа 5 n0= 5
33
1 3 14 16
12 13 4 5
15 8 9 2
6 10 7 11
34
6 10 7 11
15 8 9 2
12 13 4 5
1 3 14 16
35
16 14 3 1
5 4 13 12
2 9 8 15
11 7 10 6
36
1 12 15 6
3 13 8 10
14 4 9 7
16 5 2 11
37
11 2 5 16
7 9 4 14
10 8 13 3
6 15 12 1
38
16 5 2 11
14 4 9 7
3 13 8 10
1 12 15 6
39
11 7 10 6
2 9 8 15
5 4 13 12
16 14 3 1
40
6 15 12 1
10 8 13 3
7 9 4 14
11 2 5 16
*********************
----------------------------
----------------------------
группа 876 n0= 2999
7001
9 14 3 8
16 7 10 1
4 11 6 13
5 2 15 12
7002
5 2 15 12
4 11 6 13
16 7 10 1
9 14 3 8
7003
8 3 14 9
1 10 7 16
13 6 11 4
12 15 2 5
7004
9 16 4 5
14 7 11 2
3 10 6 15
8 1 13 12
7005
12 13 1 8
15 6 10 3
2 11 7 14
5 4 16 9
7006
8 1 13 12
3 10 6 15
14 7 11 2
9 16 4 5
7007
12 15 2 5
13 6 11 4
1 10 7 16
8 3 14 9
7008
5 4 16 9
2 11 7 14
15 6 10 3
12 13 1 8
*********************
группа 877 n0= 3009
7009
9 15 2 8
16 6 11 1
4 10 7 13
5 3 14 12
7010
5 3 14 12
4 10 7 13
16 6 11 1
9 15 2 8
7011
8 2 15 9
1 11 6 16
13 7 10 4
12 14 3 5
7012
9 16 4 5
15 6 10 3
2 11 7 14
8 1 13 12
7013
12 13 1 8
14 7 11 2
3 10 6 15
5 4 16 9
7014
8 1 13 12
2 11 7 14
15 6 10 3
9 16 4 5
7015
12 14 3 5
13 7 10 4
1 11 6 16
8 2 15 9
7016
5 4 16 9
3 10 6 15
14 7 11 2
12 13 1 8
*********************
группа 878 n0= 3160
7017
10 11 6 7
16 8 9 1
3 13 4 14
5 2 15 12
7018
5 2 15 12
3 13 4 14
16 8 9 1
10 11 6 7
7019
7 6 11 10
1 9 8 16
14 4 13 3
12 15 2 5
7020
10 16 3 5
11 8 13 2
6 9 4 15
7 1 14 12
7021
12 14 1 7
15 4 9 6
2 13 8 11
5 3 16 10
7022
7 1 14 12
6 9 4 15
11 8 13 2
10 16 3 5
7023
12 15 2 5
14 4 13 3
1 9 8 16
7 6 11 10
7024
5 3 16 10
2 13 8 11
15 4 9 6
12 14 1 7
*********************
группа 879 n0= 3168
7025
10 13 4 7
15 8 9 2
3 12 5 14
6 1 16 11
7026
6 1 16 11
3 12 5 14
15 8 9 2
10 13 4 7
7027
7 4 13 10
2 9 8 15
14 5 12 3
11 16 1 6
7028
10 15 3 6
13 8 12 1
4 9 5 16
7 2 14 11
7029
11 14 2 7
16 5 9 4
1 12 8 13
6 3 15 10
7030
7 2 14 11
4 9 5 16
13 8 12 1
10 15 3 6
7031
11 16 1 6
14 5 12 3
2 9 8 15
7 4 13 10
7032
6 3 15 10
1 12 8 13
16 5 9 4
11 14 2 7
*********************
группа 880 n0= 3180
7033
10 15 3 6
16 5 9 4
1 12 8 13
7 2 14 11
7034
7 2 14 11
1 12 8 13
16 5 9 4
10 15 3 6
7035
6 3 15 10
4 9 5 16
13 8 12 1
11 14 2 7
7036
10 16 1 7
15 5 12 2
3 9 8 14
6 4 13 11
7037
11 13 4 6
14 8 9 3
2 12 5 15
7 1 16 10
7038
6 4 13 11
3 9 8 14
15 5 12 2
10 16 1 7
7039
11 14 2 7
13 8 12 1
4 9 5 16
6 3 15 10
7040
7 1 16 10
2 12 5 15
14 8 9 3
11 13 4 6
*********************