]> www.fi.muni.cz Git - aoc.git/commitdiff
Day 7: nice!
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Wed, 7 Dec 2022 05:19:20 +0000 (06:19 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Wed, 7 Dec 2022 05:19:20 +0000 (06:19 +0100)
2022/13.pl [new file with mode: 0755]
2022/14.pl [new file with mode: 0755]

diff --git a/2022/13.pl b/2022/13.pl
new file mode 100755 (executable)
index 0000000..23b0ce9
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/perl -w
+
+use v5.36;
+use strict;
+use experimental 'multidimensional';
+use List::Util qw(sum);
+
+my @path = '';
+my %files;
+my %dirs = ('' => 0);
+
+while (<>) {
+       chomp;
+       if (/^\$ cd \/$/) {
+               @path = '';
+       } elsif (/^\$ cd \.\.$/) {
+               pop @path;
+       } elsif (/^\$ cd (.*)/) {
+               push @path, $1;
+       } elsif (/^\$ ls/) {
+       } elsif (/^dir (.*)/) {
+               $dirs{join('/', @path, $1)} = 0;
+       } elsif (/^(\d+) (.*)/) {
+               my $file = join('/', @path, $2);
+               $files{$file} = $1;
+       }
+}
+
+for my $dir (keys %dirs) {
+       for my $file (keys %files) {
+               $dirs{$dir} += $files{$file} if $file =~ /^$dir\//;
+       }
+}
+
+say sum map { $dirs{$_} >= 100_000 ? 0 : $dirs{$_} } keys %dirs;
+
+               
+               
diff --git a/2022/14.pl b/2022/14.pl
new file mode 100755 (executable)
index 0000000..f67a953
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/perl -w
+
+use v5.36;
+use strict;
+use experimental 'multidimensional';
+use List::Util qw(sum);
+
+my @path = '';
+my %files;
+my %dirs = ('' => 0);
+
+while (<>) {
+       chomp;
+       if (/^\$ cd \/$/) {
+               @path = '';
+       } elsif (/^\$ cd \.\.$/) {
+               pop @path;
+       } elsif (/^\$ cd (.*)/) {
+               push @path, $1;
+       } elsif (/^\$ ls/) {
+       } elsif (/^dir (.*)/) {
+               $dirs{join('/', @path, $1)} = 0;
+       } elsif (/^(\d+) (.*)/) {
+               my $file = join('/', @path, $2);
+               $files{$file} = $1;
+       }
+}
+
+for my $dir (keys %dirs) {
+       for my $file (keys %files) {
+               $dirs{$dir} += $files{$file} if $file =~ /^$dir\//;
+       }
+}
+
+my $reqd = $dirs{''} - 40000000;
+
+for my $dir (sort { $dirs{$a} <=> $dirs{$b} } keys %dirs) {
+       if ($dirs{$dir} >= $reqd) {
+               say $dir, ' ', $dirs{$dir};
+               last;
+       }
+}
+