Skip to content

Instantly share code, notes, and snippets.

@cjavdev
Created December 7, 2022 16:44
Show Gist options
  • Save cjavdev/a8122973da3303d76a93aeb614d6eff4 to your computer and use it in GitHub Desktop.
Save cjavdev/a8122973da3303d76a93aeb614d6eff4 to your computer and use it in GitHub Desktop.
if ARGV.empty?
data = DATA.readlines
else
data = File.readlines(ARGV[0])
end
cwd = []
dir_sizes = Hash.new { |h, k| h[k] = 0 }
data
.map(&:chomp)
.map{_1.split(' ')}
.each do |line|
case line
in ['$', 'cd', '..']
cwd.pop
in ['$', 'cd', dir]
cwd << dir
in ['$', 'ls']
in ['dir', dirname]
in [size, filename]
cwd.length.times do |x|
dir_sizes[cwd[0..x]] += size.to_i
end
end
end
p dir_sizes
.inject(0) {|sum, (_, size)| size <= 100000 ? sum + size : sum}
total = 70000000
needed = 30000000
free = total - dir_sizes[['/']]
delete_at_least = needed - free
puts "Total: #{total}, Free: #{free}, Needed: #{needed}, Delete at least: #{delete_at_least}"
p dir_sizes.values.sort.find { |size| size > delete_at_least }
__END__
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k
@cjavdev
Copy link
Author

cjavdev commented Dec 7, 2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment