Skip to content

Commit e83584d

Browse files
committed
Added 2017 day 19
1 parent 2959f2c commit e83584d

File tree

5 files changed

+330
-0
lines changed

5 files changed

+330
-0
lines changed

2017/19/code.py

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# Advent of code Year 2017 Day 19 solution
2+
# Author = Alexe Simon
3+
# Date = December 2018
4+
5+
with open((__file__.rstrip("code.py")+"input.txt"), 'r') as input_file:
6+
input = input_file.read()
7+
8+
9+
class MazeRunner:
10+
def __init__(self, source):
11+
self.source = source
12+
self.maze = [line.rstrip('\n') for line in source.split("\n")]
13+
self.hist = []
14+
self.posx = 0
15+
self.posy = 0
16+
self.vel = "stuck" # "down", "right", "left", "up", "stuck"
17+
self.steps = 0
18+
self.findEntry()
19+
20+
def step(self):
21+
if self.vel == "down":
22+
self.posy += 1
23+
elif self.vel == "up":
24+
self.posy -= 1
25+
elif self.vel == "right":
26+
self.posx += 1
27+
elif self.vel == "left":
28+
self.posx -= 1
29+
self.steps += 1
30+
31+
def findEntry(self):
32+
while self.maze[self.posy][self.posx] != '|':
33+
self.posx += 1
34+
self.vel = "down"
35+
36+
def changeVel(self):
37+
searching = True
38+
if searching and self.posx+1 < len(self.maze[self.posy]):
39+
if self.maze[self.posy][self.posx+1] == '-' and self.vel != "left":
40+
self.vel = "right"
41+
searching = False
42+
43+
if searching and self.posx-1 > 0:
44+
if self.maze[self.posy][self.posx-1] == '-' and self.vel != "right":
45+
self.vel = "left"
46+
searching = False
47+
48+
if searching and self.posy+1 < len(self.maze):
49+
if self.maze[self.posy+1][self.posx] == '|' and self.vel != "up":
50+
self.vel = "down"
51+
searching = False
52+
53+
if searching and self.posy-1 > 0:
54+
if self.maze[self.posy-1][self.posx] == '|' and self.vel != "down":
55+
self.vel = "up"
56+
searching = False
57+
58+
if searching:
59+
self.vel = "stuck"
60+
61+
def walkThrough(self):
62+
while self.vel != "stuck":
63+
while self.maze[self.posy][self.posx] in ['|','-']:
64+
self.step()
65+
if self.maze[self.posy][self.posx] == '+':
66+
self.changeVel()
67+
self.step()
68+
elif self.maze[self.posy][self.posx] == ' ':
69+
return 1
70+
else:
71+
self.hist.append(self.maze[self.posy][self.posx])
72+
self.step()
73+
return 0
74+
75+
76+
maze = MazeRunner(input)
77+
maze.walkThrough()
78+
79+
print("Part One : "+ ''.join(maze.hist))
80+
print("Part Two : "+ str(maze.steps))

0 commit comments

Comments
 (0)