Skip to content

Commit e4bc571

Browse files
author
Robb Kidd
committed
2022 day 7 part 2
multi-multi-pass! don't care!
1 parent 580e486 commit e4bc571

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

2022/ruby/day07.rb

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,40 @@ def initialize(input=nil)
1414
# day.part1 #=> 95_437
1515
def part1
1616
@dirs
17-
.map { |dir_name, _|
18-
dirs
19-
.select{ |subdir, _| subdir.start_with?(dir_name) }
20-
.map{|dir, files| files.empty? ? 0 : files.map{|name,size| size}.reduce(&:+)}
21-
.reduce(&:+)
22-
}
17+
.map { |dir_name, _| total_dir_size(dir_name) }
2318
.select{ |dir_size| dir_size < 100_000 }
2419
.reduce(&:+)
2520
end
2621

22+
# @example
23+
# day.part2 #=> 24_933_642
2724
def part2
25+
disk_size = 70_000_000
26+
current_free_space = disk_size - total_dir_size("root")
27+
28+
space_needed_for_update = 30_000_000
29+
delete_at_least_this_much = space_needed_for_update - current_free_space
30+
31+
@dirs
32+
.map { |dir_name, _| total_dir_size(dir_name) }
33+
.select{ |dir_size| dir_size > delete_at_least_this_much }
34+
.sort
35+
.first
36+
end
37+
38+
# @example e
39+
# day.total_dir_size('root/a/e') #=> 584
40+
# @example a
41+
# day.total_dir_size('root/a') #=> 94853
42+
# @example d
43+
# day.total_dir_size('root/d') #=> 24933642
44+
# @example root
45+
# day.total_dir_size('root') #=> 48381165
46+
def total_dir_size(dir_name)
47+
@dirs
48+
.select{ |subdir, _| subdir.start_with?(dir_name) }
49+
.map{|dir, files| files.empty? ? 0 : files.map{|name,size| size}.reduce(&:+)}
50+
.reduce(&:+)
2851
end
2952

3053
def parse_input
@@ -39,7 +62,6 @@ def parse_input
3962
cwd = "root"
4063
when "cd .."
4164
cwd = cwd.split("/")[0..-2].join("/")
42-
cwd = "root" if cwd == ""
4365
when /cd (\w*)/
4466
cwd += "/#{$1}"
4567
when "ls"

0 commit comments

Comments
 (0)