add solution for day 7
This commit is contained in:
parent
5697d36ff1
commit
8ee7085510
1047
data/day_7.txt
Normal file
1047
data/day_7.txt
Normal file
File diff suppressed because it is too large
Load Diff
65
src/day_7.jl
Normal file
65
src/day_7.jl
Normal file
@ -0,0 +1,65 @@
|
||||
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
|
||||
import .Aoc: @aoc
|
||||
|
||||
function size_of_dir(dirs::Dict{String, Int}, subdirs::Dict{String, Array{String}}, dir::String)
|
||||
size = dirs[dir]
|
||||
for sub in subdirs[dir]
|
||||
sub in keys(dirs) && (size += size_of_dir(dirs, subdirs, sub))
|
||||
end
|
||||
size
|
||||
end
|
||||
|
||||
function join_path(s1, s2)
|
||||
s2 == ".." ? join(split(s1, '/')[begin:end-1], '/') : s1 * '/' * s2
|
||||
end
|
||||
|
||||
function build_dirs(input::Vector{String})
|
||||
dirs = Dict{String, Int}()
|
||||
subdirs = Dict{String, Array{String}}()
|
||||
pwd = ""
|
||||
|
||||
for i in input
|
||||
if i[1] == '$'
|
||||
cmd = split(i[3:end])
|
||||
if cmd[1] == "cd"
|
||||
pwd = cmd[2] == "/" ? "/" : join_path(pwd, cmd[2])
|
||||
if pwd ∉ keys(dirs)
|
||||
dirs[pwd] = 0
|
||||
subdirs[pwd] = []
|
||||
end
|
||||
end
|
||||
else
|
||||
size, name = split(i)
|
||||
if size == "dir"
|
||||
push!(subdirs[pwd], join_path(pwd, name))
|
||||
else
|
||||
dirs[pwd] += parse(Int, size)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
(dirs, subdirs)
|
||||
end
|
||||
|
||||
function p1(input::Vector{String})
|
||||
dirs, subdirs = build_dirs(input)
|
||||
total = 0
|
||||
for dir in keys(dirs)
|
||||
size = size_of_dir(dirs, subdirs, dir)
|
||||
size <= 100000 && (total+=size)
|
||||
end
|
||||
total
|
||||
end
|
||||
|
||||
function p2(input::Vector{String})
|
||||
dirs, subdirs = build_dirs(input)
|
||||
free = 70000000 - size_of_dir(dirs, subdirs, "/")
|
||||
res = 0
|
||||
for dir in keys(dirs)
|
||||
size = size_of_dir(dirs, subdirs, dir)
|
||||
(free + size >= 30000000) && (res == 0 || res > size) && (res=size)
|
||||
end
|
||||
res
|
||||
end
|
||||
|
||||
@aoc(2022, 7)
|
Loading…
x
Reference in New Issue
Block a user