type PartialChessboard = list[int | None]
def hsymmetry(q: PartialChessboard) -> PartialChessboard:
n = len(q)
return [(n-row -1) if row is not None else None for row in q]
def dsymmetry(q: PartialChessboard) -> PartialChessboard:
n = len(q)
new_board: PartialChessboard = [None] * n
for i in range(n):
if q[i] is not None:
new_board[q[i]] = i
return new_board
def rotate(q: PartialChessboard) -> PartialChessboard:
'''
>>> rotate([2, 0, 3, 1])
[2, 0, 3, 1]
>>> rotate([2, None, 3, 1])
[None, 0, 3, 1]
>>> rotate([1, 3, 5, 0, 2, 4])
[2, 5, 1, 4, 0, 3]
>>> rotate([1, None, None, 0, 2, 4])
[2, 5, 1, None, 0, None]
>>>
'''
return hsymmetry(dsymmetry(q))
if __name__ == '__main__':
import doctest
doctest.testmod()