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