@@ -4,6 +4,7 @@ namespace AdventOfCode.Y2024.Day18;
44using System . Linq ;
55using System . Text . RegularExpressions ;
66using System . Numerics ;
7+ using AngleSharp . Common ;
78
89[ ProblemName ( "RAM Run" ) ]
910class Solution : Solver {
@@ -30,27 +31,25 @@ public object PartTwo(string input) {
3031 int ? Distance ( IEnumerable < Complex > blocks ) {
3132 // our standard priority queue based path finding
3233
33- var blockSet = blocks . ToHashSet ( ) ;
3434 var size = 70 ;
35- var goal = size + size * Complex . ImaginaryOne ;
35+ var ( start , goal ) = ( 0 , size + size * Complex . ImaginaryOne ) ;
36+ var blocked = blocks . Concat ( start ) . ToHashSet ( ) ;
37+
3638 var q = new PriorityQueue < Complex , int > ( ) ;
37- q . Enqueue ( 0 , 0 ) ;
38- var seen = new HashSet < Complex > ( 0 ) ;
39-
39+ q . Enqueue ( start , 0 ) ;
4040 while ( q . TryDequeue ( out var pos , out var dist ) ) {
4141 if ( pos == goal ) {
4242 return dist ;
43- } else {
44- foreach ( var dir in new [ ] { 1 , - 1 , Complex . ImaginaryOne , - Complex . ImaginaryOne } ) {
45- var posT = pos + dir ;
46- if ( ! seen . Contains ( posT ) &&
47- ! blockSet . Contains ( posT ) &&
48- 0 <= posT . Imaginary && posT . Imaginary <= size &&
49- 0 <= posT . Real && posT . Real <= size
50- ) {
51- q . Enqueue ( posT , dist + 1 ) ;
52- seen . Add ( posT ) ;
53- }
43+ }
44+
45+ foreach ( var dir in new [ ] { 1 , - 1 , Complex . ImaginaryOne , - Complex . ImaginaryOne } ) {
46+ var posT = pos + dir ;
47+ if ( ! blocked . Contains ( posT ) &&
48+ 0 <= posT . Imaginary && posT . Imaginary <= size &&
49+ 0 <= posT . Real && posT . Real <= size
50+ ) {
51+ q . Enqueue ( posT , dist + 1 ) ;
52+ blocked . Add ( posT ) ;
5453 }
5554 }
5655 }
0 commit comments