🖥 Задача ходы шахматного ферзя



На шахматной доске 8 х 8 стоит ферзь. Отметьте положение ферзя на доске и все клетки, которые бьет ферзь. Клетку, где стоит ферзь, отметьте буквой Q, клетки, которые бьет ферзь, отметьте звездочками *, остальные клетки заполните точками. Шахматный ферзь может ходить по вертикали, горизонтали и по диагоналям.



Входные данные:



Координаты ферзя на шахматной доске в формате номер столбца (буква от a до h, слева направо) и номер строки (цифра от 1 до 8, снизу вверх).



Пример ввода:



c4



Выходные данные:



Программа выводит стилизованное изображение шахматной доски со схемой возможных передвижений ферзя.



Пример вывода:





. . * . . . * .

. . * . . * . .

* . * . * . . .

. * * * . . . .

* * Q * * * * *

. * * * . . . .

* . * . * . . .

. . * . . * . .





Решение

Способ 1:




x, y, board = *('abcdefgh87654321'.index(i) % 8 for i in input()), range(8)

[print(*['?Q**.'[len({j - x, x - j, i - y, y - i})] for j in board]) for i in board]



Способ 2:



x, y = ('abcdefgh87654321'.index(i) % 8 for i in input())

directions = lambda i, j: (j - i == x - y) + (j + i == x + y) + ((j == x) != (i == y))

[print(*['.*Q'[directions(i, j)] for j in range(8)]) for i in range(8)]



Способ 3:



coor = input()

board = [['.'] * 8 for _ in range(8)]

y, x = 8 - int(coor[1]), ord(coor[0]) - 97

for i in range(8):

for j in range(8):

if (y == i) or (x == j) or abs(y - i) == abs(x - j):

board[i][j] = '*'

board[y][x] = 'Q'

for line in board:

print(*line)




✔️ Пишите свои решения в комментариях👇



@python_job_interview