[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача
Batman8585
Добрый день. Помогите написать код, вот условия задачи. Зная текущую положение шахматного коня на доске, перечислить список всех уникальных возможных положений через 2 хода. Буду благодарен тому кто откликнится
VeRTak
Batman8585

Какие мысли по этой задаче? Что было написано? Что конкретно не получается?
Эли4ка
1) Можно банально перебором.
2) либо примерно так: конь ходит буквой "Г". определяем положение текущее. Далее три клетки вперед/назад/слево/вправо и куда будет смотреть носик влево/вправо. Если данная клетка существует и она не занята нашими фигурами тогда ход/атака.
walerus
Не все так просто.... в условии - через 2 хода, т.е. нужно просчитать все ходы остальных фигур, при каждом уникальном ходе коня..
Batman8585
Цитата (walerus @ 27.12.2018 - 18:56)
Не все так просто.... в условии - через 2 хода, т.е. нужно просчитать все ходы остальных фигур, при каждом уникальном ходе коня..

нет. остальных фигур считаем, что нет на доске. нужно лишь перечислить все уникальные ходы коня например начиная с Е6
Batman8585
Ребят пока ума хватило написать только это, но оно толком не работает. Если конь стоит в H8 то не правильно считает.
<?PHP
$x = 8;
$y = 8;
$a = $x + 1;
$b = $y + 2;
if ($a = $a <= 8 ? $a : $a - 4);
if ($b = $b <= 8 ? $b : $b - 4) {
echo "$a"."$b,";
}
$c = $x - 1;
$d = $y + 2;
if ($c = $c <= 8 ? $c : $c - 4);
if ($d = $d <= 8 ? $d : $d - 4) {
echo "$c"."$d,";
}
$e = $x - 2;
$f = $y - 1;
if ($e = $e <= 8 ? $e : $e - 4);
if ($f = $f <= 8 ? $f : $f - 4) {
echo "$e"."$f,";
}
$g = $x - 2;
$h = $y + 1;
if ($g = $g <= 8 ? $g : $g - 4);
if ($h = $h <= 8 ? $h : $h - 4) {
echo "$g"."$h,";
}
?>
kaww
Batman8585, похоже, что это задача на рекурсию.
function knightMoves($start, $steps = 1)
{
$lettersMap = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6, 'g' => 7, 'h' => 8];
$moves = [
[
2, 1], [2, -1], [1, 2], [1, -2], //right
[-1, 2], [1, 2], [-2, 1], [2, 1], //bottom
[-2, 1], [-2, -1], [-1, 2], [-1, -2], //left
[-1, -2], [1, -2], [-2, -1], [2, -1], //top
];
$result = [];
foreach ((array)$start as $pos) {
$xy = [$lettersMap[$pos[0]], $pos[1]];
foreach ($moves as $move) {
$x = $xy[0] + $move[0];
$y = $xy[1] + $move[1];
if ($x > 0 && $x < 9 && $y > 0 && $y < 9) {
$c = array_search($x, $lettersMap) . $y;
if (!in_array($c, $result)) {
$result[] = $c;
}
}
}
}

if ($steps > 1) {
return knightMoves($result, $steps - 1);
}
return $result;

}

var_dump(knightMoves('d4', 2));

$start - начальная позиция.
$steps - количество ходов, после которых получить все позиции коня на доске.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.