Пять ферзей.

 Противоположная задача задаче о безопасности ферзей – задача об их доминировании, т.е. когда ферзи держат под боем все поля доски. Минимальное количество ферзей, которое может это осуществить на обычной доске(впрочем и на досках 9*9,10*10 и 11*11)- пять. Данная программа находит все расстановки 5-и ферзей на обычной доске, когда все поля находятся под атакой. Используется алгоритм с полным перебором, который, конечно, самый медленный. Однако он позволяет обсчитать все указанные доски в одной программе.(Ниже приведена программа для доски 8*8, но записать её в обобщённом виде не представляет проблемы. Для уменьшения времени счёта программу следует компилировать.) Результаты расчёта для досок 9*9,10*10 и 11*11 здесь приведены. Этих данных я не нашёл ни в сети, ни в литературе.(Неужели это первая их публикация?} Приводятся также группы симметрии этих позиций. Приведены программы расчёта позиций доминирования для слонов и королей на доске 8*8.

Идея расчёта состоит в том, что генерируются сочетания по 5 из 64, каждое из которых можно сопоставить с расположением 5-и ферзей на доске, клетки которой нумеруются снизу вверх последовательно в каждом столбце.По номеру клетки получаем столбец (x) и строчку (y) расположения ферзя. Время счёта компилированной программы для доски 8*8 составляет 13-14 минут, что конечно  меньше времени написания эвристик, позволяющих сократить перебор. Правда доска 11*11 обсчитывается часов 12, но ведь расчёт достаточно провести всего один раз.

  CLS

OPEN "domsof5" FOR OUTPUT AS #1

  DIM y(5) AS INTEGER

  FOR n1% = 1 TO 64                ' можно TO 60

 FOR n2% = n1% + 1 TO 64       ' можно TO 61

  FOR n3% = n2% + 1 TO 64     ' можно TO 62

 FOR n4% = n3% + 1 TO 64      ' можно  TO 63

  FOR n5% = n4% + 1 TO 64

  GOTO 2

1 NEXT n5%

 NEXT n4%

 NEXT n3%

 NEXT n2%

 NEXT n1%

 END

2 y(1) = n1% MOD 8

IF y(1) = 0 THEN y(1)=8

  x(1) = (n1% - y(1)) / 8 + 1

   y(2) = n2% MOD 8

IF y(2) = 0 THEN y(2) = 8

  x(2) = (n2% - y(2)) / 8 + 1

 y(3) = n3% MOD 8

IF y(3) = 0 THEN y(3) = 8

  x(3) = (n3% - y(3)) / 8 + 1

 y(4) = n4% MOD 8

IF y(4) = 0 THEN y(4) = 8

  x(4) = (n4% - y(4)) / 8 + 1

 y(5) = n5% MOD 8

IF y(5) = 0 THEN y(5) = 8

  x(5) = (n5% - y(5)) / 8 + 1

  n% = 0

40 n% = n% + 1

 IF n% = 65 THEN 50

r%=n%

   WHILE  r% > 0

r% = r% - 8

WEND

y% =r% + 8

   x% = (n% - y%) / 8 + 1

   IF x% = x(1) OR x% = x(2) OR x% = x(3) OR x% = x(4) OR x% = x(5) THEN 40

  IF y% = y(1) OR y% = y(2) OR y% = y(3) OR y% = y(4) OR y% = y(5) THEN 40

   IF ABS(x% - x(1)) = ABS(y% - y(1)) THEN 40   ' (Без цикла считает быстрее)

   IF ABS(x% - x(2)) = ABS(y% - y(2)) THEN 40

   IF ABS(x% - x(3)) = ABS(y% - y(3)) THEN 40

   IF ABS(x% - x(4)) = ABS(y% - y(4)) THEN 40

   IF ABS(x% - x(5)) = ABS(y% - y(5)) THEN 40

   GOTO 1

50 n% = 0

i% = i% + 1

  FOR k = 1 TO 5

   IF x(k) = 1 THEN x$(k) = "a"

   IF x(k) = 2 THEN x$(k) = "b"

   IF x(k) = 3 THEN x$(k) = "c"

   IF x(k) = 4 THEN x$(k) = "d"

   IF x(k) = 5 THEN x$(k) = "e"

   IF x(k) = 6 THEN x$(k) = "f"

   IF x(k) = 7 THEN x$(k) = "g"

   IF x(k) = 8 THEN x$(k) = "h"

   NEXT

    PRINT i%; ":"; x$(1); y(1); "  "; x$(2); y(2); "  "; x$(3); y(3); "  "; x$(4); y(4); "  "; x$(5); y(5)

    PRINT #1, i%; ": "; x$(1); y(1); "  "; x$(2); y(2); "  "; x$(3); y(3); "  "; x$(4); y(4); "  "; x$(5); y(5)

    GOTO 1

  Всего получается 4860 позиций.Вот первая 20-ка.

1 : a 1   a 2   b 6   e 1   f 5

 2 : a 1   a 2   d 6   e 4   f 5

 3 : a 1   a 2   d 6   e 7   f 5

 4 : a 1   a 3   b 7   e 2   g 5

 5 : a 1   a 3   c 7   e 1   g 5

 6 : a 1   a 3   c 7   e 2   g 5

 7 : a 1   a 3   c 7   e 3   g 5

 8 : a 1   a 3   d 5   e 6   h 2

 9 : a 1   a 4   a 7   d 6   g 4

 10 : a 1   a 4   b 8   e 2   h 5

 11 : a 1   a 4   d 6   f 3   g 8

 12 : a 1   a 5   b 1   e 6   f 2

 13 : a 1   a 5   c 1   e 7   g 3

 14 : a 1   a 5   c 6   e 7   g 3

 15 : a 1   a 5   e 4   e 6   f 4

 16 : a 1   a 5   e 4   f 8   h 3

 17 : a 1   a 5   e 6   f 3   h 2

 18 : a 1   a 6   b 8   f 5   g 5

 19 : a 1   a 6   d 6   g 3   g 6

 20 : a 1   a 7   b 8   e 4   h 6  

 И последняя двадцатка:

 4841 : d 4   e 7   f 5   g 8   h 6

 4842 : d 5   d 6   d 7   e 1   h 2

 4843 : d 5   d 6   e 4   g 1   h 8

 4844 : d 5   e 2   f 4   g 1   h 3

 4845 : d 5   e 3   f 1   g 4   h 2

 4846 : d 5   e 3   f 4   f 5   f 6

 4847 : d 5   e 3   f 4   g 6   h 8

 4848 : d 5   e 4   f 8   g 7   h 6

 4849 : d 5   e 7   f 4   g 6   h 8

 4850 : d 6   d 7   e 1   e 2   g 8

 4851 : d 6   e 1   e 8   f 7   g 2

 4852 : d 6   e 4   e 5   e 6   g 1

 4853 : d 6   e 4   f 7   g 5   h 8

 4854 : d 6   e 5   f 4   g 8   h 7

 4855 : d 8   e 2   e 3   e 4   f 6

 4856 : d 8   e 2   e 3   e 4   g 7

 4857 : d 8   e 2   f 3   g 1   h 4

 4858 : d 8   e 3   f 1   g 2   h 4

 4859 : e 1   e 4   e 5   e 6   e 7

 4860 : e 2   e 3   e 4   e 5   e 8

 

      Если дополнить программу с метки 50 следующим фрагментом:
50 FOR i = 1 TO 5
   FOR j = 1 TO 5
   IF x(i) = x(j) AND i < j THEN 1
   IF y(i) = y(j) AND i < j THEN 1
  IF ABS(x(i) - x(j)) = ABS(y(i) - y(j)) AND i < j THEN 1
  NEXT j
  NEXT i
 - можно выделить из этих позиций те,где ферзи не атакуют друг друга.
 Их насчитывается 728
 1 :a 1   b 3   c 5   d 2   e 4 (46)
 2 :a 1   b 3   c 7   f 2   g 6 (50)
 3 :a 1   b 3   c 8   d 2   h 7 (51)
 4 :a 1   b 3   c 8   e 2   h 6 (52)
 5 :a 1   b 3   d 7   f 2   g 6 (56)
 6 :a 1   b 3   d 8   f 2   g 6 (59)
 7 :a 1   b 3   e 8   f 5   h 2 (62)
 8 :a 1   b 3   e 8   g 5   h 2 (63)
 9 :a 1   b 3   f 8   g 2   h 7 (65)
 10 :a 1   b 4   c 2   d 5   e 3 (67)
   . . . .
 719 :c 6   d 4   e 2   f 5   g 3
 720 :c 7   d 3   f 2   g 4   h 8
 721 :d 3   e 5   f 2   g 4   h 1
 722 :d 4   e 2   f 5   g 3   h 1
 723 :d 4   e 6   f 8   g 5   h 7
 724 :d 4   e 7   f 5   g 8   h 6
 725 :d 5   e 2   f 4   g 1   h 3
 726 :d 5   e 3   f 1   g 4   h 2
 727 :d 5   e 7   f 4   g 6   h 8
 728 :d 6   e 4   f 7   g 5   h 8
 В скобках указаны номера позиций в основном списке.

Для доски 9*9 существует 114 позиций 5-и ферзей держащих под боем всю доску.Позиции в которых свободны вертикаль i и горизонталь 9,очевидно,являются такими и для доски 8*8.(Например первые 5 в списке)

 

1 : a 1 b 3 c 7 f 2 g 6

2 : a 1 b 4 c 8 f 3 h 6

3 : a 1 b 4 d 8 f 2 h 6

4 : a 1 b 6 c 2 f 7 g 3

5 : a 1 b 6 d 2 f 8 h 4

6 : a 1 c 5 e 8 h 3 i 7

7 : a 1 c 5 e 9 g 3 i 7

8 : a 1 c 6 d 2 f 8 h 3

9 : a 1 c 7 e 3 g 9 i 5

10 : a 1 c 8 e 3 g 9 h 5

11 : a 1 d 5 e 9 h 4 i 8

12 : a 1 d 8 e 4 h 9 i 5

13 : a 2 b 6 e 1 f 5 i 9

14 : a 2 b 9 e 5 h 1 i 8

15 : a 3 b 2 c 1 e 8 h 5

16 : a 3 b 7 e 2 g 5 i 9

17 : a 3 b 8 d 4 f 2 h 6

18 : a 3 c 7 e 1 g 5 i 9

19 : a 3 c 8 d 4 f 1 h 6

20 : a 3 c 8 e 5 f 1 h 6

21 : a 3 c 9 e 5 g 1 i 7 +(1 в 10*10)

22 : a 3 d 6 e 4 f 5 g 9

23 : a 4 b 3 c 2 d 1 g 7

24 : a 4 c 9 d 6 f 2 h 7

25 : a 4 c 9 e 5 f 2 h 7

26 : a 4 d 9 e 5 f 1 i 6

27 : a 5 b 1 e 6 f 2 i 9

28 : a 5 b 9 e 4 f 8 i 1

29 : a 5 c 1 e 7 g 3 i 9

30 : a 5 c 9 e 3 g 7 i 1

31 : a 6 b 7 c 8 d 9 g 3

32 : a 6 c 1 d 4 f 8 h 3

33 : a 6 c 1 e 5 f 8 h 3

34 : a 6 d 1 e 5 f 9 i 4

35 : a 7 b 2 d 6 f 8 h 4

36 : a 7 b 3 e 8 g 5 i 1

37 : a 7 b 8 c 9 e 2 h 5

38 : a 7 c 1 e 5 g 9 i 3 +(3 в 10*10)

39 : a 7 c 2 d 6 f 9 h 4

40 : a 7 c 2 e 5 f 9 h 4

41 : a 7 c 3 e 9 g 5 i 1

42 : a 7 d 4 e 6 f 5 g 1

43 : a 8 b 1 e 5 h 9 i 2

44 : a 8 b 4 e 9 f 5 i 1

45 : a 9 b 4 c 8 f 3 g 7

46 : a 9 b 4 d 8 f 2 h 6

47 : a 9 b 6 c 2 f 7 h 4

48 : a 9 b 6 d 2 f 8 h 4

49 : a 9 b 7 c 3 f 8 g 4

50 : a 9 c 2 e 7 g 1 h 5

51 : a 9 c 3 e 7 g 1 i 5

52 : a 9 c 4 d 8 f 2 h 7

53 : a 9 c 5 e 1 g 7 i 3

54 : a 9 c 5 e 2 h 7 i 3

55 : a 9 d 2 e 6 h 1 i 5

56 : a 9 d 5 e 1 h 6 i 2

57 : b 2 c 4 d 8 g 3 h 7

58 : b 2 c 6 d 8 f 7 g 3

59 : b 2 c 7 d 3 g 8 h 4

60 : b 2 c 7 f 3 g 6 h 4

61 : b 2 d 4 e 5 f 6 h 8

62 : b 2 d 8 f 4 g 1 h 6

63 : b 3 c 7 f 2 g 6 h 8

64 : b 3 c 8 e 5 g 2 h 7

65 : b 3 d 8 e 5 g 1 i 6

66 : b 3 d 8 f 2 g 6 i 1

67 : b 3 d 8 f 4 g 1 i 6

68 : b 4 c 6 d 3 g 7 h 2

69 : b 4 c 8 f 3 g 7 h 2

70 : b 4 c 9 d 6 f 2 h 8

71 : b 4 d 7 g 2 h 6 i 9

72 : b 4 d 8 e 5 f 2 h 6

73 : b 4 d 8 f 2 h 6 i 1

74 : b 4 d 8 f 2 h 6 i 9

75 : b 4 d 8 f 6 h 2 i 7

76 : b 4 d 9 e 5 g 2 i 7

77 : b 4 d 9 f 6 g 2 i 7

78 : b 5 c 1 e 7 g 2 i 9

79 : b 5 c 9 e 3 g 8 i 1

80 : b 5 e 2 g 9 h 8 i 7

81 : b 5 e 8 g 1 h 2 i 3

82 : b 6 c 1 d 4 f 8 h 2

83 : b 6 c 2 f 7 g 3 h 8

84 : b 6 c 4 d 7 g 3 h 8

85 : b 6 d 1 e 5 g 8 i 3

86 : b 6 d 1 f 4 g 8 i 3

87 : b 6 d 2 e 5 f 8 h 4

88 : b 6 d 2 f 4 h 8 i 3

89 : b 6 d 2 f 8 h 4 i 1

90 : b 6 d 2 f 8 h 4 i 9

91 : b 6 d 3 g 8 h 4 i 1

92 : b 7 c 2 e 5 g 8 h 3

93 : b 7 c 3 f 8 g 4 h 2

94 : b 7 d 2 e 5 g 9 i 4

95 : b 7 d 2 f 6 g 9 i 4

96 : b 7 d 2 f 8 g 4 i 9

97 : b 8 c 3 d 7 g 2 h 6

98 : b 8 c 3 f 7 g 4 h 6

99 : b 8 c 4 d 2 f 3 g 7

100 : b 8 c 6 d 2 g 7 h 3

101 : b 8 d 2 f 6 g 9 h 4

102 : b 8 d 6 e 5 f 4 h 2

103 : c 1 d 5 e 6 f 4 i 7

104 : c 3 d 7 f 8 g 6 h 2

105 : c 3 d 7 g 2 h 6 i 1

106 : c 3 f 9 g 8 h 7 i 6

107 : c 4 d 7 e 5 f 3 g 6

108 : c 4 d 8 g 3 h 7 i 9

109 : c 6 d 2 g 7 h 3 i 1

110 : c 6 d 3 e 5 f 7 g 4

111 : c 7 d 3 f 2 g 4 h 8

112 : c 7 d 3 g 8 h 4 i 9

113 : c 7 f 1 g 2 h 3 i 4

114 : c 9 d 5 e 4 f 6 i 3

Для доски 10*10 существует 8 позиций 5-и ферзей,держащих под боем всю доску,причём они образуют группу симметрии.(простую)

 

1 : a 3 c 9 e 5 g 1 i 7

2 : a 4 c 10 e 6 g 2 i 8 90 гр.

3 : a 7 c 1 e 5 g 9 i 3 "/"

4 : a 8 c 2 e 6 g 10 i 4 г.о.

5 : b 3 d 9 f 5 h 1 j 7 270 гр.

6 : b 4 d 10 f 6 h 2 j 8 180 гр. +(1 в 11)

7 : b 7 d 1 f 5 h 9 j 3 в.о.

8 : b 8 d 2 f 6 h 10 j 4 "\" +(2 в 11)

Для доски 11*11 таких позиций 2-е.Они образуют дважды симметрическую группу – при всех отражениях получается другая позиция,а при всех поворотах позиция переходит сама в себя.

1 : b 4 d 10 f 6 h 2 j 8

2 : b 8 d 2 f 6 h 10 j 4

Как мы видим,эти позиции уже имели место для доски 10*10.

.

Для доски 9*9 в большинстве из этих позиций (в 92-х) ферзи не атакуют друг друга.

  1 : a 1   b 3   c 7   f 2   g 6

 2 : a 1   b 4   c 8   f 3   h 6

 3 : a 1   b 4   d 8   f 2   h 6

 4 : a 1   b 6   c 2   f 7   g 3

 5 : a 1   b 6   d 2   f 8   h 4

 6 : a 1   c 5   e 8   h 3   i 7

 7 : a 1   c 5   e 9   g 3   i 7

 8 : a 1   c 6   d 2   f 8   h 3

 9 : a 1   c 7   e 3   g 9   i 5

 10 : a 1   c 8   e 3   g 9   h 5

 11 : a 1   d 5   e 9   h 4   i 8

 12 : a 1   d 8   e 4   h 9   i 5

 13 : a 2   b 6   e 1   f 5   i 9

 14 : a 2   b 9   e 5   h 1   i 8

 15 : a 3   b 7   e 2   g 5   i 9

 16 : a 3   c 7   e 1   g 5   i 9

 17 : a 3   c 8   d 4   f 1   h 6

 18 : a 3   c 8   e 5   f 1   h 6

 19 : a 3   c 9   e 5   g 1   i 7

 20 : a 4   c 9   d 6   f 2   h 7

 21 : a 4   c 9   e 5   f 2   h 7

 22 : a 4   d 9   e 5   f 1   i 6

 23 : a 5   b 1   e 6   f 2   i 9

 24 : a 5   b 9   e 4   f 8   i 1

 25 : a 5   c 1   e 7   g 3   i 9

 26 : a 5   c 9   e 3   g 7   i 1

 27 : a 6   c 1   d 4   f 8   h 3

 28 : a 6   c 1   e 5   f 8   h 3

 29 : a 6   d 1   e 5   f 9   i 4

 30 : a 7   b 3   e 8   g 5   i 1

 31 : a 7   c 1   e 5   g 9   i 3

 32 : a 7   c 2   d 6   f 9   h 4

 33 : a 7   c 2   e 5   f 9   h 4

 34 : a 7   c 3   e 9   g 5   i 1

 35 : a 8   b 1   e 5   h 9   i 2

 36 : a 8   b 4   e 9   f 5   i 1

 37 : a 9   b 4   c 8   f 3   g 7

 38 : a 9   b 4   d 8   f 2   h 6

 39 : a 9   b 6   c 2   f 7   h 4

 40 : a 9   b 6   d 2   f 8   h 4

 41 : a 9   b 7   c 3   f 8   g 4

 42 : a 9   c 2   e 7   g 1   h 5

 43 : a 9   c 3   e 7   g 1   i 5

 44 : a 9   c 4   d 8   f 2   h 7

 45 : a 9   c 5   e 1   g 7   i 3

 46 : a 9   c 5   e 2   h 7   i 3

 47 : a 9   d 2   e 6   h 1   i 5

 48 : a 9   d 5   e 1   h 6   i 2

 49 : b 2   c 4   d 8   g 3   h 7

 50 : b 2   c 6   d 8   f 7   g 3

 51 : b 2   c 7   d 3   g 8   h 4

 52 : b 2   c 7   f 3   g 6   h 4

 53 : b 3   c 7   f 2   g 6   h 8

 54 : b 3   c 8   e 5   g 2   h 7

 55 : b 3   d 8   e 5   g 1   i 6

 56 : b 3   d 8   f 2   g 6   i 1

 57 : b 3   d 8   f 4   g 1   i 6

 58 : b 4   c 6   d 3   g 7   h 2

 59 : b 4   c 8   f 3   g 7   h 2

 60 : b 4   d 7   g 2   h 6   i 9

 61 : b 4   d 8   e 5   f 2   h 6

 62 : b 4   d 8   f 2   h 6   i 1

 63 : b 4   d 8   f 2   h 6   i 9

 64 : b 4   d 9   e 5   g 2   i 7

 65 : b 4   d 9   f 6   g 2   i 7

 66 : b 5   c 1   e 7   g 2   i 9

 67 : b 5   c 9   e 3   g 8   i 1

 68 : b 6   c 2   f 7   g 3   h 8

 69 : b 6   c 4   d 7   g 3   h 8

 70 : b 6   d 1   e 5   g 8    i 3

 71 : b 6   d 1   f 4   g 8   i 3

 72 : b 6   d 2   e 5   f 8   h 4

 73 : b 6   d 2   f 8   h 4   i 1

 74 : b 6   d 2   f 8   h 4   i 9

 75 : b 6   d 3   g 8   h 4   i 1

 76 : b 7   c 2   e 5   g 8   h 3

 77 : b 7   c 3   f 8   g 4   h 2

 78 : b 7   d 2   e 5   g 9   i 4

 79 : b 7   d 2   f 6   g 9   i 4

 80 : b 7   d 2   f 8   g 4   i 9

 81 : b 8   c 3   d 7   g 2   h 6

 82 : b 8   c 3   f 7   g 4   h 6

 83 : b 8   c 4   d 2   f 3   g 7

 84 : b 8   c 6   d 2   g 7   h 3

 85 : c 3   d 7   f 8   g 6   h 2

 86 : c 3   d 7   g 2   h 6   i 1

 87 : c 4   d 7   e 5   f 3   g 6

 88 : c 4   d 8   g 3   h 7   i 9

 89 : c 6   d 2   g 7   h 3   i 1

 90 : c 6   d 3   e 5   f 7   g 4

 91 : c 7   d 3   f 2   g 4   h 8

 92 : c 7   d 3   g 8   h 4   i 9

 

 

   Для доски 8*8 4860 позиций разделяются на 638 групп.(638*8-4860)/4=61.Это означает,что 61 группа симметрическая.В отличии от позиций ферзей не атакующих друг друга,здесь возможен переход позиции самой в себя при отражении.И действительно в данном случае симметрические группы образуются за счёт перехода позиций самих в себя при отражении  от одной из диагоналей.Для подмножества 728 позиций,где ферзи не атакуют друг друга,получается 91 группа.91*8=728. Это означает,что все группы простые.Ниже предлагается программа,получающая группы симметрии из 4860 позиций ферзей,держащих под боем всю доску.Сначала эти позиции генерируются,а затем выполняются преобразования симметрии.Отличие программы от соответствующей программы для позиций ферзей не атакующих друг друга в том,что здесь надо учитывать возможность расположения нескольких ферзей на одной вертикали.

 

 

 

  CLS

  OPEN "Gof5n" FOR OUTPUT AS #1

  DIM y(5) AS INTEGER

  t = 4860

  t1 = 5104

  DIM x1(t), x2(t), x3(t), x4(t), x5(t) AS INTEGER

  DIM y1(t), y2(t), y3(t), y4(t), y5(t) AS INTEGER

  DIM v1(t1), v2(t1), v3(t1), v4(t1), v5(t1) AS INTEGER

  DIM w1(t1), w2(t1), w3(t1), w4(t1), w5(t1) AS INTEGER

  FOR n1% = 1 TO 64

 FOR n2% = n1% + 1 TO 64

  FOR n3% = n2% + 1 TO 64

 FOR n4% = n3% + 1 TO 64

  FOR n5% = n4% + 1 TO 64

  GOTO 2

1 NEXT n5%

 NEXT n4%

 NEXT n3%

 NEXT n2%

 NEXT n1%

  BEEP

60 r = r + 1 'номер первой позиции в группе

IF r = 4860 THEN END

IF l = 0 THEN  'избежание повторных пробелов между группами

 PRINT "   "

PRINT #1, "   "

END IF

 y(1) = y1(r): y(2) = y2(r): y(3) = y3(r): y(4) = y4(r): y(5) = y5(r)

 x(1) = x1(r): x(2) = x2(r): x(3) = x3(r): x(4) = x4(r): x(5) = x5(r)

 

 FOR n = 1 TO m 'избежание повторного получения групп

 IF y1(r) = v1(n) AND y2(r) = v2(n) AND y3(r) = v3(n) AND y4(r) = v4(n) AND y5(r) = v5(n) AND x1(r) = w1(n) AND x2(r) = w2(n) AND x3(r) = w3(n) AND x4(r) = w4(n) AND x5(r) = w5(n) THEN l = l + 1: GOTO 60

 NEXT

  l = 0

 rs = rs + 1 'номер группы

 PRINT " "; rs

 PRINT #1, " "; rs

 'производим преобразование координат

 'для каждого типа симметрии

 'искодное положение

 FOR i = 1 TO 5

 z(i) = x(i)

 u(i) = y(i)

 NEXT

 GOSUB 11

 'отражение от вертикальной оси

  PRINT " "

  PRINT #1, "   "

 FOR i = 1 TO 5

 z(i) = 9 - x(i)

 u(i) = y(i)

 NEXT

 GOSUB 11

 'отражение от горизонтальной оси

 PRINT " "

 PRINT #1, "  "

  FOR i = 1 TO 5

  z(i) = x(i)

  u(i) = 9 - y(i)

  NEXT

  GOSUB 11

 'отражение от диагонали /

 PRINT "       "

 PRINT #1, "    "

 FOR i = 1 TO 5

 z(i) = y(i)

 u(i) = x(i)

 NEXT

 GOSUB 11

 'отражение от диагонали \

 PRINT "    "

 PRINT #1, "   "

 FOR i = 1 TO 5

 z(i) = 9 - y(i)

 u(i) = 9 - x(i)

 NEXT

 GOSUB 11

  'поворот на 90 гр.

 PRINT "   "

 PRINT #1, "   "

 FOR i = 1 TO 5

 z(i) = y(i)

 u(i) = 9 - x(i)

 NEXT

 GOSUB 11

 'поворот на 180 гр.

 PRINT "   "

 PRINT #1, "   "

 FOR i = 1 TO 5

 z(i) = 9 - x(i)

 u(i) = 9 - y(i)

 NEXT

  GOSUB 11

 'поворот на 270 гр.

 PRINT "   "

 PRINT #1, "    "

 FOR i = 1 TO 5

 z(i) = 9 - y(i)

 u(i) = x(i)

 NEXT

  GOSUB 11

 GOTO 60

 

 

' ------------------------------------------------------

11 FOR i = 1 TO 5

  IF z(i) = 1 THEN o$(i) = "a"

  IF z(i) = 2 THEN o$(i) = "b"

  IF z(i) = 3 THEN o$(i) = "c"

  IF z(i) = 4 THEN o$(i) = "d"

  IF z(i) = 5 THEN o$(i) = "e"

  IF z(i) = 6 THEN o$(i) = "f"

  IF z(i) = 7 THEN o$(i) = "g"

  IF z(i) = 8 THEN o$(i) = "h"

  NEXT

 

 PRINT "  ";

 PRINT #1, "   ";

 'упорядочивание нового расположения по возрастанию

   s = 0

 FOR i = 1 TO 5

 IF o$(i) = "a" THEN

   PRINT o$(i); u(i); " ";

   PRINT #1, o$(i); u(i); " ";

   s = s + 1

   yn(s) = u(i)

   xn(s) = z(i)

   END IF

   NEXT

 

 

 FOR i = 1 TO 5

 IF o$(i) = "b" THEN

     PRINT o$(i); u(i); " ";

     PRINT #1, o$(i); u(i); " ";

   s = s + 1

   yn(s) = u(i)

   xn(s) = z(i)

     END IF

      NEXT

 

 

 

 FOR i = 1 TO 5

 IF o$(i) = "c" THEN

   PRINT o$(i); u(i); " ";

   PRINT #1, o$(i); u(i); " ";

   s = s + 1

   yn(s) = u(i)

   xn(s) = z(i)

   END IF

 NEXT

 

   FOR i = 1 TO 5

 IF o$(i) = "d" THEN

   PRINT o$(i); u(i); " ";

   PRINT #1, o$(i); u(i); " ";

   s = s + 1

   yn(s) = u(i)

   xn(s) = z(i)

   END IF

   NEXT

 

 

 FOR i = 1 TO 5

 IF o$(i) = "e" THEN

   PRINT o$(i); u(i); " ";

   PRINT #1, o$(i); u(i); " ";

   s = s + 1

   yn(s) = u(i)

   xn(s) = z(i)

   END IF

   NEXT

 

 

 FOR i = 1 TO 5

 IF o$(i) = "f" THEN

   PRINT o$(i); u(i); " ";

   PRINT #1, o$(i); u(i); " ";

   s = s + 1

   yn(s) = u(i)

   xn(s) = z(i)

   END IF

   NEXT

 

 

 FOR i = 1 TO 5

 IF o$(i) = "g" THEN

  PRINT o$(i); u(i); " ";

   PRINT #1, o$(i); u(i); " ";

   s = s + 1

   yn(s) = u(i)

   xn(s) = z(i)

   END IF

   NEXT

 

 

 FOR i = 1 TO 5

 IF o$(i) = "h" THEN

   PRINT o$(i); u(i); " ";

   PRINT #1, o$(i); u(i); " ";

   s = s + 1

   yn(s) = u(i)

   xn(s) = z(i)

   END IF

   NEXT

 

   IF xn(1) = xn(2) AND xn(2) = xn(3) AND xn(3) = xn(4) AND xn(4) = xn(5) AND yn(5) < yn(1) THEN SWAP yn(5), yn(1): SWAP yn(2), yn(4)

 

   IF xn(2) = xn(3) AND xn(3) = xn(4) AND xn(4) = xn(5) AND yn(5) < yn(2) THEN SWAP yn(2), yn(5): SWAP yn(3), yn(4)

   IF xn(1) = xn(2) AND xn(2) = xn(3) AND xn(3) = xn(4) AND yn(4) < yn(1) THEN SWAP yn(4), yn(1): SWAP yn(2), yn(3)

 

   IF xn(1) = xn(2) AND xn(2) = xn(3) AND yn(3) < yn(1) THEN SWAP yn(3), yn(1)

   IF xn(2) = xn(3) AND xn(3) = xn(4) AND yn(4) < yn(2) THEN SWAP yn(2), yn(4)

   IF xn(3) = xn(4) AND xn(4) = xn(5) AND yn(5) < yn(3) THEN SWAP yn(5), yn(3)

 

   IF xn(5) = xn(4) AND xn(4) <> xn(3) AND yn(5) < yn(4) THEN SWAP yn(5), yn(4)

   IF xn(4) = xn(3) AND xn(4) <> xn(5) AND yn(4) < yn(3) THEN SWAP yn(4), yn(3)

   IF xn(3) = xn(2) AND xn(3) <> xn(4) AND yn(3) < yn(2) THEN SWAP yn(3), yn(2)

   IF xn(2) = xn(1) AND xn(2) <> xn(3) AND yn(2) < yn(1) THEN SWAP yn(2), yn(1)

 

 

 m = m + 1 'формирование массива позиций уже вошедших в группы симметрии

 v1(m) = yn(1): v2(m) = yn(2): v3(m) = yn(3): v4(m) = yn(4): v5(m) = yn(5): w1(m) = xn(1): w2(m) = xn(2): w3(m) = xn(3): w4(m) = xn(4): w5(m) = xn(5)

 FOR k = 1 TO 4860

 IF v1(m) = y1(k) AND v2(m) = y2(k) AND v3(m) = y3(k) AND v4(m) = y4(k) AND v5(m) = y5(k) AND w1(m) = x1(k) AND w2(m) = x2(k) AND w3(m) = x3(k) AND w4(m) = x4(k) AND w5(m) = x5(k) THEN

 PRINT ":"; k;

 PRINT #1, ":"; k;

 END IF

 NEXT

  RETURN

 

 END

2 y(1) = n1% MOD 8

IF y(1) = 0 THEN y(1) = 8

  x(1) = (n1% - y(1)) / 8 + 1

   y(2) = n2% MOD 8

 IF y(2) = 0 THEN y(2) = 8

  x(2) = (n2% - y(2)) / 8 + 1

 y(3) = n3% MOD 8

 IF y(3) = 0 THEN y(3) = 8

  x(3) = (n3% - y(3)) / 8 + 1

 y(4) = n4% MOD 8

 IF y(4) = 0 THEN y(4) = 8

  x(4) = (n4% - y(4)) / 8 + 1

 y(5) = n5% MOD 8

 IF y(5) = 0 THEN y(5) = 8

  x(5) = (n5% - y(5)) / 8 + 1

  n% = 0

40 n% = n% + 1

 IF n% = 65 THEN 50

  r% = n%

   WHILE r% > 0

   r% = r% - 8

   WEND

   y% = r% + 8

   x% = (n% - y%) / 8 + 1

   IF x% = x(1) OR x% = x(2) OR x% = x(3) OR x% = x(4) OR x% = x(5) THEN 40

  IF y% = y(1) OR y% = y(2) OR y% = y(3) OR y% = y(4) OR y% = y(5) THEN 40

 

   IF ABS(x% - x(1)) = ABS(y% - y(1)) THEN 40

 

   IF ABS(x% - x(2)) = ABS(y% - y(2)) THEN 40

 

   IF ABS(x% - x(3)) = ABS(y% - y(3)) THEN 40

 

   IF ABS(x% - x(4)) = ABS(y% - y(4)) THEN 40

 

   IF ABS(x% - x(5)) = ABS(y% - y(5)) THEN 40

   GOTO 1

50 n% = 0

GOSUB 3

i% = i% + 1

    PRINT i%; ":"; x$(1); y(1); "  "; x$(2); y(2); "  "; x$(3); y(3); "  "; x$(4); y(4); "  "; x$(5); y(5)

    x1(i%) = x(1): x2(i%) = x(2): x3(i%) = x(3): x4(i%) = x(4): x5(i%) = x(5)

    y1(i%) = y(1): y2(i%) = y(2): y3(i%) = y(3): y4(i%) = y(4): y5(i%) = y(5)

    GOTO 1

3  FOR k = 1 TO 5

   IF x(k) = 1 THEN x$(k) = "a"

   IF x(k) = 2 THEN x$(k) = "b"

   IF x(k) = 3 THEN x$(k) = "c"

   IF x(k) = 4 THEN x$(k) = "d"

   IF x(k) = 5 THEN x$(k) = "e"

   IF x(k) = 6 THEN x$(k) = "f"

   IF x(k) = 7 THEN x$(k) = "g"

   IF x(k) = 8 THEN x$(k) = "h"

   NEXT

 RETURN

 

      Вот фрагменты результатов работы программы.

 

 

     1

   a 1  a 2  b 6  e 1  f 5  : 1

   c 5  d 1  g 6  h 1  h 2  : 4666

   a 8  a 7  b 3  e 8  f 4  : 2201

   a 1  a 5  b 1  e 6  f 2  : 12

   c 7  d 3  g 8  h 8  h 4  : 4766

   a 8  a 4  b 8  e 3  f 7  : 1175

   c 4  d 8  g 3  h 8  h 7  : 4627

   c 2  d 6  g 1  h 1  h 5  : 4458

  2

   a 1  a 2  d 6  e 4  f 5  : 2

   c 5  d 4  e 6  h 1  h 2  : 4694

   a 8  a 7  d 3  e 5  f 4  : 2203

   a 1  b 1  d 5  e 6  f 4  : 25

   c 5  d 3  e 4  g 8  h 8  : 4681

   a 8  b 8  d 4  e 3  f 5  : 2807

   c 4  d 5  e 3  h 8  h 7  : 4594

   c 4  d 6  e 5  g 1  h 1  : 4607

  3

   a 1  a 2  d 6  e 7  f 5  : 3

   c 5  d 7  e 6  h 1  h 2  : 4704

   a 8  a 7  d 3  e 2  f 4  : 2202

   a 1  b 1  e 6  f 4  g 5  : 26

   b 4  c 5  d 3  g 8  h 8  : 3628

   a 8  b 8  e 3  f 5  g 4  : 2808

   c 4  d 2  e 3  h 8  h 7  : 4573

   b 5  c 4  d 6  g 1  h 1  : 3874

  4

   a 1  a 3  b 7  e 2  g 5  : 4

   b 5  d 2  g 7  h 1  h 3  : 3945

   a 8  a 6  b 2  e 7  g 4  : 1891

   a 1  b 5  c 1  e 7  g 2  : 97

   b 7  d 2  f 8  g 4  h 8  : 4284

   a 8  b 4  c 8  e 2  g 7  : 2698

   b 4  d 7  g 2  h 8  h 6  : 3754

   b 2  d 7  f 1  g 5  h 1  : 3331

  5

   a 1  a 3  c 7  e 1  g 5  : 5

   b 5  d 1  f 7  h 1  h 3  : 3930

   a 8  a 6  c 2  e 8  g 4  : 1894

   a 1  a 5  c 1  e 7  g 3  : 13

   b 6  d 2  f 8  h 8  h 4  : 4121

   a 8  a 4  c 8  e 2  g 6  : 1177

   b 4  d 8  f 2  h 8  h 6  : 3762

   b 3  d 7  f 1  h 1  h 5  : 3532

  6

   a 1  a 3  c 7  e 2  g 5  : 6

   b 5  d 2  f 7  h 1  h 3  : 3943

   a 8  a 6  c 2  e 7  g 4  : 1893

   a 1  b 5  c 1  e 7  g 3  : 98

   b 6  d 2  f 8  g 4  h 8  : 4119

   a 8  b 4  c 8  e 2  g 6  : 2697

   b 4  d 7  f 2  h 8  h 6  : 3750

   b 3  d 7  f 1  g 5&nbs… Продолжение »

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