advent-of-code

Perserverance, or the lack thereof

git clone git://git.shimmy1996.com/advent-of-code.git

day-06.jl (1728B)

    1 function part_1(input)
    2     orbit_map = Dict(map(x -> (x[2], x[1]), input))
    3     orbit_count = Dict()
    4     for planet in keys(orbit_map)
    5         center = orbit_map[planet]
    6         path = []
    7         root_count = 0
    8         pushfirst!(path, planet)
    9         while true
   10             pushfirst!(path, center)
   11             if center in keys(orbit_count)
   12                 root_count = orbit_count[center]
   13                 break
   14             else
   15                 if center in keys(orbit_map)
   16                     center = orbit_map[center]
   17                 else
   18                     break
   19                 end
   20             end
   21         end
   22         for root in path
   23             orbit_count[root] = root_count
   24             root_count += 1
   25         end
   26     end
   27     sum(values(orbit_count))
   28 end
   29 
   30 function part_2(input)
   31     orbit_map = Dict(map(x -> (x[2], x[1]), input))
   32     # Build SAN path.
   33     santa_path = Dict()
   34     begin
   35         center = orbit_map["SAN"]
   36         orbit_count = 0
   37         while true
   38             santa_path[center] = orbit_count
   39             if center in keys(orbit_map)
   40                 center = orbit_map[center]
   41                 orbit_count += 1
   42             else
   43                 break
   44             end
   45         end
   46     end
   47     # Trace back YOU path until we get a hit.
   48     begin
   49         center = orbit_map["YOU"]
   50         orbit_count = 0
   51         while true
   52             if center in keys(santa_path)
   53                 return orbit_count + santa_path[center]
   54             else
   55                 center = orbit_map[center]
   56                 orbit_count += 1
   57             end
   58         end
   59     end
   60 end
   61 
   62 input = map(x -> split(x, ")"), readlines(open("input.txt")))
   63 
   64 println("Julia:")
   65 println("Part 1: ", part_1(input))
   66 println("Part 2: ", part_2(input))