Группы симметрии магических квадратов 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

*********************

 



Конструктор сайтов - uCoz