]> www.fi.muni.cz Git - aoc.git/blob - 2023/13.pl
Day 25: examining the input
[aoc.git] / 2023 / 13.pl
1 #!/usr/bin/perl -w
2
3 use v5.38;
4
5 my %cards = map { /(\S+)/g } <>;
6
7 sub rank {
8         my %hist;
9         $hist{$_}++ for split //, shift;
10         my %rh;
11         $rh{$_}++ for values %hist;
12         return 1 if $rh{5};
13         return 2 if $rh{4};
14         return 3 if $rh{3} && $rh{2};
15         return 4 if $rh{3};
16         return 5 if $rh{2} && $rh{2} == 2;
17         return 6 if $rh{2};
18         return 7;
19 }
20
21 sub val {
22         my $val = shift;
23         $val =~ y/AKQJT98765432/ABCDEFGHIJKLM/;
24         return rank($val).$val;
25 }
26
27 my $sum;
28 my $i;
29 for my $card (sort { val($b) cmp val($a) } keys %cards) {
30         # say "$card $i ", val($card);
31         $sum += $cards{$card} * ++$i;
32 }
33
34 say $sum;
35