Задача про ходы пешки Python

Условие задачи

Вам дана начальная клетка s белой Пешки на пустой шахматной доске 8×8, а также клетка t, в которой Пешка хочет оказаться.

Пешка должна сделать ровно два хода. Нужно определить, сможет ли Пешка через два хода попасть в клетку t.

Правила ходов

  • Пешка ходит вперёд (к большим номерам горизонталей):
    • на 1 клетку: (х, у) -> (х, у + 1);
    • со 2-й горизонтали может пойти сразу на 2 клетки: (x, 2) -> (x, 4).
  • Если после хода Пешка достигает 8-й горизонтали, она немедленно превращается в одну из фигур на ваш выбор: ферзь, ладья, слон или конь.
  • Если превращение произошло на первом ходу, то второй ход делает уже новая фигура по обычным шахматным правилам на пустой доске.
  • Взятие на проходе отсутствует.

Формат входных данных

Первая строка содержит целое число Т - количество тестов (1 <= Т <= 10000).
Каждый из следующих Т тестов содержит по две строки s и t - клетки в шахматной нотации (а1 ... h8).
Гарантируется, что начальная клетка s находится на 2-7й горизонтали (Пешка ещё не на 8-й).

Формат выходных данных

Для каждою теста выведите YES, если можно попасть в клетку t ровно за два хода, и NO в противном случае.

Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

Пример

стандартный ввод стандартный вывод
5
e2 e5 YES
e2 eЗ NO
a7 g8 YES
a7 a8 NO
c7 e7 YES

Моё решение

n=int(input())
for _ in range(n):
    st,fin=map(str,input().split())
    hodi = set()
    if int(st[1])==2:
        hodi.add(st[0]+'4')
        hodi.add(st[0]+'5')
    elif int(st[1]) < 7:
        hodi.add(st[0]+str(int(st[1])+2))
    else:
        # королева
        for i in range(ord('a'),ord('h')+1): 
            hodi.add(chr(i)+'8')
        w=ord(st[0])-1
        h=7
        while w >=ord('a'):
            hodi.add(chr(w)+str(h))
            h-=1
            w-=1
        w=ord(st[0])+1
        h=7
        while w <=ord('h'):
            hodi.add(chr(w)+str(h))
            h-=1
            w+=1
        # конь
        point = ord(st[0])
        zero = ord('a')
        full = ord('h')
        if point - zero >= 2:
            hodi.add(chr(point-2)+'7')
        if point - zero >= 1:
            hodi.add(chr(point-1)+'6')
        if full - point >= 2:
            hodi.add(chr(point+2)+'7')
        if full - point >= 2:
            hodi.add(chr(point+1)+'6')
        for i in range(1,8):
            hodi.add(st[0]+str(i))
        hodi.remove((st[0]+'8'))
    if fin in hodi:
        print('YES')
    else:
        print('NO')

Проходит только 1 тест, не понимаю где ошибка.


Исходный скрин с условием задачи (в примерах обрезан шестой тест, поэтому выше в распознанном тексте число 6 в первой строке заменено на 5 и удален YES в последней строке, который относится к обрезанному тесту, а содержимое второго столбца смещено на одну строку вниз, чтобы визуально совместить тест и ожидаемый результат):

условие


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Я протестировал вашу программу на всех возможных входах и нашёл одну единственную ошибку: g7 h6NO. Но с поля g7 пешка идёт на g8, превращается в коня, который может пойти с g8 на h6.

Чтобы её исправить, замените последнее условие для коня в строке 36 на
if full - point >= 1:.

→ Ссылка