]> www.fi.muni.cz Git - aoc.git/commitdiff
Day 8: ugly and generally incorrect first working solution
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Fri, 8 Dec 2023 07:29:42 +0000 (08:29 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Fri, 8 Dec 2023 07:55:34 +0000 (08:55 +0100)
2023/15.pl [new file with mode: 0755]
2023/16.pl [new file with mode: 0755]

diff --git a/2023/15.pl b/2023/15.pl
new file mode 100755 (executable)
index 0000000..e003111
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/bin/perl -w
+
+use v5.38;
+
+$/ = "\n\n";
+my %dirs;
+my @steps = split //, scalar <>;
+pop @steps;
+pop @steps;
+my $l = <>;
+for (split /\n/, $l) {
+       my @x = /[A-Z]{3}/g;
+       $dirs{$x[0].'L'} = $x[1];
+       $dirs{$x[0].'R'} = $x[2];
+}
+
+my %seen;
+my $now = 'AAA' . $steps[0];
+my $i = 0;
+my $n;
+while ($now !~ /^ZZZ/) {
+       say $now;
+       $i ++;
+       $i = 0 if $i >= @steps;
+       $now = $dirs{$now}.$steps[$i];
+       $n++;
+}
+say $n;
diff --git a/2023/16.pl b/2023/16.pl
new file mode 100755 (executable)
index 0000000..5e7f823
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/perl -w
+
+use v5.38;
+
+$/ = "\n\n";
+my %dirs;
+my @steps = split //, scalar <>;
+pop @steps;
+pop @steps;
+my $l = <>;
+for (split /\n/, $l) {
+       my @x = /[A-Z0-9]{3}/g;
+       $dirs{$x[0].'L'} = $x[1];
+       $dirs{$x[0].'R'} = $x[2];
+}
+
+my %seen;
+my %now = map { substr($_, 0, 3) . $steps[0] => 1 } grep { /^..A/ } keys %dirs;
+my @now = keys %now;
+say join(' ', @now);
+
+sub walk {
+       my $node = shift;
+       my $i = 0;
+       my $n;
+       while ($node !~ /^..Z/) {
+               $i++;
+               $i = 0 if $i >= @steps;
+               $node = $dirs{$node} . $steps[$i];
+       $n++;
+       }
+       return $n;
+}
+
+my %f;
+use List::Util qw(product);
+for (@now) {
+       my $st = walk($_);
+       my $l = `factor $st`;
+       $l =~ s/.*://;
+       for my $n ($l =~ /\d+/g) {
+               $f{$n}++;
+       }
+}
+say product keys %f;