При вводе четырех целых чисел x 1 , y 1 , x 2 и y 2 выведите, может ли белый король в шахматах (с координатами ( x 1 , y 1 )) поймать черную пешку (с координатами ( x 2 , y) 2 )) и поймайте его, если пешка движется, чтобы продвинуться до ферзя как можно быстрее.
Координаты доски следующие:
first coordinate (x)
12345678
1 .#.#.#.#
2 #.#.#.#.
3 .#.#.#.#
second 4 #.#.#.#.
coordinate 5 .#.#.#.#
(y) 6 #.#.#.#.
7 .#.#.#.#
8 #.#.#.#.
Предположим, что ход белых (ход короля), и что оба игрока играют оптимально (король будет двигаться как можно быстрее, чтобы поймать пешку, а пешка будет двигаться как можно быстрее для продвижения). Входные координаты всегда будут различны, и пешка никогда не начнется с y-координаты 8.
Король передвигается на одну клетку в любом направлении каждый ход (он может двигаться по диагонали), а пешка может двигаться только на одну клетку вперед (уменьшая свою координату y), если только она не находится в своей начальной позиции (с нашей системой координат, координатой y 7), в этом случае он может двигаться вперед на два пробела.
Входные данные могут быть заданы в виде строки, разделенной пробелами / запятыми, массива строк / целых чисел или четырех аргументов функции / командной строки / и т. Д. Координаты могут быть заданы в любом удобном порядке / для гольфа (поэтому принимать входные данные как [y 2 , y 1 , x 1 , y 2 ] можно только при условии их согласованности). Вывод должен быть истинным или ложным значением .
Поскольку это код-гольф , выигрывает самый короткий код в байтах.
Правдивые тестовые случаи :
5 3 3 2
6 1 1 7
3 3 3 2
4 1 4 7
7 7 1 7
1 8 1 7
Ложные тесты :
6 4 3 2
8 8 1 7
3 4 3 2
x1 y1 x2 y2
?1 8 1 7
, в котором король захватывает, прежде чем пешка может переместиться на два пробела. Я думаю, что все ответы теперь не так. Эта ситуация делает проблему намного сложнее.Ответы:
Желе , 33 байта
Эта программа читает координаты как
x2\nx1\ny2\ny1
из STDIN. Попробуйте онлайн!Неконкурентная версия
К сожалению, у переводчика Jelly была ошибка, когда этот вопрос был опубликован. Указанная ошибка не позволила ему принять более двух аргументов командной строки. Новейшая версия Jelly может решить данную задачу за 23 байта .
Попробуйте онлайн!
источник
Python 2,
5340У короля есть координаты
(x, y)
и пешка(p, q)
.Есть три значимых случая:
Пешка находится на 7-м уровне, а король на 8-м. Чтобы захватить пешку, король должен находиться в том же файле или рядом с ним.
Результат:
q = 7 ⋀ y = 8 → |x - p| ≤ 1
Пешка находится на 7 уровне. Чтобы поймать пешку, король должен находиться в шести файлах.
Результат:
q = 7 → |x - p| ≤ 6
Пешка находится на более низком уровне. Чтобы поймать пешку, король должен быть в состоянии достичь поля повышения не более чем за один ход после пешки.
Результат:
q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q
Мое решение как раз в этих условиях. Надеюсь, на этот раз ошибок нет.
источник
abs
сmax(y-1,x-p,p-x)
?f(1,8,1,7)
быть,True
потому что король немедленно захватывает пешку? Я думаю, что есть тонкость, когда пешечный ряд 7 не может рассматриваться как ряд 6, если король немедленно захватывает.or
и-2
.Пролог,
4842 байтаКод:
Примеры:
Неплохой вызов для Пролога по сравнению с большинством.
Изменить: Сохранение 6 байтов путем переключения на формулу, используемую в ответе GRC's Python 2 .
К сожалению, Пролог не может связать сравнения как Python, а целочисленное деление на 1 байт длиннее, чем деление с плавающей запятой.
Попробуйте онлайн здесь
источник
JavaScript (ES6), 52
Я надеюсь сохранить байты без использования Math.abs, Math.min, Math.max
Пешка в седьмом ряду может избежать перемещения 2 пробелов, если и только если король не находится в ближайшем столбце - вот почему
d
перед заменой 7 на 6 стоит проверка .Тестовый пример для запуска в консоли:
Результат:
[true, true, true, true, false, false, false]
источник
Рубин, 50 байтов
Аргументы: (король x, король y, пешка x, пешка y), все целые числа.
источник