]> www.fi.muni.cz Git - aoc.git/blob - 2022/49.pl
Day 25: examining the input
[aoc.git] / 2022 / 49.pl
1 #!/usr/bin/perl -w
2
3 use v5.36;
4 use strict;
5 use POSIX qw(floor);
6
7 sub snafu($sn) {
8         my ($n, $order) = (0, 1);
9         for my $dig (reverse split(//, $sn)) {
10                 my $x;
11                 $x=1  if $dig eq '1';
12                 $x=2  if $dig eq '2';
13                 $x=0  if $dig eq '0';
14                 $x=-1 if $dig eq '-';
15                 $x-=2 if $dig eq '=';
16                 $n += $x * $order;
17                 $order *= 5;
18         }
19         $n;
20 }
21
22 my $sum;
23 while (<>) {
24         chomp;
25         
26         $sum +=snafu($_);
27 }
28 say "sum = $sum";
29
30 my $order = 5**25;
31 my @digits = qw(= - 0 1 2);
32 my $ans = '';
33 while ($order >= 1) {
34         my $d = floor($sum/$order);
35         my $d2 = ($sum - $order*$d)*5/$order;
36         $d++ if $d2 > 2.5;
37         $sum -= $order * $d;
38         $ans .= $digits[$d+2];
39         $order /= 5;
40 }
41 $ans =~ s/^0*//;
42 say $ans;