1- function move ( map , current , direction ) {
1+ function move ( map , current , dir ) {
22 let dest = { ...current } ;
3- if ( direction === "v" ) dest . y ++ ;
4- else if ( direction === "^" ) dest . y -- ;
5- else if ( direction === "< " ) dest . x -- ;
6- else if ( direction === "> " ) dest . x ++ ;
3+ if ( dir === "v" ) dest . y ++ ;
4+ if ( dir === "^" ) dest . y -- ;
5+ if ( dir === "> " ) dest . x ++ ;
6+ if ( dir === "< " ) dest . x -- ;
77
8- if ( map [ dest . y ] [ dest . x ] === "O" ) move ( map , dest , direction ) ;
8+ if ( map [ dest . y ] [ dest . x ] === "O" ) move ( map , dest , dir ) ;
99 if ( map [ dest . y ] [ dest . x ] === "[" || map [ dest . y ] [ dest . x ] === "]" ) {
10- if ( dest . x !== current . x ) move ( map , dest , direction ) ;
10+ if ( dest . x !== current . x ) move ( map , dest , dir ) ;
1111 else {
12- let copy = map . map ( row => row . slice ( 0 ) ) ;
12+ let copy = map . map ( row => [ ... row ] ) ;
1313 let pair = { ...dest } ;
1414 pair . x += map [ dest . y ] [ dest . x ] === "[" ? 1 : - 1 ;
15- if (
16- move ( copy , dest , direction ) !== dest &&
17- move ( copy , pair , direction ) !== pair
18- ) {
19- move ( map , dest , direction ) ;
20- move ( map , pair , direction ) ;
15+ if ( move ( copy , dest , dir ) !== dest && move ( copy , pair , dir ) !== pair ) {
16+ move ( map , dest , dir ) ;
17+ move ( map , pair , dir ) ;
2118 }
2219 }
2320 }
@@ -51,7 +48,7 @@ function parse(input) {
5148
5249export function part1 ( input ) {
5350 let { map, moves, current } = parse ( input ) ;
54- moves . reduce ( ( current , x ) => move ( map , current , x ) , current ) ;
51+ moves . reduce ( ( current , next ) => move ( map , current , next ) , current ) ;
5552 return checksum ( map ) ;
5653}
5754
@@ -61,7 +58,5 @@ export function part2(input) {
6158 . replaceAll ( "O" , "[]" )
6259 . replaceAll ( "." , ".." )
6360 . replaceAll ( "@" , "@." ) ;
64- let { map, moves, current } = parse ( input ) ;
65- moves . reduce ( ( current , x ) => move ( map , current , x ) , current ) ;
66- return checksum ( map ) ;
61+ return part1 ( input ) ;
6762}
0 commit comments