Skip to content

Commit 74cf965

Browse files
committed
completed part 1 of day 22 of year 2022
1 parent 10afd33 commit 74cf965

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

2022/22.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
import re
5+
6+
def parse(data):
7+
grid = {}
8+
board, instructions = data.split('\n\n')
9+
10+
for y, line in enumerate(board.split('\n')):
11+
for x, char in enumerate(line):
12+
if char == ' ': continue
13+
grid[(x, y)] = char
14+
15+
return grid, re.findall(r'\d+|L|R', instructions)
16+
17+
split_data = parse
18+
completed = 1
19+
raw_data = None # Not To be touched
20+
21+
def part1(data):
22+
grid, instructions = data
23+
# Super weird puzzle
24+
movements = [(1, 0), (0, 1), (-1, 0), (0, -1)] # Go right, down, left, up
25+
rotation = 0 # Starting out facing right
26+
27+
# Find the start
28+
x, y = min(x for x, y in grid.keys() if y == 0), 0
29+
30+
# print('We start at:', x, y, rotation)
31+
32+
for op in instructions:
33+
if op == 'R':
34+
rotation = (rotation + 1) % 4
35+
continue
36+
elif op == 'L':
37+
rotation = (rotation - 1) % 4
38+
continue
39+
40+
dx, dy = movements[rotation]
41+
# print("rot:", dx, dy, op)
42+
for _ in range(int(op)):
43+
nx, ny = x + dx, y + dy
44+
future = grid.get((nx, ny))
45+
if not future:
46+
# We can do this because of how the map looks. Special to only these kinds of map
47+
if rotation == 0:
48+
nx = min(gx for gx, gy in grid.keys() if gy == ny)
49+
elif rotation == 1:
50+
ny = min(gy for gx, gy in grid.keys() if gx == nx)
51+
elif rotation == 2:
52+
nx = max(gx for gx, gy in grid.keys() if gy == ny)
53+
elif rotation == 3:
54+
ny = max(gy for gx, gy in grid.keys() if gx == nx)
55+
future = grid.get((nx, ny))
56+
57+
if future == '.':
58+
x, y = nx, ny # We move
59+
elif future == '#':
60+
break
61+
62+
# print("We end at", x, y, rotation)
63+
64+
return 1000 * (y+1) + 4 * (x+1) + (rotation % 4)
65+
66+
def part2(data):
67+
# HELL NO
68+
...

0 commit comments

Comments
 (0)