package part1; use 5.20.0; use warnings; use List::AllUtils qw/ zip pairmap reduce sum/; use experimental qw/ signatures postderef /; sub solution(@lines) { my @mask; my @mem; while( my $line = shift @lines ) { if( $line =~ /mask = (.*)/ ) { @mask = split '', $1; next; } $line =~ /mem\[(\d+)\] = (\d+)/ or die; my @num = split '', sprintf "%036b", $2; $mem[$1] = reduce { 2*$a + $b } pairmap { $a eq 'X' ? $b : $a } zip @mask, @num; } no warnings; return sum @mem; } 1;