]> www.fi.muni.cz Git - aoc.git/commitdiff
Day 5: parsing input
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 5 Dec 2022 05:16:48 +0000 (06:16 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 5 Dec 2022 05:16:48 +0000 (06:16 +0100)
2022/09.pl [new file with mode: 0755]
2022/10.pl [new file with mode: 0755]

diff --git a/2022/09.pl b/2022/09.pl
new file mode 100755 (executable)
index 0000000..ef96b52
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/perl -w
+
+use v5.36;
+use strict;
+use experimental 'multidimensional';
+
+my @stacks;
+
+while (<>) {
+       last if /^ \d/;
+       my $i = 1;
+       my $st = 0;
+       $stacks[$st] //= [];
+       while ($i < length) {
+               my $c = substr($_, $i, 1);
+               unshift @{ $stacks[$st] }, $c if $c =~ /[A-Z]/;
+               $i += 4;
+               $st++;
+       }
+}
+
+scalar <>;
+
+while (<>) {
+       my ($amount, $src, $dst) = /(\d+)/g;
+       push @{ $stacks[$dst-1] }, pop @{ $stacks[$src-1] } for 1 .. $amount;
+}
+
+for my $st (@stacks) {
+       print $st->[-1];
+}
+print "\n";
+       
diff --git a/2022/10.pl b/2022/10.pl
new file mode 100755 (executable)
index 0000000..913e078
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/perl -w
+
+use v5.36;
+use strict;
+use experimental 'multidimensional';
+
+my @stacks;
+
+while (<>) {
+       last if /^ \d/;
+       my $i = 1;
+       my $st = 0;
+       $stacks[$st] //= [];
+       while ($i < length) {
+               my $c = substr($_, $i, 1);
+               unshift @{ $stacks[$st] }, $c if $c =~ /[A-Z]/;
+               $i += 4;
+               $st++;
+       }
+}
+
+scalar <>;
+
+while (<>) {
+       my ($amount, $src, $dst) = /(\d+)/g;
+       push @{ $stacks[$dst-1] }, splice @{ $stacks[$src-1] }, -$amount, $amount;
+}
+
+for my $st (@stacks) {
+       print $st->[-1];
+}
+print "\n";
+