smarter generation of permutations

This commit is contained in:
Noa Aarts 2025-11-27 23:59:23 +01:00
parent 74ab281f75
commit d73dba80cd
Signed by: noa
GPG key ID: 1850932741EFF672

View file

@ -37,26 +37,25 @@ tiles = [
]
def get_permutations(which_tiles: list[tuple[int, int]]):
def get_permutations(which_tiles: list[int]):
permutations = []
for i, tile in enumerate(tiles):
if i not in which_tiles:
continue
permutations.append((i, tile))
permutations.append((i, np.rot90(tile)))
permutations.append((i, np.rot90(np.rot90(tile))))
permutations.append((i, np.rot90(np.rot90(np.rot90(tile)))))
permutations.append((i, np.flip(tile)))
permutations.append((i, np.flip(np.rot90(tile))))
permutations.append((i, np.flip(np.rot90(np.rot90(tile)))))
permutations.append((i, np.flip(np.rot90(np.rot90(np.rot90(tile))))))
unique_arrays = []
for arr in permutations:
if not any(np.array_equal(arr, u) for u in unique_arrays):
unique_arrays.append(arr)
rots = [np.rot90(tile, k) for k in range(4)]
flips = [np.flip(r, axis=1) for r in rots] # flip horizontally
all_orients = rots + flips # 8 orientations
return unique_arrays
seen = set()
for t in all_orients:
key = (t.shape, t.tobytes())
if key not in seen:
seen.add(key)
permutations.append((i, t))
return permutations
def can_place(board, tile, player):