mirror of
				https://github.com/onyx-and-iris/aoc2024.git
				synced 2025-11-03 22:41:46 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			999 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			999 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package two
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	"github.com/onyx-and-iris/aoc2024/day-18/internal/config"
 | 
						|
	log "github.com/sirupsen/logrus"
 | 
						|
)
 | 
						|
 | 
						|
func Solve(buf []byte, config config.Config) (string, error) {
 | 
						|
	r := bytes.NewReader(buf)
 | 
						|
	graph, corruptedCoords, err := parseLines(r, config)
 | 
						|
	if err != nil {
 | 
						|
		return "", err
 | 
						|
	}
 | 
						|
 | 
						|
	log.Debugf("start: %v end: %v", graph.start, graph.end)
 | 
						|
 | 
						|
	indx := runUntilNoPath(graph, corruptedCoords, config)
 | 
						|
	return fmt.Sprintf("%d,%d", corruptedCoords[indx][0], corruptedCoords[indx][1]), nil
 | 
						|
}
 | 
						|
 | 
						|
func runUntilNoPath(graph *graph, corruptedCoords [][]int, config config.Config) int {
 | 
						|
	for i, coords := range corruptedCoords[config.NumCorruptions+1:] {
 | 
						|
		nextCorruption := point{coords[0], coords[1]}
 | 
						|
 | 
						|
		log.Debugf("adding corruption %v", nextCorruption)
 | 
						|
 | 
						|
		graph.addCorruption(coords)
 | 
						|
		path, err := graph.dijkstra(graph.start, graph.end)
 | 
						|
		if err != nil {
 | 
						|
			log.Debug(err)
 | 
						|
			return config.NumCorruptions + i + 1
 | 
						|
		}
 | 
						|
		log.Debugf("\n%s\n", graph.debug(path))
 | 
						|
	}
 | 
						|
	return 0
 | 
						|
}
 |