]> www.fi.muni.cz Git - aoc.git/blob - 2022/14.pl
Day 7: nice!
[aoc.git] / 2022 / 14.pl
1 #!/usr/bin/perl -w
2
3 use v5.36;
4 use strict;
5 use experimental 'multidimensional';
6 use List::Util qw(sum);
7
8 my @path = '';
9 my %files;
10 my %dirs = ('' => 0);
11
12 while (<>) {
13         chomp;
14         if (/^\$ cd \/$/) {
15                 @path = '';
16         } elsif (/^\$ cd \.\.$/) {
17                 pop @path;
18         } elsif (/^\$ cd (.*)/) {
19                 push @path, $1;
20         } elsif (/^\$ ls/) {
21         } elsif (/^dir (.*)/) {
22                 $dirs{join('/', @path, $1)} = 0;
23         } elsif (/^(\d+) (.*)/) {
24                 my $file = join('/', @path, $2);
25                 $files{$file} = $1;
26         }
27 }
28
29 for my $dir (keys %dirs) {
30         for my $file (keys %files) {
31                 $dirs{$dir} += $files{$file} if $file =~ /^$dir\//;
32         }
33 }
34
35 my $reqd = $dirs{''} - 40000000;
36
37 for my $dir (sort { $dirs{$a} <=> $dirs{$b} } keys %dirs) {
38         if ($dirs{$dir} >= $reqd) {
39                 say $dir, ' ', $dirs{$dir};
40                 last;
41         }
42 }
43