Пять ферзей. Противоположная задача задаче о безопасности ферзей – задача об их доминировании, т.е. когда ферзи держат под боем все поля доски. Минимальное количество ферзей, которое может это осуществить на обычной доске(впрочем и на досках 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 следующим фрагментом: Для доски 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… Продолжение » |