@@ -99,4 +99,108 @@ describe('--- Day 11: Seating System ---', () => {
99
99
} )
100
100
} )
101
101
} )
102
+ describe ( 'Part 2' , ( ) => {
103
+ describe ( 'move()' , ( ) => {
104
+ let origin
105
+ let waypoint
106
+ let mode
107
+
108
+ beforeEach ( ( ) => {
109
+ mode = 'waypoint'
110
+ origin = {
111
+ x : 0 ,
112
+ y : 0 ,
113
+ d : 90 // Starting direction is east
114
+ }
115
+ waypoint = {
116
+ x : 10 ,
117
+ y : 1
118
+ }
119
+ } )
120
+ it ( 'waypoint: can move North without turning' , ( ) => {
121
+ const command = 'N5'
122
+ expect (
123
+ move ( { position : origin , waypoint, command, mode } )
124
+ ) . to . deep . equal ( {
125
+ position : { x : 0 , y : 0 , d : 90 } ,
126
+ waypoint : { x : 10 , y : 6 }
127
+ } )
128
+ } )
129
+ it ( 'waypoint: can move South without turning' , ( ) => {
130
+ const command = 'S5'
131
+ expect (
132
+ move ( { position : origin , waypoint, command, mode } )
133
+ ) . to . deep . equal ( {
134
+ position : { x : 0 , y : 0 , d : 90 } ,
135
+ waypoint : { x : 10 , y : - 4 }
136
+ } )
137
+ } )
138
+ it ( 'waypoint: can move East without turning' , ( ) => {
139
+ const command = 'E5'
140
+ expect (
141
+ move ( { position : origin , waypoint, command, mode } )
142
+ ) . to . deep . equal ( {
143
+ position : { x : 0 , y : 0 , d : 90 } ,
144
+ waypoint : { x : 15 , y : 1 }
145
+ } )
146
+ } )
147
+ it ( 'waypoint: can move West without turning' , ( ) => {
148
+ const command = 'W5'
149
+ expect (
150
+ move ( { position : origin , waypoint, command, mode } )
151
+ ) . to . deep . equal ( {
152
+ position : { x : 0 , y : 0 , d : 90 } ,
153
+ waypoint : { x : 5 , y : 1 }
154
+ } )
155
+ } )
156
+ it ( 'waypoint: can turn left (counterclockwise) without moving' , ( ) => {
157
+ const command = 'L90'
158
+ expect (
159
+ move ( { position : origin , waypoint, command, mode } )
160
+ ) . to . deep . equal ( {
161
+ position : { x : 0 , y : 0 , d : 90 } ,
162
+ waypoint : { x : - 1 , y : 10 }
163
+ } )
164
+ } )
165
+ it ( 'waypoint: can turn right (clockwise) without moving' , ( ) => {
166
+ const command = 'R90'
167
+ expect (
168
+ move ( { position : origin , waypoint, command, mode } )
169
+ ) . to . deep . equal ( {
170
+ position : { x : 0 , y : 0 , d : 90 } ,
171
+ waypoint : { x : 1 , y : 10 }
172
+ } )
173
+ } )
174
+ it ( 'waypoint: can move forward in the direction it is pointing' , ( ) => {
175
+ const command = 'F10'
176
+ expect (
177
+ move ( { position : origin , waypoint, command, mode } )
178
+ ) . to . deep . equal ( {
179
+ position : { x : 100 , y : 10 , d : 90 } ,
180
+ waypoint : { x : 110 , y : 11 }
181
+ } )
182
+ } )
183
+ } )
184
+ describe ( 'route()' , ( ) => {
185
+ let mode
186
+
187
+ beforeEach ( ( ) => {
188
+ mode = 'waypoint'
189
+ } )
190
+ it ( 'waypoint: can follow a list of instructions' , ( ) => {
191
+ const instructions = [
192
+ 'F10' ,
193
+ 'N3' ,
194
+ 'F7' ,
195
+ 'R90' ,
196
+ 'F11'
197
+ ]
198
+ const result = route ( { instructions, mode } )
199
+ expect ( result )
200
+ . to . deep . equal ( { x : 214 , y : 72 , d : 90 } )
201
+ // manhattan distance from origin
202
+ expect ( distance ( { x : 0 , y : 0 } , result ) ) . to . equal ( 72 )
203
+ } )
204
+ } )
205
+ } )
102
206
} )
0 commit comments