tried stuff - nothing works yet
This commit is contained in:
90
11/main.go
Normal file
90
11/main.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.z1glr.de/advent-of-code-2025/pkg/aoc"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
Start, Out bool
|
||||
Destinations map[string]*Server
|
||||
}
|
||||
|
||||
func (s *Server) Walk() int {
|
||||
if s.Out {
|
||||
return 1
|
||||
} else {
|
||||
routes := 0
|
||||
|
||||
for _, dd := range s.Destinations {
|
||||
routes += dd.Walk()
|
||||
}
|
||||
|
||||
return routes
|
||||
}
|
||||
}
|
||||
|
||||
func ParseServerLine(s string) (*Server, string) {
|
||||
stringFields := strings.Fields(s)
|
||||
|
||||
returnServer := Server{
|
||||
Destinations: make(map[string]*Server),
|
||||
}
|
||||
|
||||
for _, ff := range stringFields[1:] {
|
||||
switch ff {
|
||||
case "you":
|
||||
returnServer.Start = true
|
||||
case "out":
|
||||
returnServer.Out = true
|
||||
default:
|
||||
returnServer.Destinations[ff] = nil
|
||||
}
|
||||
}
|
||||
|
||||
return &returnServer, stringFields[0][:len(stringFields[0])-1]
|
||||
}
|
||||
|
||||
func do(test bool) (int, int) {
|
||||
rows := aoc.ReadFileRows(test)
|
||||
|
||||
servers := make(map[string]*Server)
|
||||
|
||||
starts := []*Server{}
|
||||
|
||||
for _, rr := range rows {
|
||||
thisServer, name := ParseServerLine(rr)
|
||||
|
||||
servers[name] = thisServer
|
||||
|
||||
if thisServer.Start {
|
||||
starts = append(starts, thisServer)
|
||||
}
|
||||
}
|
||||
|
||||
// populate destinations
|
||||
for ii := range servers {
|
||||
ss := servers[ii]
|
||||
for dd := range ss.Destinations {
|
||||
ss.Destinations[dd] = servers[dd]
|
||||
}
|
||||
}
|
||||
|
||||
routes := 0
|
||||
|
||||
for _, ss := range starts[:1] {
|
||||
routes += ss.Walk()
|
||||
}
|
||||
|
||||
fmt.Println(routes)
|
||||
|
||||
return routes, 0
|
||||
}
|
||||
|
||||
func main() {
|
||||
if r1, r2 := do(true); r1 == 5 && r2 == 0 {
|
||||
do(false)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user