Guest User

Untitled

a guest
Dec 16th, 2025
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.80 KB | None | 0 0
  1. func traverse(node string, target string, graph map[string][]string) int {
  2.     if node == target {
  3.         return 1
  4.     }
  5.     result := 0
  6.     for _, path := range graph[node] {
  7.         result += traverse(path, target, graph)
  8.     }
  9.     return result
  10. }
  11.  
  12. func onestar(filename string) string {
  13.     lines := aocutils.Readfile(filename)
  14.     graph := make(map[string][]string)
  15.     for _, line := range lines {
  16.         splits := strings.Split(line, " ")
  17.         input := splits[0]
  18.         graph[input[:len(input)-1]] = splits[1:]
  19.     }
  20.     result := traverse("you", "out", graph)
  21.     return strconv.Itoa(result)
  22. }
  23.  
  24. func two_traverse(node string, level int, target string, visited map[string]int, cache map[string][]int, graph map[string][]string) []int {
  25.     if node == target {
  26.         cache[node] = []int{1, 0, 0, 0}
  27.         return []int{1, 0, 0, 0}
  28.     }
  29.     if value, exists := cache[node]; exists {
  30.         return value
  31.     }
  32.     result := []int{0, 0, 0, 0}
  33.     visited[node] = level
  34.     for _, path := range graph[node] {
  35.         temp_result := two_traverse(path, level+1, target, visited, cache, graph)
  36.         switch path {
  37.         case "fft":
  38.             result[1] += temp_result[0]
  39.             result[3] += temp_result[2]
  40.         case "dac":
  41.             result[2] += temp_result[0]
  42.             result[3] += temp_result[1]
  43.         default:
  44.             result[0] += temp_result[0]
  45.             result[1] += temp_result[1]
  46.             result[2] += temp_result[2]
  47.             result[3] += temp_result[3]
  48.         }
  49.     }
  50.     delete(visited, node)
  51.     cache[node] = result
  52.     return result
  53. }
  54.  
  55. func twostar(filename string) string {
  56.     lines := aocutils.Readfile(filename)
  57.     graph := make(map[string][]string)
  58.     for _, line := range lines {
  59.         splits := strings.Split(line, " ")
  60.         input := splits[0]
  61.         graph[input[:len(input)-1]] = splits[1:]
  62.     }
  63.     visited := make(map[string]int)
  64.     cache := make(map[string][]int)
  65.     result := two_traverse("svr", 0, "out", visited, cache, graph)
  66.     return strconv.Itoa(result[3])
  67. }
Advertisement
Add Comment
Please, Sign In to add comment