defnormalize(p):
x,y = p[0][0],p[0][1]
new_p = []
for cell in p:x,y = min(x,cell[0]),min(y,cell[1])
return sort_p(tuple([(i-x,j-y) for (i,j) in p]))
defrotate(p):
new_p = []
for cell in p:
new_p.append((cell[1],-cell[0]))
return sort_p(normalize(new_p))
defflip(p):
new_p = []
for cell in p:
new_p.append((cell[0],-cell[1]))
return sort_p(normalize(new_p))
defsort_p(p):return tuple(sorted(p,key = lambda cell:(cell[0],cell[1])))
defgenerate(p):
record = set()
for i in range(4):
p = rotate(p)
if p notin record:
record.add(p)
print_format(p)
p = flip(p)
for i in range(4):
p = rotate(p)
if p notin record:
record.add(p)
print_format(p)
defprint_format(p):
x,y = -1,0
print(p)
for cell in p:
if x!=cell[0]:print();print(' '*(cell[1]),end='');first = 0
print(' '*(cell[1]-y-1)*first+'*',end='')
first = 1
x,y = cell
print('\n','='*30)
generate(((0,0),(1,0),(2,0),(2,1),(2,2),(3,1),(5,2)))