From: Jan "Yenya" Kasprzak Date: Sun, 25 Dec 2022 05:45:33 +0000 (+0100) Subject: Day 25: symmetric base-5 X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=c1d40dd98ed914f3a7c78bef6e52239d6fa95804;hp=c20162af8a801503e9810bfbd0bea6c64272c3d6;p=aoc.git Day 25: symmetric base-5 --- diff --git a/2022/49.pl b/2022/49.pl new file mode 100755 index 0000000..5dc8244 --- /dev/null +++ b/2022/49.pl @@ -0,0 +1,42 @@ +#!/usr/bin/perl -w + +use v5.36; +use strict; +use POSIX qw(floor); + +sub snafu($sn) { + my ($n, $order) = (0, 1); + for my $dig (reverse split(//, $sn)) { + my $x; + $x=1 if $dig eq '1'; + $x=2 if $dig eq '2'; + $x=0 if $dig eq '0'; + $x=-1 if $dig eq '-'; + $x-=2 if $dig eq '='; + $n += $x * $order; + $order *= 5; + } + $n; +} + +my $sum; +while (<>) { + chomp; + + $sum +=snafu($_); +} +say "sum = $sum"; + +my $order = 5**25; +my @digits = qw(= - 0 1 2); +my $ans = ''; +while ($order >= 1) { + my $d = floor($sum/$order); + my $d2 = ($sum - $order*$d)*5/$order; + $d++ if $d2 > 2.5; + $sum -= $order * $d; + $ans .= $digits[$d+2]; + $order /= 5; +} +$ans =~ s/^0*//; +say $ans;