Untitled
unknown
plain_text
3 years ago
910 B
14
Indexable
def solve dirs = {} current_dir = '' File.read('day7/input').split("\n$ cd ").each do |line| current_dir_keys = current_dir.split('/') case line when '..' current_dir_keys.pop current_dir = current_dir_keys.join('/') else line.gsub("$ ls\n", '').split("\n").each do |line| if line.split(' ').first.to_i.positive? dirs[current_dir] += line.split(' ').first.to_i elsif line.split(' ').first != 'dir' current_dir += "/#{line}" dirs[current_dir] = 0 end end end end dirs.reverse_each do |k, v| k_arr = k.split('/') until k_arr.join('/') == '/root' k_arr.pop if k_arr.length > 2 dirs[k_arr.join('/')] += v end end p dirs.values.filter { _1 < 100_000 }.sum needed_space = 30_000_000 - (70_000_000 - dirs['/root']) p dirs.values.filter { needed_space < _1 }.min end solve
Editor is loading...