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