Skip to content

Instantly share code, notes, and snippets.

@yuitest
Last active October 11, 2018 12:57
Show Gist options
  • Save yuitest/b8d2a72af41e8506416280d6d221e820 to your computer and use it in GitHub Desktop.
Save yuitest/b8d2a72af41e8506416280d6d221e820 to your computer and use it in GitHub Desktop.
#patterns = 160
---
BAC
BBA
BAA
---
ABA
BCB
ABA
---
BBA
CBB
AAA
---
ABB
BBA
CAA
---
ABA
ABB
CAB
---
AAB
BAC
BAB
---
ACA
BBB
ABA
---
CBB
AAB
BAA
---
ABB
ABA
ACB
---
BAA
ABB
CAB
---
BCB
AAB
AAB
---
ABB
BBC
AAA
---
ACB
AAB
BBA
---
ACB
AAA
BBB
---
BCB
ABA
AAB
---
ABB
CBB
AAA
---
BBC
BAA
BAA
---
ABA
BBA
CBA
---
CBA
ABA
BBA
---
BAB
CBA
AAB
---
BBB
BAC
AAA
---
CBA
ABA
BAB
---
BAA
ACB
ABB
---
AAB
BCA
BAB
---
ACB
BAA
ABB
---
ABC
BAA
ABB
---
BAA
BBB
AAC
---
BAB
BAA
BCA
---
BBA
BBA
AAC
---
AAB
CAB
BBA
---
BAC
BAB
ABA
---
BCA
ABA
BAB
---
AAB
AAB
BCB
---
BBB
ABC
AAA
---
BAA
BBA
CAB
---
ABC
ABB
AAB
---
BBA
ABB
ACA
---
BBB
CBA
AAA
---
AAA
ABB
BCB
---
ABA
BBB
CAA
---
ABA
BBC
AAB
---
ACB
BAB
AAB
---
AAA
BCB
BBA
---
AAB
BAA
BCB
---
CAA
BBB
BAA
---
BBA
AAB
BAC
---
BCB
BAA
ABA
---
BCB
AAB
ABA
---
BCA
BBA
AAB
---
BAB
ACA
BAB
---
BAC
BAB
AAB
---
ACA
ABB
BBA
---
CBA
BAA
ABB
---
BAA
CAB
BAB
---
ABA
ABB
ABC
---
ABA
ABC
BAB
---
BCB
ABB
AAA
---
BAA
BAA
BBC
---
ACB
ABB
BAA
---
BCA
ABA
ABB
---
BBC
BAB
AAA
---
ABC
ABA
BAB
---
ABA
BBA
CAB
---
BBA
BAC
AAB
---
BBA
ACA
ABB
---
CAB
ABB
BAA
---
BBA
ABA
CBA
---
BAA
AAB
BBC
---
ABA
CAB
ABB
---
CAB
AAA
BBB
---
BAB
AAB
ABC
---
BBC
AAA
ABB
---
AAB
ACA
BBB
---
BBA
CAA
ABB
---
ABA
CBA
BAB
---
BAA
BCB
AAB
---
ABA
BAC
ABB
---
BBA
BAB
CAA
---
ABC
ABB
BAA
---
BBA
ABC
BAA
---
BCB
ABA
ABA
---
ABB
BAA
BAC
---
BBB
BAA
AAC
---
BBA
BCB
AAA
---
BBA
CAA
BBA
---
ABC
BBA
AAB
---
BAA
BBB
ACA
---
BBA
AAA
BBC
---
ABB
AAB
CBA
---
BAB
BCA
ABA
---
ACA
BAA
BBB
---
ABA
BBA
ACB
---
BBA
ACB
ABA
---
BAA
BBC
BAA
---
AAB
CAB
BAB
---
BCB
ABA
BAA
---
ABA
ABA
BBC
---
ACB
BAA
BAB
---
ABB
ABA
BCA
---
BCA
BAB
BAA
---
ABA
CAB
BBA
---
BAB
AAC
BBA
---
BAB
ABB
CAA
---
ABB
BAA
CBA
---
CAB
BAA
BAB
---
AAB
CAA
BBB
---
BAB
ACA
BBA
---
BAA
BCB
BAA
---
AAB
BBB
CAA
---
ABA
CBA
BBA
---
ABB
ABB
ACA
---
BCA
BAB
AAB
---
ABB
CBA
AAB
---
BAA
AAB
BCB
---
ABC
AAA
BBB
---
ABA
BAB
CBA
---
ABB
CBA
BAA
---
BAB
BAA
ABC
---
BBA
ABB
AAC
---
CAB
AAB
ABB
---
ABB
CAB
BAA
---
BBB
ABA
CAA
---
ABC
BBA
ABA
---
BBA
ABA
BCA
---
BAB
CAA
BAB
---
AAB
ACB
BBA
---
BAB
AAA
BBC
---
CBB
ABB
AAA
---
BAC
BAB
BAA
---
AAB
ABB
BAC
---
BBA
ABC
AAB
---
ABB
ABB
AAC
---
AAC
ABB
BAB
---
AAC
BBA
ABB
---
BAC
AAA
BBB
---
ABA
BCB
AAB
---
ACB
AAB
ABB
---
BBB
BAA
ACA
---
BBA
CBA
ABA
---
AAB
ABA
CBB
---
CAB
BAA
BBA
---
BBC
AAB
AAB
---
CAA
ABB
BAB
---
ABA
BAA
CBB
---
BAB
BAB
AAC
---
BBA
ABC
ABA
---
CBB
BAA
ABA
---
BBA
BCA
BAA
---
AAB
ACB
BAB
---
BBA
ACA
BBA
---
ABA
AAB
CBB
---
BAB
ABA
CAB
---
AAC
BAB
BBA
---
CBB
BAB
AAA
---
BBA
ACB
BAA
---
AAB
ABB
ABC
---
BBA
BAB
ACA
---
BBB
BCA
AAA
---
ABB
BAA
ACB
---
BBA
AAC
BBA
import enum
import itertools
class Tile(enum.Enum):
A = 'A'
B = 'B'
C = 'C'
def __str__(self):
return self.value
def spin_3x3tiles(tiles):
(
a, b, c,
d, e, f,
g, h, i,
) = tiles
spinned = (
g, d, a,
h, e, b,
i, f, c,
)
return spinned
def all_spinning_patterns(tiles):
deg0 = tiles
deg90 = spin_3x3tiles(deg0)
deg180 = spin_3x3tiles(deg90)
deg270 = spin_3x3tiles(deg180)
return frozenset({deg0, deg90, deg180, deg270})
def tiles_to_string(tiles):
(
a, b, c,
d, e, f,
g, h, i,
) = tiles
return f'{a}{b}{c}\n{d}{e}{f}\n{g}{h}{i}'
def permutation_of_duplicate_items(*items):
for i, item in enumerate(items):
count, value = item
if count < 1:
continue
if count == 1:
remains = (*items[0:i], *items[i + 1:])
else:
remains = (*items[0:i], (count - 1, value), *items[i + 1:])
if not remains:
yield (value,)
continue
for values_from_remains in permutation_of_duplicate_items(*remains):
yield (value, *values_from_remains)
def make_3x3_tiles_from_9_tiles(line_tiles):
a, b, c, d, e, f, g, h, i = line_tiles
return (
a, b, c,
d, e, f,
g, h, i,
)
def main():
all_tiles_patterns = (make_3x3_tiles_from_9_tiles(v)
for v in permutation_of_duplicate_items((4, Tile.A),
(4, Tile.B),
(1, Tile.C)))
every_pattern = frozenset(all_spinning_patterns(tiles)
for tiles in all_tiles_patterns)
answer = len(every_pattern)
print(f'#patterns = {answer}')
for group_of_tiles in every_pattern:
tiles = list(group_of_tiles)[0]
print(f'---\n{tiles_to_string(tiles)}')
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment