Skip to content

Instantly share code, notes, and snippets.

@LostInKadath
Created November 16, 2018 20:21
Show Gist options
  • Save LostInKadath/0018b943ba100e58ec48bca9088fcfba to your computer and use it in GitHub Desktop.
Save LostInKadath/0018b943ba100e58ec48bca9088fcfba to your computer and use it in GitHub Desktop.
Определить, задает ли строка ход шахматного коня
'''https://t.me/unilecs
Задача 140. Определить, задает ли строка возможный ход шахматного коня.
Задача простая, решение тоже.
Перво-наперво валидируем полученную строку. Она должна разбиваться дефисом на два двухсимвольных токена,
каждый из которых состоит из буквы и цифры. Буква может быть только в диапазоне 'abcdefgh', цифра - в '12345678'.
Затем мы считаем разность между буквами и разность между цифрами с помощью ASCII-кода символов.
Ход шахматного коня имеет структуру - два поля в одном направлении и одно поле в другом.
Проверяем две полученные разности на соответствие одному из кортежей (1, 2) или (2, 1).
Получаем ответ.
'''
def validate(s):
if len(s) != 5:
return False
if s.find('-') != 2:
return False
for cell in s.lower().split('-'):
if cell[0] not in 'abcdefgh':
return False
if cell[1] not in '12345678':
return False
return True
def diff(c1, c2):
return abs(ord(c1) - ord(c2))
def task140(move):
if not validate(move):
return False
start, end = move.lower().split('-')
if (diff(start[0], end[0]), diff(start[1], end[1])) in [(1, 2), (2, 1)]:
return True
return False
print(task140('e2-E4')) # False
print(task140('B1-c3')) # True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment