smarter generation of permutations
This commit is contained in:
parent
74ab281f75
commit
d73dba80cd
1 changed files with 13 additions and 14 deletions
27
blokus.py
27
blokus.py
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue