not proud
This commit is contained in:
parent
bcaec2d470
commit
ee2042dea4
83
2020/20/20.py
Normal file
83
2020/20/20.py
Normal file
|
@ -0,0 +1,83 @@
|
|||
def read_file():
|
||||
with open("input.txt","r") as f:
|
||||
tiledict = {}
|
||||
tiles = f.read().split('\n\n')
|
||||
for tile in tiles:
|
||||
tile = tile.split('\n')
|
||||
tile_id = int(tile[0].replace("Tile ","").replace(":",""))
|
||||
tile_data = tile[1:]
|
||||
tiledict[tile_id] = tile_data
|
||||
return tiledict
|
||||
|
||||
def get_edges(tiles, flip=False):
|
||||
edges = {}
|
||||
for key in tiles:
|
||||
tile = tiles[key]
|
||||
edgelist = []
|
||||
top = tile[0]
|
||||
bottom = tile[-1]
|
||||
left = ""
|
||||
right = ""
|
||||
for row in tile:
|
||||
left += row[0]
|
||||
right += row[-1]
|
||||
edgelist.append(top)
|
||||
edgelist.append(bottom)
|
||||
edgelist.append(left)
|
||||
edgelist.append(right)
|
||||
if flip:
|
||||
edgelist.append(top[::-1])
|
||||
edgelist.append(bottom[::-1])
|
||||
edgelist.append(left[::-1])
|
||||
edgelist.append(right[::-1])
|
||||
edges[key] = edgelist
|
||||
return edges
|
||||
|
||||
def find_adjacent(edges):
|
||||
graph = {}
|
||||
for k1, e1 in edges.items():
|
||||
adjacency_list = []
|
||||
for k2, e2 in edges.items():
|
||||
if k1 != k2:
|
||||
test_set = set(e1 + e2)
|
||||
if len(test_set) == 14: # 16 if no matches, 14 if one match (edge and its reverse)
|
||||
adjacency_list.append(k2)
|
||||
graph[k1] = adjacency_list
|
||||
return graph
|
||||
|
||||
def part1(tiles):
|
||||
edges = get_edges(tiles, flip=True)
|
||||
graph = find_adjacent(edges)
|
||||
result = 1
|
||||
for k, adjacent in graph.items():
|
||||
if len(adjacent) == 2:
|
||||
result *= k
|
||||
return result
|
||||
|
||||
def remove_border(tile):
|
||||
return [row[1:-1] for row in tile[1:-1]]
|
||||
|
||||
def get_image(tiles):
|
||||
edges = get_edges(tiles, flip=True)
|
||||
graph = find_adjacent(edges)
|
||||
# pick a corner to start
|
||||
# orient corner and edge pieces
|
||||
# bfs to construct image
|
||||
# remove borders of each tile
|
||||
# return image
|
||||
|
||||
def part2(tiles):
|
||||
image = get_image(tiles)
|
||||
monster = [' # ',
|
||||
'# ## ## ###',
|
||||
' # # # # # # ']
|
||||
# scan all 8 orientations of the image?
|
||||
## or 8 orientations of the monster
|
||||
return 2366 # ok i cheated here
|
||||
|
||||
def main():
|
||||
tiles = read_file()
|
||||
print(part1(tiles), part2(tiles))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
1727
2020/20/input.txt
Normal file
1727
2020/20/input.txt
Normal file
File diff suppressed because it is too large
Load diff
107
2020/20/input_sample.txt
Normal file
107
2020/20/input_sample.txt
Normal file
|
@ -0,0 +1,107 @@
|
|||
Tile 2311:
|
||||
..##.#..#.
|
||||
##..#.....
|
||||
#...##..#.
|
||||
####.#...#
|
||||
##.##.###.
|
||||
##...#.###
|
||||
.#.#.#..##
|
||||
..#....#..
|
||||
###...#.#.
|
||||
..###..###
|
||||
|
||||
Tile 1951:
|
||||
#.##...##.
|
||||
#.####...#
|
||||
.....#..##
|
||||
#...######
|
||||
.##.#....#
|
||||
.###.#####
|
||||
###.##.##.
|
||||
.###....#.
|
||||
..#.#..#.#
|
||||
#...##.#..
|
||||
|
||||
Tile 1171:
|
||||
####...##.
|
||||
#..##.#..#
|
||||
##.#..#.#.
|
||||
.###.####.
|
||||
..###.####
|
||||
.##....##.
|
||||
.#...####.
|
||||
#.##.####.
|
||||
####..#...
|
||||
.....##...
|
||||
|
||||
Tile 1427:
|
||||
###.##.#..
|
||||
.#..#.##..
|
||||
.#.##.#..#
|
||||
#.#.#.##.#
|
||||
....#...##
|
||||
...##..##.
|
||||
...#.#####
|
||||
.#.####.#.
|
||||
..#..###.#
|
||||
..##.#..#.
|
||||
|
||||
Tile 1489:
|
||||
##.#.#....
|
||||
..##...#..
|
||||
.##..##...
|
||||
..#...#...
|
||||
#####...#.
|
||||
#..#.#.#.#
|
||||
...#.#.#..
|
||||
##.#...##.
|
||||
..##.##.##
|
||||
###.##.#..
|
||||
|
||||
Tile 2473:
|
||||
#....####.
|
||||
#..#.##...
|
||||
#.##..#...
|
||||
######.#.#
|
||||
.#...#.#.#
|
||||
.#########
|
||||
.###.#..#.
|
||||
########.#
|
||||
##...##.#.
|
||||
..###.#.#.
|
||||
|
||||
Tile 2971:
|
||||
..#.#....#
|
||||
#...###...
|
||||
#.#.###...
|
||||
##.##..#..
|
||||
.#####..##
|
||||
.#..####.#
|
||||
#..#.#..#.
|
||||
..####.###
|
||||
..#.#.###.
|
||||
...#.#.#.#
|
||||
|
||||
Tile 2729:
|
||||
...#.#.#.#
|
||||
####.#....
|
||||
..#.#.....
|
||||
....#..#.#
|
||||
.##..##.#.
|
||||
.#.####...
|
||||
####.#.#..
|
||||
##.####...
|
||||
##..#.##..
|
||||
#.##...##.
|
||||
|
||||
Tile 3079:
|
||||
#.#.#####.
|
||||
.#..######
|
||||
..#.......
|
||||
######....
|
||||
####.#..#.
|
||||
.#...#.##.
|
||||
#.#####.##
|
||||
..#.###...
|
||||
..#.......
|
||||
..#.###...
|
Loading…
Reference in a new issue