]> www.fi.muni.cz Git - aoc.git/blobdiff - 2015/21.pl
Year 2015
[aoc.git] / 2015 / 21.pl
diff --git a/2015/21.pl b/2015/21.pl
new file mode 100755 (executable)
index 0000000..90875ab
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/perl -w
+
+use v5.16;
+use strict;
+
+my $in = 'cqjxjnds';
+
+NUMBER:
+while (1) {
+       my @l = split //, $in;
+       my $n = $#l;
+       while ($l[$n] eq 'z') {
+               $l[$n] = 'a';
+               $n--;
+       }
+       if ($l[$n] =~ /[hkn]/) {
+               $l[$n] = chr(2+ord($l[$n]));
+               while (++$n <= $#l) {
+                       $l[$n] = 'a';
+               }
+       } else {
+               $l[$n] = chr(1+ord($l[$n]));
+       };
+       $in = join('', @l);
+       say "got $in";
+
+       next NUMBER if $in !~ /(.)\1.*(.)\2/;
+
+       my $prev = $l[0];
+       my $count = 1;
+       for (1 .. $#l) {
+               say "prev=$prev now=$l[$_] count $count";
+               if ($prev eq chr(ord($l[$_])-1)) {
+                       last if ++$count >= 3;
+               } else {
+                       $count = 1;
+               }
+               $prev = $l[$_];
+       }
+       next NUMBER if $count < 3;
+       last;
+}
+