@@ -7,7 +7,7 @@ function parse(input) {
77 return { map, start : { x, y, direction : "right" } , end : { x : ex , y : ey } } ;
88}
99
10- function getNeighbors ( current , map ) {
10+ function getNeighbors ( map , current ) {
1111 const opposite = { up : "down" , down : "up" , left : "right" , right : "left" } ;
1212 let neighbors = [
1313 { x : current . x - 1 , y : current . y , direction : "left" } ,
@@ -25,22 +25,22 @@ function getNeighbors(current, map) {
2525 return neighbors ;
2626}
2727
28- function solve ( input ) {
28+ export function solve ( input ) {
29+ const key = p => `${ p . x } ,${ p . y } ,${ p . direction } ` ;
2930 let { map, start, end } = parse ( input ) ;
3031 let curr = { ...start , score : 0 , path : new Set ( [ `${ start . x } ,${ start . y } ` ] ) } ;
3132 let queue = [ curr ] ;
32- let visited = new Map ( ) ;
33- let results = [ { score : Infinity } ] ;
34- const key = p => `${ p . x } ,${ p . y } ,${ p . direction } ` ;
35- visited . set ( key ( curr ) , curr ) ;
33+ let visited = new Map ( [ [ key ( curr ) , curr ] ] ) ;
34+ let score = Infinity ;
35+ let tiles ;
3636 while ( queue . length > 0 ) {
3737 curr = queue . shift ( ) ;
3838 if ( curr . x === end . x && curr . y === end . y ) {
39- if ( curr . score < results [ 0 ] . score ) results = [ curr ] ;
40- if ( curr . score === results [ 0 ] . score ) results . push ( curr ) ;
39+ if ( curr . score < score ) tiles = curr . path . size ;
40+ score = Math . min ( score , curr . score ) ;
4141 continue ;
4242 }
43- getNeighbors ( curr , map ) . forEach ( n => {
43+ getNeighbors ( map , curr ) . forEach ( n => {
4444 const prev = visited . get ( key ( n ) ) ;
4545 if ( ! prev || prev . score > n . score ) {
4646 queue . push ( n ) ;
@@ -50,14 +50,13 @@ function solve(input) {
5050 }
5151 } ) ;
5252 }
53- return results ;
53+ return { score , tiles } ;
5454}
5555
5656export function part1 ( input ) {
57- return solve ( input ) [ 0 ] . score ;
57+ return solve ( input ) . score ;
5858}
5959
6060export function part2 ( input ) {
61- const results = solve ( input ) . map ( result => result . path ) ;
62- return results . reduce ( ( acc , next ) => acc . union ( next ) ) . size ;
61+ return solve ( input ) . tiles ;
6362}
0 commit comments