GRISHA.INC 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. Procedure Gor(Var cx,x,y,prior : byte);Far;
  2. Var
  3. i,j,left,Rigth,Proz,Sum: byte;
  4. Begin
  5. For j:=1 to n do
  6. Begin
  7. For i:=4 to n-1 do
  8. Begin
  9. Rigth:=Pole[i+1,j];Left:=pole[i-3,j];
  10. Sum:=pole[i,j]+pole[i-1,j]+pole[i-2,j];
  11. Proz:=pole[i,j]*pole[i-1,j]*pole[i-2,j];
  12. If(left=0)and(rigth=0)and(sum=3)and(proz=1)and(prior<>5)then Begin x:=i+1;y:=j;prior:=5;End;
  13. IF(left=0)and(rigth=0)and(sum=6)and(proz=8)and(prior<>5)then Begin x:=i+1;y:=j;prior:=5;End;
  14. IF(left=2)and(rigth=0)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i+1;y:=j;prior:=5;end;
  15. IF(left=0)and(rigth=2)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i-3;y:=j;prior:=5;end;
  16. IF(left=1)and(rigth=0)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i+1;y:=j;prior:=5;end;
  17. IF(left=0)and(rigth=1)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i-3;y:=j;prior:=5;end;
  18. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  19. (pole[i,j]=1)and(pole[i-2,j]=1)and(prior<>5)then Begin x:=i-1;y:=j;prior:=5;end;
  20. If(left=0)and(rigth=1)and(sum=2)and(proz=0)and
  21. (pole[i,j]=1)and(pole[i-2,j]=1)and(prior<>5)then Begin x:=i-1;y:=j;prior:=5;end;
  22. If(left=1)and(rigth=0)and(sum=2)and(proz=0)and
  23. (pole[i,j]=1)and(pole[i-2,j]=1)and(prior<>5)then Begin x:=i-1;y:=j;prior:=5;end;
  24. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  25. (pole[i,j]=2)and(pole[i-2,j]=2)and(prior<>5)then Begin x:=i-1;y:=j;prior:=5;end;
  26. If(left=0)and(rigth=2)and(sum=4)and(proz=0)and
  27. (pole[i,j]=2)and(pole[i-2,j]=2)and(prior<>5)then Begin x:=i-1;y:=j;prior:=5;end;
  28. If(left=2)and(rigth=0)and(sum=4)and(proz=0)and
  29. (pole[i,j]=2)and(pole[i-2,j]=2)and(prior<>5)then Begin x:=i-1;y:=j;prior:=5;end;
  30. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  31. (pole[i-1,j]=2)and(pole[i-2,j]=2)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  32. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  33. (pole[i-1,j]=1)and(pole[i-2,j]=1)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  34. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  35. (pole[i-1,j]=2)and(pole[i,j]=2)and(prior<>5)then Begin x:=i-2;y:=j;prior:=5;end;
  36. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  37. (pole[i-1,j]=1)and(pole[i,j]=1)and(prior<>5)then Begin x:=i-2;y:=j;prior:=5;end;
  38. If(left=1)and(rigth=0)and(sum=2)and(proz=0)and
  39. (pole[i-1,j]=1)and(pole[i,j]=1)and(prior<>5)then Begin x:=i-2;y:=j;prior:=5;end;
  40. If prior<>5 then Begin
  41. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  42. (pole[i,j]=1)and(pole[i-2,j]=1)and(cx=1)then Begin x:=i-1;y:=j;prior:=4;end;
  43. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  44. (pole[i,j]=2)and(pole[i-2,j]=2)and(cx=2)then Begin x:=i-1;y:=j;prior:=4;end;
  45. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  46. (pole[i-1,j]=2)and(pole[i-2,j]=2)and(cx=2)then Begin x:=i;y:=j;prior:=4;end;
  47. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  48. (pole[i-1,j]=1)and(pole[i-2,j]=1)and(cx=1)then Begin x:=i;y:=j;prior:=4;end;
  49. If(left=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i-3;y:=j;prior:=4;End;
  50. If(left=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i-3;y:=j;Prior:=4;End;
  51. If(Rigth=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i;y:=j;prior:=4;End;
  52. If(Rigth=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i;y:=j;Prior:=4;End;
  53. If(left=0)and(pole[i-2,j]=0)and(pole[i,j]=0)and
  54. (Rigth=0)And(Sum=1)And(cx=1)And(proz=0) Then Begin x:=i-1;y:=j;Prior:=4;End;
  55. If(left=0)and(pole[i-2,j]=0)and(pole[i,j]=0)and
  56. (Rigth=0)And(Sum=2)And(cx=2)And(proz=0) Then Begin x:=i-1;y:=j;Prior:=4;End;
  57. End;
  58. End;
  59. End;
  60. If (x>=1)and(x<=n)and(y>=1)and(y<=n)and((pole[x,y])=0) Then
  61. Else Begin
  62. prior:=1;
  63. x:=0;y:=0;
  64. End;
  65. End;
  66. Procedure Ver(Var cx,x,y,prior : byte);Far;
  67. Var
  68. i,j,left,Rigth,Proz,Sum: byte;
  69. Begin
  70. For i:=1 to n do
  71. Begin
  72. For j:=4 to n-1 do
  73. Begin
  74. Rigth:=pole[i,j+1];Left:=pole[i,j-3];
  75. Sum:=pole[i,j]+pole[i,j-1]+pole[i,j-2];
  76. Proz:=pole[i,j]*pole[i,j-1]*pole[i,j-2];
  77. If(left=0)and(rigth=0)and(sum=3)and(proz=1)and(prior<>5)then Begin x:=i;y:=j+1;prior:=5;End;
  78. IF(left=0)and(rigth=0)and(sum=6)and(proz=8)and(prior<>5)then Begin x:=i;y:=j+1;prior:=5;End;
  79. IF(left=2)and(rigth=0)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i;y:=j+1;prior:=5;end;
  80. IF(left=0)and(rigth=2)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i;y:=j-3;prior:=5;end;
  81. IF(left=1)and(rigth=0)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i;y:=j+1;prior:=5;end;
  82. IF(left=0)and(rigth=1)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i;y:=j-3;prior:=5;end;
  83. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  84. (pole[i,j]=1)and(pole[i,j-2]=1)and(prior<>5)then Begin x:=i;y:=j-1;prior:=5;end;
  85. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  86. (pole[i,j]=2)and(pole[i,j-2]=2)and(prior<>5)then Begin x:=i;y:=j-1;prior:=5;end;
  87. If(left=2)and(rigth=0)and(sum=4)and(proz=0)and
  88. (pole[i,j]=2)and(pole[i,j-2]=2)and(prior<>5)then Begin x:=i;y:=j-1;prior:=5;end;
  89. If(left=0)and(rigth=2)and(sum=4)and(proz=0)and
  90. (pole[i,j]=2)and(pole[i,j-2]=2)and(prior<>5)then Begin x:=i;y:=j-1;prior:=5;end;
  91. If(left=1)and(rigth=0)and(sum=2)and(proz=0)and
  92. (pole[i,j]=1)and(pole[i,j-2]=1)and(prior<>5)then Begin x:=i;y:=j-1;prior:=5;end;
  93. If(left=0)and(rigth=1)and(sum=2)and(proz=0)and
  94. (pole[i,j]=1)and(pole[i,j-2]=1)and(prior<>5)then Begin x:=i;y:=j-1;prior:=5;end;
  95. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  96. (pole[i,j-1]=2)and(pole[i,j-2]=2)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  97. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  98. (pole[i,j-1]=1)and(pole[i,j-2]=1)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  99. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  100. (pole[i,j-1]=2)and(pole[i,j]=2)and(prior<>5)then Begin x:=i;y:=j-2;prior:=5;end;
  101. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  102. (pole[i,j-1]=1)and(pole[i,j]=1)and(prior<>5)then Begin x:=i;y:=j-2;prior:=5;end;
  103. If prior<>5 then Begin
  104. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  105. (pole[i,j]=1)and(pole[i,j-2]=1)and(cx=1)then Begin x:=i;y:=j-1;prior:=4;end;
  106. If(left=1)and(rigth=1)and(sum=1)and(proz=0)and
  107. (pole[i,j-1]=1)and(cx=1)then Begin x:=i;y:=j;prior:=4;end;
  108. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  109. (pole[i,j-1]=1)and(pole[i,j-2]=1)and(cx=1)then Begin x:=i;y:=j;prior:=4;end;
  110. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  111. (pole[i,j-1]=2)and(pole[i,j-2]=2)and(cx=2)then Begin x:=i;y:=j;prior:=4;end;
  112. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  113. (pole[i,j]=1)and(pole[i,j-1]=1)and(cx=1)then Begin x:=i;y:=j-2;prior:=4;end;
  114. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  115. (pole[i,j]=2)and(pole[i,j-1]=2)and(cx=2)then Begin x:=i;y:=j-2;prior:=4;end;
  116. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  117. (pole[i,j]=2)and(pole[i,j-2]=2)and(cx=2)then Begin x:=i;y:=j-1;prior:=4;end;
  118. If(left=2)and(rigth=2)and(sum=2)and(proz=0)and
  119. (pole[i,j]=0)and(pole[i,j-2]=2)and(cx=1)then Begin x:=i;y:=j;prior:=4;end;
  120. If(left=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i;y:=j-3;prior:=4;End;
  121. If(left=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i;y:=j-3;Prior:=4;End;
  122. If(left=0)and(pole[i,j-2]=0)and(pole[i,j]=0)and
  123. (Rigth=0)And(Sum=1)And(cx=1)And(proz=0) Then Begin x:=i;y:=j-2;Prior:=4;End;
  124. If(left=0)and(pole[i,j-2]=0)and(pole[i,j]=0)and
  125. (Rigth=0)And(Sum=2)And(cx=2)And(proz=0) Then Begin x:=i;y:=j-2;Prior:=4;End;
  126. End;
  127. End;
  128. End;
  129. If (x>=1)and(x<=n)and(y>=1)and(y<=n)and((pole[x,y])=0) Then
  130. Else Begin
  131. prior:=1;
  132. x:=0;y:=0;
  133. End;
  134. End;
  135. Procedure Diag1(Var cx,x,y,prior : byte);Far;
  136. Var
  137. i,j,left,Rigth,Proz,Sum,t: byte;
  138. Begin
  139. For t:=5 to n do
  140. Begin
  141. i:=1;j:=t-2;
  142. While j>=2 do
  143. Begin
  144. Dec(j);Inc(i);
  145. Rigth:=pole[i+1,j-1];Left:=pole[i-3,j+3];
  146. Sum:=pole[i,j]+pole[i-1,j+1]+pole[i-2,j+2];
  147. Proz:=pole[i,j]*pole[i-1,j+1]*pole[i-2,j+2];
  148. If(left=0)and(rigth=0)and(sum=3)and(proz=1)and(prior<>5)then Begin x:=i+1;y:=j-1;prior:=5;End;
  149. IF(left=0)and(rigth=0)and(sum=6)and(proz=8)and(prior<>5)then Begin x:=i+1;y:=j-1;prior:=5;End;
  150. IF(left=2)and(rigth=0)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i+1;y:=j-1;prior:=5;end;
  151. IF(left=0)and(rigth=2)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i-3;y:=j+3;prior:=5;end;
  152. IF(left=1)and(rigth=0)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i+1;y:=j-1;prior:=5;end;
  153. IF(left=0)and(rigth=1)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i-3;y:=j+3;prior:=5;end;
  154. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and(prior<>5)and
  155. (pole[i,j]=1)and(pole[i-2,j+2]=1)then Begin x:=i-1;y:=j+1;prior:=5;end;
  156. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  157. (pole[i,j]=2)and(pole[i-2,j+2]=2)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  158. If(left=0)and(rigth=2)and(sum=4)and(proz=0)and
  159. (pole[i,j]=2)and(pole[i-2,j+2]=2)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  160. If(left=2)and(rigth=0)and(sum=4)and(proz=0)and
  161. (pole[i,j]=2)and(pole[i-2,j+2]=2)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  162. If(left=1)and(rigth=0)and(sum=2)and(proz=0)and
  163. (pole[i,j]=1)and(pole[i-2,j+2]=1)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  164. If(left=0)and(rigth=1)and(sum=2)and(proz=0)and
  165. (pole[i,j]=1)and(pole[i-2,j+2]=1)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  166. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and(prior<>5)and
  167. (pole[i,j]=1)and(pole[i-1,j+1]=1)then Begin x:=i-2;y:=j+2;prior:=5;end;
  168. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  169. (pole[i,j]=2)and(pole[i-1,j+1]=2)and(prior<>5)then Begin x:=i-2;y:=j+2;prior:=5;end;
  170. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and(prior<>5)and
  171. (pole[i-1,j+1]=1)and(pole[i-2,j+2]=1)then Begin x:=i;y:=j;prior:=5;end;
  172. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  173. (pole[i-2,j+2]=2)and(pole[i-1,j+1]=2)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  174. If prior<>5 then Begin
  175. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  176. (pole[i,j]=1)and(pole[i-2,j+2]=1)and(cx=1)then Begin x:=i-1;y:=j+1;prior:=4;end;
  177. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  178. (pole[i,j]=2)and(pole[i-2,j+2]=2)and(cx=2)then Begin x:=i-1;y:=j+1;prior:=4;end;
  179. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  180. (pole[i-1,j+1]=1)and(pole[i-2,j+2]=1)and(cx=1)then Begin x:=i;y:=j;prior:=4;end;
  181. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  182. (pole[i-1,j+1]=2)and(pole[i-2,j+2]=2)and(cx=2)then Begin x:=i;y:=j;prior:=4;end;
  183. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  184. (pole[i,j]=1)and(pole[i-1,j+1]=1)and(cx=1)then Begin x:=i-2;y:=j+2;prior:=4;end;
  185. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  186. (pole[i-1,j+1]=2)and(pole[i,j]=2)and(cx=2)then Begin x:=i-2;y:=j+2;prior:=4;end;
  187. If(left=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i-3;y:=j+3;prior:=4;End;
  188. If(left=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i-3;y:=j+3;Prior:=4;End;
  189. If(Rigth=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i;y:=j;prior:=4;End;
  190. If(Rigth=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i;y:=j;Prior:=4;End;
  191. If(left=0)and(pole[i-2,j+2]=0)and(pole[i,j]=0)and
  192. (Rigth=0)And(Sum=1)And(cx=1)And(proz=0) Then Begin x:=i-1;y:=j+1;Prior:=4;End;
  193. If(left=0)and(pole[i-2,j+2]=0)and(pole[i,j]=0)and
  194. (Rigth=0)And(Sum=2)And(cx=2)And(proz=0) Then Begin x:=i-1;y:=j+1;Prior:=4;End;
  195. End;
  196. End;
  197. End;
  198. If (x>=1)and(x<=n)and(y>=1)and(y<=n)and((pole[x,y])=0) Then
  199. Else Begin
  200. prior:=1;
  201. x:=0;y:=0;
  202. End;
  203. End;
  204. Procedure Diag2(Var cx,x,y,prior : byte);Far;
  205. Var
  206. i,j,left,Rigth,Proz,Sum,t: byte;
  207. Begin
  208. For t:=n downto 5 do
  209. Begin
  210. i:=t;j:=n;
  211. While j>=2 do
  212. Begin
  213. Dec(j);Inc(i);
  214. Rigth:=pole[i+1,j-1];Left:=pole[i-3,j+3];
  215. Sum:=pole[i,j]+pole[i-1,j+1]+pole[i-2,j+2];
  216. Proz:=pole[i,j]*pole[i-1,j+1]*pole[i-2,j+2];
  217. If(left=0)and(rigth=0)and(sum=3)and(proz=1)and(prior<>5)then Begin x:=i+1;y:=j-1;prior:=5;End;
  218. IF(left=0)and(rigth=0)and(sum=6)and(proz=8)and(prior<>5)then Begin x:=i+1;y:=j-1;prior:=5;End;
  219. IF(left=2)and(rigth=0)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i+1;y:=j-1;prior:=5;end;
  220. IF(left=0)and(rigth=2)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i-3;y:=j+3;prior:=5;end;
  221. IF(left=1)and(rigth=0)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i;y:=j;prior:=5;end;
  222. IF(left=0)and(rigth=1)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i-3;y:=j+3;prior:=5;end;
  223. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  224. (pole[i,j]=1)and(pole[i-2,j+2]=1)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  225. If(left=0)and(rigth=1)and(sum=2)and(proz=0)and
  226. (pole[i,j]=1)and(pole[i-2,j+2]=1)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  227. If(left=1)and(rigth=0)and(sum=2)and(proz=0)and
  228. (pole[i,j]=1)and(pole[i-2,j+2]=1)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  229. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  230. (pole[i,j]=2)and(pole[i-2,j+2]=2)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  231. If(left=0)and(rigth=2)and(sum=4)and(proz=0)and
  232. (pole[i,j]=2)and(pole[i-2,j+2]=2)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  233. If(left=2)and(rigth=0)and(sum=4)and(proz=0)and
  234. (pole[i,j]=2)and(pole[i-2,j+2]=2)and(prior<>5)then Begin x:=i-1;y:=j+1;prior:=5;end;
  235. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and(prior<>5)and
  236. (pole[i,j]=1)and(pole[i-1,j+1]=1)then Begin x:=i-2;y:=j+2;prior:=5;end;
  237. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  238. (pole[i,j]=2)and(pole[i-1,j+1]=2)and(prior<>5)then Begin x:=i-2;y:=j+2;prior:=5;end;
  239. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and(prior<>5)and
  240. (pole[i-1,j+1]=1)and(pole[i-2,j+2]=1)then Begin x:=i;y:=j;prior:=5;end;
  241. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  242. (pole[i-2,j+2]=2)and(pole[i-1,j+1]=2)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  243. If prior<>5 then Begin
  244. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  245. (pole[i,j]=1)and(pole[i-2,j+2]=1)and(cx=1)then Begin x:=i-1;y:=j+1;prior:=4;end;
  246. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  247. (pole[i,j]=2)and(pole[i-2,j+2]=2)and(cx=2)then Begin x:=i-1;y:=j+1;prior:=4;end;
  248. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  249. (pole[i-1,j+1]=1)and(pole[i-2,j+2]=1)and(cx=1)then Begin x:=i;y:=j;prior:=4;end;
  250. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  251. (pole[i-1,j+1]=2)and(pole[i-2,j+2]=2)and(cx=2)then Begin x:=i;y:=j;prior:=4;end;
  252. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  253. (pole[i,j]=1)and(pole[i-1,j+1]=1)and(cx=1)then Begin x:=i-2;y:=j+2;prior:=4;end;
  254. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  255. (pole[i-1,j+1]=2)and(pole[i,j]=2)and(cx=2)then Begin x:=i-2;y:=j+2;prior:=4;end;
  256. If(left=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i-3;y:=j+3;prior:=4;End;
  257. If(left=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i-3;y:=j+3;Prior:=4;End;
  258. If(Rigth=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i;y:=j;prior:=4;End;
  259. If(Rigth=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i;y:=j;Prior:=4;End;
  260. If(left=0)and(pole[i-2,j+2]=0)and(pole[i,j]=0)and
  261. (Rigth=0)And(Sum=1)And(cx=1)And(proz=0) Then Begin x:=i-1;y:=j+1;Prior:=4;End;
  262. If(left=0)and(pole[i-2,j+2]=0)and(pole[i,j]=0)and
  263. (Rigth=0)And(Sum=2)And(cx=2)And(proz=0) Then Begin x:=i-1;y:=j+1;Prior:=4;End;
  264. End;
  265. End;
  266. End;
  267. If (x>=1)and(x<=n)and(y>=1)and(y<=n)and((pole[x,y])=0) Then
  268. Else Begin
  269. prior:=1;
  270. x:=0;y:=0;
  271. End;
  272. End;
  273. Procedure Diag3(Var cx,x,y,prior : byte);Far;
  274. Var
  275. i,j,left,Rigth,Proz,Sum,t: byte;
  276. Begin
  277. For t:=n-5 downto 1 do
  278. Begin
  279. i:=3;j:=t+3;
  280. While i<=4 do
  281. Begin
  282. Inc(j);Inc(i);
  283. Rigth:=pole[i+1,j+1];Left:=pole[i-3,j-3];
  284. Sum:=pole[i,j]+pole[i-1,j-1]+pole[i-2,j-2];
  285. Proz:=pole[i,j]*pole[i-1,j-1]*pole[i-2,j-2];
  286. If(left=0)and(rigth=0)and(sum=3)and(proz=1)and(prior<>5)then Begin x:=i+1;y:=j+1;prior:=5;End;
  287. IF(left=0)and(rigth=0)and(sum=6)and(proz=8)and(prior<>5)then Begin x:=i+1;y:=j+1;prior:=5;End;
  288. IF(left=2)and(rigth=0)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i+1;y:=j+1;prior:=5;end;
  289. IF(left=0)and(rigth=2)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i-3;y:=j-3;prior:=5;end;
  290. IF(left=1)and(rigth=0)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i+1;y:=j+1;prior:=5;end;
  291. IF(left=0)and(rigth=1)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i-3;y:=j-3;prior:=5;end;
  292. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  293. (pole[i,j]=1)and(pole[i-2,j-2]=1)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  294. If(left=0)and(rigth=1)and(sum=2)and(proz=0)and
  295. (pole[i,j]=1)and(pole[i-2,j-2]=1)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  296. If(left=1)and(rigth=0)and(sum=2)and(proz=0)and
  297. (pole[i,j]=1)and(pole[i-2,j-2]=1)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  298. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  299. (pole[i,j]=2)and(pole[i-2,j-2]=2)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  300. If(left=0)and(rigth=2)and(sum=4)and(proz=0)and
  301. (pole[i,j]=2)and(pole[i-2,j-2]=2)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  302. If(left=2)and(rigth=0)and(sum=4)and(proz=0)and
  303. (pole[i,j]=2)and(pole[i-2,j-2]=2)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  304. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  305. (pole[i,j]=1)and(pole[i-1,j-1]=1)and(prior<>5)then Begin x:=i-2;y:=j-2;prior:=5;end;
  306. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  307. (pole[i,j]=2)and(pole[i-1,j-1]=2)and(prior<>5)then Begin x:=i-2;y:=j-2;prior:=5;end;
  308. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  309. (pole[i-2,j-2]=1)and(pole[i-1,j-1]=1)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  310. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  311. (pole[i-2,j-2]=2)and(pole[i-1,j-1]=2)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  312. If prior<>5 then Begin
  313. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  314. (pole[i,j]=1)and(pole[i-2,j-2]=1)and(cx=1)then Begin x:=i-1;y:=j-1;prior:=4;end;
  315. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  316. (pole[i,j]=2)and(pole[i-2,j-2]=2)and(cx=2)then Begin x:=i-1;y:=j-1;prior:=4;end;
  317. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  318. (pole[i-1,j-1]=1)and(pole[i-2,j-2]=1)and(cx=1)then Begin x:=i;y:=j;prior:=4;end;
  319. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  320. (pole[i-1,j-1]=2)and(pole[i-2,j-2]=2)and(cx=2)then Begin x:=i;y:=j;prior:=4;end;
  321. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  322. (pole[i-1,j-1]=1)and(pole[i,j]=1)and(cx=1)then Begin x:=i-2;y:=j-2;prior:=4;end;
  323. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  324. (pole[i-1,j-1]=2)and(pole[i,j]=2)and(cx=2)then Begin x:=i-2;y:=j-2;prior:=4;end;
  325. If(Rigth=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i;y:=j;prior:=4;End;
  326. If(Rigth=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i;y:=j;Prior:=4;End;
  327. If(left=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i-3;y:=j-3;prior:=4;End;
  328. If(left=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i-3;y:=j-3;Prior:=4;End;
  329. If(left=0)and(pole[i-2,j-2]=0)and(pole[i,j]=0)and
  330. (Rigth=0)And(Sum=1)And(cx=1)And(proz=0) Then Begin x:=i-1;y:=j-1;Prior:=4;End;
  331. If(left=0)and(pole[i-2,j-2]=0)and(pole[i,j]=0)and
  332. (Rigth=0)And(Sum=2)And(cx=2)And(proz=0) Then Begin x:=i-1;y:=j-1;Prior:=4;End;
  333. End;
  334. End;
  335. End;
  336. If (x>=1)and(x<=n)and(y>=1)and(y<=n)and((pole[x,y])=0) Then
  337. Else Begin
  338. prior:=1;
  339. x:=0;y:=0;
  340. End;
  341. End;
  342. Procedure Diag4(Var cx,x,y,prior : byte);Far;
  343. Var
  344. i,j,left,Rigth,Proz,Sum,t: byte;
  345. Begin
  346. For t:=5 to n do
  347. Begin
  348. i:=3;j:=t-2;
  349. While j<=n-1 do
  350. Begin
  351. Inc(j);Inc(i);
  352. Rigth:=pole[i+1,j+1];Left:=pole[i-3,j-3];
  353. Sum:=pole[i,j]+pole[i-1,j-1]+pole[i-2,j-2];
  354. Proz:=pole[i,j]*pole[i-1,j-1]*pole[i-2,j-2];
  355. If(left=0)and(rigth=0)and(sum=3)and(proz=1)and(prior<>5)then Begin x:=i+1;y:=j+1;prior:=5;End;
  356. IF(left=0)and(rigth=0)and(sum=6)and(proz=8)and(prior<>5)then Begin x:=i+1;y:=j+1;prior:=5;End;
  357. IF(left=2)and(rigth=0)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i+1;y:=j+1;prior:=5;end;
  358. IF(left=0)and(rigth=2)and(sum=6)and(proz=8)and(prior<=5)then Begin x:=i-3;y:=j-3;prior:=5;end;
  359. IF(left=1)and(rigth=0)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i+1;y:=j+1;prior:=5;end;
  360. IF(left=0)and(rigth=1)and(sum=3)and(proz=1)and(prior<=5)then Begin x:=i-3;y:=j-3;prior:=5;end;
  361. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  362. (pole[i,j]=1)and(pole[i-2,j-2]=1)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  363. If(left=0)and(rigth=1)and(sum=2)and(proz=0)and
  364. (pole[i,j]=1)and(pole[i-2,j-2]=1)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  365. If(left=1)and(rigth=0)and(sum=2)and(proz=0)and
  366. (pole[i,j]=1)and(pole[i-2,j-2]=1)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  367. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  368. (pole[i,j]=2)and(pole[i-2,j-2]=2)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  369. If(left=0)and(rigth=2)and(sum=4)and(proz=0)and
  370. (pole[i,j]=2)and(pole[i-2,j-2]=2)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  371. If(left=2)and(rigth=0)and(sum=4)and(proz=0)and
  372. (pole[i,j]=2)and(pole[i-2,j-2]=2)and(prior<>5)then Begin x:=i-1;y:=j-1;prior:=5;end;
  373. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  374. (pole[i,j]=1)and(pole[i-1,j-1]=1)and(prior<>5)then Begin x:=i-2;y:=j-2;prior:=5;end;
  375. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  376. (pole[i,j]=2)and(pole[i-1,j-1]=2)and(prior<>5)then Begin x:=i-2;y:=j-2;prior:=5;end;
  377. If(left=1)and(rigth=1)and(sum=2)and(proz=0)and
  378. (pole[i-2,j-2]=1)and(pole[i-1,j-1]=1)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  379. If(left=2)and(rigth=2)and(sum=4)and(proz=0)and
  380. (pole[i-2,j-2]=2)and(pole[i-1,j-1]=2)and(prior<>5)then Begin x:=i;y:=j;prior:=5;end;
  381. If prior<>5 then Begin
  382. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  383. (pole[i,j]=1)and(pole[i-2,j-2]=1)and(cx=1)then Begin x:=i-1;y:=j-1;prior:=4;end;
  384. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  385. (pole[i,j]=2)and(pole[i-2,j-2]=2)and(cx=2)then Begin x:=i-1;y:=j-1;prior:=4;end;
  386. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  387. (pole[i-1,j-1]=1)and(pole[i-2,j-2]=1)and(cx=1)then Begin x:=i;y:=j;prior:=4;end;
  388. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  389. (pole[i-1,j-1]=2)and(pole[i-2,j-2]=2)and(cx=2)then Begin x:=i;y:=j;prior:=4;end;
  390. If(left=0)and(rigth=0)and(sum=2)and(proz=0)and
  391. (pole[i-1,j-1]=1)and(pole[i,j]=1)and(cx=1)then Begin x:=i-2;y:=j-2;prior:=4;end;
  392. If(left=0)and(rigth=0)and(sum=4)and(proz=0)and
  393. (pole[i-1,j-1]=2)and(pole[i,j]=2)and(cx=2)then Begin x:=i-2;y:=j-2;prior:=4;end;
  394. If(Rigth=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i;y:=j;prior:=4;End;
  395. If(Rigth=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i;y:=j;Prior:=4;End;
  396. If(left=1)and(sum=0)and(proz=0)and(cx=1)then Begin x:=i-3;y:=j-3;prior:=4;End;
  397. If(left=2)and(sum=0)and(proz=0)and(cx=2)then Begin x:=i-3;y:=j-3;Prior:=4;End;
  398. If(left=0)and(pole[i-2,j-2]=0)and(pole[i,j]=0)and
  399. (Rigth=0)And(Sum=1)And(cx=1)And(proz=0) Then Begin x:=i-1;y:=j-1;Prior:=4;End;
  400. If(left=0)and(pole[i-2,j-2]=0)and(pole[i,j]=0)and
  401. (Rigth=0)And(Sum=2)And(cx=2)And(proz=0) Then Begin x:=i-1;y:=j-1;Prior:=4;End;
  402. End;
  403. End;
  404. End;
  405. If (x>=1)and(x<=n)and(y>=1)and(y<=n)and(pole[x,y]=0) Then
  406. Else Begin
  407. prior:=1;
  408. x:=0;y:=0;
  409. End;
  410. End;
  411. Procedure Grisha1(cx : byte;Var x,y : byte);Far;
  412. Var prior : byte;
  413. Begin
  414. Prior:=1;
  415. Gor(cx,x,y,prior);
  416. Ver(cx,x,y,prior);
  417. Diag1(cx,x,y,prior);
  418. Diag2(cx,x,y,prior);
  419. Diag3(cx,x,y,prior);
  420. Diag4(cx,x,y,prior);
  421. If (Prior=1)and(x=0)and(y=0)then Begin
  422. randomize;
  423. repeat
  424. x:=random(n)+1;
  425. y:=random(n)+1;
  426. until (Pole[x,y] = 0)and(x>=1)and(x<=n)
  427. and(y>=1)and(y<=n);
  428. End;
  429. End;