fork download
  1. <?php
  2.  
  3.  
  4.  
  5.  
  6. abstract class Animal
  7. {
  8. protected $xPoint;
  9. protected $yPoint;
  10. protected $field;
  11.  
  12. public function __construct(Field $field)
  13. {
  14. $this->field = $field;
  15. }
  16.  
  17. public function getPosition()
  18. {
  19. return [$this->xPoint, $this->yPoint];
  20. }
  21.  
  22. public function setPosition($x, $y)
  23. {
  24. $this->xPoint = $x;
  25. $this->yPoint = $y;
  26. }
  27.  
  28. public function getLabel()
  29. {
  30. return $this->label;
  31. }
  32.  
  33. protected function findOrthogonalSteps()
  34. {
  35. $orthogonalSteps = [];
  36. if($this->xPoint !== 0) {
  37. $orthogonalSteps[] = [$this->xPoint - 1, $this->yPoint];
  38. }
  39. if($this->yPoint !== 0) {
  40. $orthogonalSteps[] = [$this->xPoint, $this->yPoint - 1];
  41. }
  42. if($this->xPoint !== $this->field->getSize()) {
  43. $orthogonalSteps[] = [$this->xPoint + 1, $this->yPoint];
  44. }
  45. if($this->yPoint !== $this->field->getSize()) {
  46. $orthogonalSteps[] = [$this->xPoint, $this->yPoint + 1];
  47. }
  48. return $orthogonalSteps;
  49. }
  50.  
  51. protected function findDiagonalSteps()
  52. {
  53. $diagonalSteps = [];
  54. if($this->xPoint !== 0 && $this->yPoint !== 0) {
  55. $diagonalSteps[] = [$this->xPoint - 1, $this->yPoint - 1];
  56. }
  57. if($this->yPoint !== 0 && $this->xPoint !== $this->field->getSize()) {
  58. $diagonalSteps[] = [$this->xPoint + 1, $this->yPoint - 1];
  59. }
  60. if($this->yPoint !== $this->field->getSize() &&
  61. $this->xPoint !== $this->field->getSize()) {
  62. $diagonalSteps[] = [$this->xPoint + 1, $this->yPoint + 1];
  63. }
  64. if($this->xPoint !== 0 && $this->yPoint !== $this->field->getSize()) {
  65. $diagonalSteps[] = [$this->xPoint - 1, $this->yPoint + 1];
  66. }
  67. return $diagonalSteps;
  68. }
  69.  
  70. protected function calcStepPrice(array $startPoint, array $endPoint)
  71. {
  72. $horizontalDiff = abs($startPoint[0] - $endPoint[0]);
  73. $verticalDiff = abs($startPoint[1] - $endPoint[1]);
  74. return ($verticalDiff + $horizontalDiff) * 10;
  75. }
  76.  
  77. protected function findNearestEnemy(array $enemies)
  78. {
  79. $enemiesPrices = [];
  80. foreach($enemies as $enemy) {
  81. $enemiesPrices[$this->calcStepPrice($this->getPosition(), $enemy->getPosition())] = $enemy;
  82. }
  83. return $enemiesPrices[min(array_keys($enemiesPrices))];
  84. }
  85.  
  86. protected function excludeClosedPositions(array $animals, array $availableSteps)
  87. {
  88. foreach($animals as $animal) {
  89. if(in_array($animal->getPosition(), $availableSteps)) {
  90. $key = array_search($animal->getPosition(), $availableSteps, true);
  91. unset($availableSteps[$key]);
  92. }
  93. }
  94. return $availableSteps;
  95. }
  96.  
  97. protected function setPricesOfSteps(Animal $nearestEnemy, array $allys, array $dogs)
  98. {
  99. $pricesOfSteps = [];
  100. $endingPosition = $nearestEnemy->getPosition();
  101. $availableSteps = $this->findAvailableSteps($allys, $dogs);
  102. foreach($availableSteps as $step) {
  103. $price = $this->calcStepPrice($step, $endingPosition);
  104. $pricesOfSteps[$price] = $step;
  105. }
  106. return $pricesOfSteps;
  107. }
  108. }
  109.  
  110.  
  111. class Mouse extends Animal
  112. {
  113. protected $label = "M";
  114. private $visibleFieldRadius = 9;
  115. private $isProtected;
  116. private $isAlive = true;
  117.  
  118. public function getState()
  119. {
  120. return $this->isAlive;
  121. }
  122.  
  123. public function setState($state)
  124. {
  125. $this->isAlive = $state;
  126. }
  127.  
  128. protected function findAvailableSteps($mouses, $dogs)
  129. {
  130. $availableSteps = $this->findOrthogonalSteps();
  131. $availableSteps = $this->excludeClosedPositions(array_merge($mouses, $dogs), $availableSteps);
  132. $availableSteps[] = $this->getPosition();
  133. return $availableSteps;
  134. }
  135.  
  136. private function findVisibleField($size)
  137. {
  138. $radius = floor($size / 2);
  139. $visibleField = [];
  140. $leftBound = max(0, $this->xPoint - $radius);
  141. $rightBound = min($this->xPoint + $radius, $this->field->getSize());
  142. $upBound = max(0, $this->yPoint - $radius);
  143. $downBound = min($this->yPoint + $radius, $this->field->getSize());
  144. $visibleField = [];
  145. for($i = $leftBound; $i <= $rightBound; $i++) {
  146. for($j = $upBound; $j <= $downBound; $j++) {
  147. $visibleField[] = [$i, $j];
  148. }
  149. }
  150. return $visibleField;
  151. }
  152.  
  153. private function checkVisibleAnimals(array $animals, $radius)
  154. {
  155. $visibleAnimals = [];
  156. $visibleField = $this->findVisibleField($radius);
  157. foreach($animals as $animal) {
  158. if(in_array($animal->getPosition(), $visibleField)) {
  159. $visibleAnimals[] = $animal;
  160. }
  161. }
  162. return $visibleAnimals;
  163. }
  164.  
  165. private function checkProtection(array $mouses)
  166. {
  167. $this->isProtected = false;
  168. $mousesPos = [];
  169. foreach($mouses as $mouse) {
  170. $mousesPos[] = $mouse->getPosition();
  171. }
  172. $area = array_merge($this->findDiagonalSteps(), $this->findOrthogonalSteps());
  173. $counter = 0;
  174. foreach($mousesPos as $position) {
  175. if(in_array($position, $area)) {
  176. $counter++;
  177. }
  178. }
  179. if($counter >= 2) {
  180. $this->isProtected = true;
  181. }
  182. }
  183.  
  184. public function isProtected()
  185. {
  186. return $this->isProtected;
  187. }
  188.  
  189. public function makeStep()
  190. {
  191. $cats = $this->field->getAnimalsByType("Cat");
  192. $mouses = $this->field->getAnimalsByType("Mouse");
  193. $dogs = $this->field->getAnimalsByType("Dog");
  194. $this->checkProtection($mouses);
  195. $visibleCats = $this->checkVisibleAnimals($cats, 9);
  196. if($visibleCats) {
  197. $nearestEnemy = $this->findNearestEnemy($visibleCats);
  198. $pricesOfSteps = $this->setPricesOfSteps($nearestEnemy, $mouses, $dogs);
  199. $position = $pricesOfSteps[max(array_keys($pricesOfSteps))];
  200. $this->xPoint = $position[0];
  201. $this->yPoint = $position[1];
  202. } else {
  203. $availableSteps = $this->findAvailableSteps($mouses, $dogs);
  204. $positionIndex = array_rand($availableSteps);
  205. $position = $availableSteps[$positionIndex];
  206. $this->xPoint = $position[0];
  207. $this->yPoint = $position[1];
  208. }
  209. }
  210. }
  211.  
  212.  
  213. class Cat extends Animal
  214. {
  215. protected $label = "K";
  216. private $stepsToSleepCounter = 1;
  217. private $sleepy = false;
  218.  
  219. protected function findAvailableSteps($cats, $dogs)
  220. {
  221. $availableSteps = array_merge($this->findOrthogonalSteps(), $this->findDiagonalSteps());
  222. $availableSteps = $this->excludeClosedPositions($cats, $availableSteps);
  223. $availableSteps[] = $this->getPosition();
  224. $availableSteps = $this->checkDogs($dogs, $availableSteps);
  225. $availableSteps[] = $this->getPosition();
  226. return $availableSteps;
  227. }
  228.  
  229. private function checkDogs(array $dogs, array $availableSteps)
  230. {
  231. $dogsAdjacentPos = [];
  232. foreach($dogs as $dog) {
  233. $dogsAdjacentPos = array_merge($dogsAdjacentPos, $dog->getAdjacentPositions());
  234. }
  235. foreach($availableSteps as $step) {
  236. if(in_array($step, $dogsAdjacentPos)) {
  237. $key = array_search($step, $availableSteps, true);
  238. unset($availableSteps[$key]);
  239. }
  240. }
  241. return $availableSteps;
  242. }
  243.  
  244. public function makeStep()
  245. {
  246. if($this->label === "@") {
  247. $this->label = "K";
  248. $this->stepsToSleepCounter = 0;
  249. } else {
  250. $cats = $this->field->getAnimalsByType("Cat");
  251. $mouses = $this->field->getAnimalsByType("Mouse");
  252. $dogs = $this->field->getAnimalsByType("Dog");
  253. $nearestEnemy = $this->findNearestEnemy($mouses);
  254. $pricesOfSteps = $this->setPricesOfSteps($nearestEnemy, $cats, $dogs);
  255. $position = $pricesOfSteps[min(array_keys($pricesOfSteps))];
  256. $this->xPoint = $position[0];
  257. $this->yPoint = $position[1];
  258. $this->stepsToSleepCounter++;
  259. if($position === $nearestEnemy->getPosition()) {
  260. $nearestEnemy->setState(false);
  261. $this->label = "@";
  262. $this->stepsToSleepCounter = 0;
  263. } else if($this->stepsToSleepCounter === 8) {
  264. $this->label = "@";
  265. $this->stepsToSleepCounter = 0;
  266. } else if($nearestEnemy->isProtected()) {
  267. $position = $pricesOfSteps[max(array_keys($pricesOfSteps))];
  268. }
  269. }
  270. }
  271. }
  272.  
  273.  
  274. class Dog extends Animal
  275. {
  276. protected $label = "C";
  277.  
  278. private function findAvailableSteps()
  279. {
  280. $availableSteps = [];
  281. if($this->xPoint > 1) {
  282. $availableSteps[] = [$this->xPoint - 2, $this->yPoint];
  283. }
  284. if($this->yPoint > 1) {
  285. $availableSteps[] = [$this->xPoint, $this->yPoint - 2];
  286. }
  287. if($this->xPoint + 1 < $this->field->getSize()) {
  288. $availableSteps[] = [$this->xPoint + 2, $this->yPoint];
  289. }
  290. if($this->yPoint + 1 < $this->field->getSize()) {
  291. $availableSteps[] = [$this->xPoint, $this->yPoint + 2];
  292. }
  293. if($this->xPoint > 1 && $this->yPoint > 1) {
  294. $availableSteps[] = [$this->xPoint - 2, $this->yPoint - 2];
  295. }
  296. if($this->yPoint > 1 && $this->xPoint + 1 < $this->field->getSize()) {
  297. $availableSteps[] = [$this->xPoint + 2, $this->yPoint - 2];
  298. }
  299. if($this->yPoint + 1 < $this->field->getSize() &&
  300. $this->xPoint + 1 < $this->field->getSize()) {
  301. $availableSteps[] = [$this->xPoint + 2, $this->yPoint + 2];
  302. }
  303. if($this->xPoint > 1 && $this->yPoint + 1 < $this->field->getSize()) {
  304. $availableSteps[] = [$this->xPoint - 2, $this->yPoint + 2];
  305. }
  306. return $availableSteps;
  307. }
  308.  
  309. public function makeStep()
  310. {
  311. $allAnimals = $this->field->getAnimals();
  312. $availableSteps = $this->findAvailableSteps();
  313. $availableSteps = $this->excludeClosedPositions($allAnimals, $availableSteps);
  314. $availableSteps[] = $this->getPosition();
  315. $positionIndex = array_rand($availableSteps);
  316. $position = $availableSteps[$positionIndex];
  317. $this->xPoint = $position[0];
  318. $this->yPoint = $position[1];
  319. }
  320.  
  321. public function getAdjacentPositions()
  322. {
  323. return array_merge($this->findDiagonalSteps(), $this->findOrthogonalSteps());
  324. }
  325. }
  326.  
  327.  
  328. class Field
  329. {
  330. private $size;
  331. private $animals;
  332.  
  333. public function __construct($size)
  334. {
  335. $this->size = $size;
  336. }
  337.  
  338. public function getAnimals()
  339. {
  340. return $this->animals;
  341. }
  342.  
  343. public function addAnimal(Animal $animal)
  344. {
  345. $this->animals[] = $animal;
  346. }
  347.  
  348. public function removeAnimal(Animal $animal)
  349. {
  350. $key = array_search($animal, $this->animals, true);
  351. unset($this->animals[$key]);
  352. }
  353.  
  354. public function getSize()
  355. {
  356. return $this->size;
  357. }
  358.  
  359. private function drawSchema()
  360. {
  361. $schema = [];
  362. for($i = $this->size; $i >= 0; $i--) {
  363. for($j = 0; $j <= $this->size; $j++) {
  364. $schema[] = [$j, $i];
  365. }
  366. }
  367. foreach($this->animals as $animal) {
  368. $key = array_search($animal->getPosition(), $schema, true);
  369. $schema[$key] = $animal->getLabel() . " ";
  370. }
  371. return $schema;
  372. }
  373.  
  374. public function getAnimalsByType($animalType)
  375. {
  376. $animals = [];
  377. foreach($this->animals as $animal) {
  378. if(get_class($animal) === $animalType) {
  379. $animals[] = $animal;
  380. }
  381. }
  382. return $animals;
  383. }
  384.  
  385. public function __toString()
  386. {
  387. $schema = $this->drawSchema();
  388. foreach($schema as $elem) {
  389. if(is_array($elem)) {
  390. $key = array_search($elem, $schema, true);
  391. $schema[$key] = ". ";
  392. }
  393. }
  394. $schema = implode("", $schema);
  395. $result = chunk_split($schema, ($this->size + 1) * 2, "\n");
  396. return $result;
  397. }
  398. }
  399.  
  400.  
  401. class Game
  402. {
  403. private $numMouses;
  404. private $numCats;
  405. private $numDogs;
  406. private $numSteps;
  407. private $field;
  408. private $stepNumber = 0;
  409.  
  410. public function __construct($numMouses, $numCats, $numDogs, $fieldSize, $numSteps)
  411. {
  412. $this->numMouses = $numMouses;
  413. $this->numCats = $numCats;
  414. $this->numDogs = $numDogs;
  415. $this->numSteps = $numSteps;
  416. $this->field = new Field($fieldSize);
  417. }
  418.  
  419. private function createAnimals($limit, $animalType)
  420. {
  421. for($i = 0; $i < $limit; $i++) {
  422. $animal = new $animalType($this->field);
  423. $this->field->addAnimal($animal);
  424. }
  425. }
  426.  
  427. private function animalsMakeSteps($animalClass)
  428. {
  429. foreach($this->field->getAnimals() as $animal) {
  430. if(get_class($animal) === $animalClass) {
  431. $animal->makeStep();
  432. }
  433. }
  434. }
  435.  
  436. private function removeDeadMouses()
  437. {
  438. foreach($this->field->getAnimals() as $animal) {
  439. if(get_class($animal) === "Mouse") {
  440. if($animal->getState() === false) {
  441. $this->field->removeAnimal($animal);
  442. }
  443. }
  444. }
  445. }
  446.  
  447. private function setAnimalPositions()
  448. {
  449. $unavailable = [];
  450. foreach($this->field->getAnimals() as $animal) {
  451. do {
  452. $xPoint = rand(1, $this->field->getSize());
  453. $yPoint = rand(1, $this->field->getSize());
  454. $animal->setPosition($xPoint, $yPoint);
  455. } while(in_array([$xPoint, $yPoint], $unavailable, true));
  456. $unavailable[] = $animal->getPosition();
  457. }
  458. }
  459.  
  460. private function makeReport()
  461. {
  462. $info = "Ход: " . $this->stepNumber .
  463. "\tМышек: " . count($this->field->getAnimalsByType("Mouse")) .
  464. "\tКошек: " . count($this->field->getAnimalsByType("Cat")) .
  465. "\tСобак: " . count($this->field->getAnimalsByType("Dog"));
  466. return $info;
  467. }
  468.  
  469. public function start()
  470. {
  471. $this->createAnimals($this->numMouses, "Mouse");
  472. $this->createAnimals($this->numCats, "Cat");
  473. $this->createAnimals($this->numDogs, "Dog");
  474. $this->setAnimalPositions();
  475. $this->stepNumber++;
  476. echo $this->makeReport() . "\n" . $this->field . "\n";
  477. for($i = 1; $i < $this->numSteps; $i++) {
  478. $this->animalsMakeSteps("Mouse");
  479. $this->animalsMakeSteps("Cat");
  480. $this->animalsMakeSteps("Dog");
  481. $this->removeDeadMouses();
  482. $this->stepNumber++;
  483. echo $this->makeReport() . "\n" . $this->field . "\n";
  484. if(count($this->field->getAnimalsByType("Mouse")) === 0) {
  485. break;
  486. }
  487. }
  488. }
  489. }
  490.  
  491.  
  492. $game = new Game(4, 2, 1, 15, 30);
  493. $game->start();
  494.  
Success #stdin #stdout 0.08s 24448KB
stdin
Standard input is empty
stdout
Ход: 1	Мышек: 4	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . K . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . M . . . 
. . . . . . . . . . . . . . . . 
. . . . . . M . . . . . K . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . M . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . M . . 
. . . . . . . . . . . . . . . . 

Ход: 2	Мышек: 4	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . K . . 
. . . . . . . . . . . . M . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . K . . . 
. . . . . . M . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . M . 
. . . . . . . C . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . M . . 
. . . . . . . . . . . . . . . . 

Ход: 3	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . K . . . 
. . . . . . . . . . . . @ . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . M . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . M . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . M . . . 
. . . . . . . . . . . . . . . . 

Ход: 4	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . K K . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . M . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . M . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . M . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 

Ход: 5	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . K K . 
. . . . . . . . . . . . . . . . 
. . . . . . M . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . M . 
. . . . . . . . . . . . . . . . 
. . . . . . . C . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . M . . . 
. . . . . . . . . . . . . . . . 

Ход: 6	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . K . 
. . . . . . . . . . . . . . K . 
. . . . . M . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . M . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . C . . . . M . . . 
. . . . . . . . . . . . . . . . 

Ход: 7	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . K . 
. . . . M . . . . . . . . . K . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . M . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . . . 
. . . . . . . . . . . . M . . . 

Ход: 8	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . M . . . . . . . . . . @ 
. . . . . . . . . . . . . . . K 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . M 
. . . C . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . M . . . . 

Ход: 9	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . M . . . . . . . . . . . K 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . K 
. . . . . C . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . M 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . M . . . . 

Ход: 10	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . M . . . . . . . . . . . . 
. . . . . . . C . . . . . . . K 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . K 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . M 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . M . . . . . 

Ход: 11	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . M . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . K 
. . . . . . . C . . . . . . . . 
. . . . . . . . . . . . . . . K 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . M 
. . . . . . . . . . M . . . . . 

Ход: 12	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . M . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . K 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . @ 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . M . . . . . 
. . . . . . . . . . . . . . . M 

Ход: 13	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . M . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . C . . . . . . . . 
. . . . . . . . . . . . . . K . 
. . . . . . . . . . . . . . . K 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . M . . . M . 

Ход: 14	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . M . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . K 
. . . . . . . . . . . . . . . K 
. . . . . . . . . . . . . . . . 
. . . . . . . . . M . . . . . M 

Ход: 15	Мышек: 3	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . M . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . C . . . . . . . . 
. . . . . . . . . . . . . . K . 
. . . . . . . . . . . . . . K . 
. . . . . . . . . . M . . . M . 

Ход: 16	Мышек: 2	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . M . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . C . . . . . . . K 
. . . . . . . . . M . . . . . @ 

Ход: 17	Мышек: 2	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. M . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . C . . . . . . . . 
. . . . . . . . M . . . . . @ K 

Ход: 18	Мышек: 2	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. M . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . . . 
. . . . . . . . M . . . . . K K 

Ход: 19	Мышек: 2	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. M . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . C . . . . . . . . 
. . . . . . . . M . . . . K . K 

Ход: 20	Мышек: 2	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . C . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . M . . K . K . 

Ход: 21	Мышек: 2	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . C . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . M . K . K . . 
. . . . . . . . . . . . . . . . 

Ход: 22	Мышек: 2	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . C . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . M K . K . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 

Ход: 23	Мышек: 1	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . C . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . @ . K . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 

Ход: 24	Мышек: 1	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . K . . . . 
. . . . . . . C . K . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 

Ход: 25	Мышек: 1	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . @ . . . . . 
. . . . . . . . . K . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . . . 
. . . . . . . . . . . . . . . . 

Ход: 26	Мышек: 1	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . K . K . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . . . 
. . . . . . . . . . . . . . . . 

Ход: 27	Мышек: 1	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . K . K . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . . . 
. . . . . . . . . . . . . . . . 

Ход: 28	Мышек: 1	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . K . K . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . C . . . . . . . . . . 
. . . . . . . . . . . . . . . . 

Ход: 29	Мышек: 1	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . K . K . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . C . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 

Ход: 30	Мышек: 1	Кошек: 2	Собак: 1
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
M . . . K . K . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . C . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . .