]> www.fi.muni.cz Git - aoc.git/commitdiff
2023 day 1 part 2: prettier solution
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Fri, 1 Dec 2023 06:04:17 +0000 (07:04 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Fri, 1 Dec 2023 06:04:17 +0000 (07:04 +0100)
2023/02.pl

index 56e0c2696be023e797acb4a7f0f1b11b8fe91acc..b4701ca92119e125d41f69f55fdf2675163afee5 100755 (executable)
@@ -3,26 +3,19 @@
 use v5.38;
 use strict;
 use experimental 'multidimensional', 'for_list', 'builtin';
+use builtin 'indexed';
 
 my $sum;
-
-my %map = (
-       one   => 1,
-       two   => 2,
-       three => 3,
-       four  => 4,
-       five  => 5,
-       six   => 6,
-       seven => 7,
-       eight => 8,
-       nine  => 9,
-);
+my @digits = qw(zero one two three four five six seven eight nine);
+my %map = reverse indexed @digits;
+my $re = join('|', '\d', @digits);
 
 while (<>) {
-       my ($first) = /(\d|one|two|three|four|five|six|seven|eight|nine)/;
-       my ($last)  = /(?:.*)(\d|one|two|three|four|five|six|seven|eight|nine)/;
-       $first = $map{$first} if exists $map{$first};
-       $last =  $map{$last}  if exists $map{$last};
+       my ($first) = /($re)/;
+       my ($last)  = /.*($re)/;
+       for ($first, $last) {
+               $_ = $map{$_} if !/\d/;
+       }
        $sum += "$first$last";
        # say "$_ $first $last.";
 }