44 lines
941 B
Perl
Executable File
44 lines
941 B
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
# use warnings;
|
|
use strict;
|
|
use lib "./";
|
|
use common;
|
|
use Data::Dumper;
|
|
|
|
sub part_one {
|
|
my $numbers = $_[0];
|
|
my $count = @$numbers;
|
|
my $digits = @{$numbers->[0]};
|
|
my @ones = ((0) x $digits);
|
|
|
|
for (@$numbers) {
|
|
my @row = @$_;
|
|
for my $idx (0 .. $#row) {
|
|
@ones[$idx] += 1 if @row[$idx] == "1";
|
|
}
|
|
}
|
|
|
|
my @gamma_rate = ();
|
|
my @epsilon_rate = ();
|
|
|
|
for (@ones) {
|
|
my $zeroes = $count - $_;
|
|
if ($zeroes < $_) {
|
|
push(@gamma_rate, 1);
|
|
push(@epsilon_rate, 0);
|
|
} else {
|
|
push(@gamma_rate, 0);
|
|
push(@epsilon_rate, 1);
|
|
}
|
|
}
|
|
my $gamma_rate = oct("0b" . join("", @gamma_rate));
|
|
my $epsilon_rate = oct("0b" . join("", @epsilon_rate));
|
|
|
|
return $gamma_rate * $epsilon_rate;
|
|
}
|
|
|
|
my @numbers = common::read_file($ARGV[0]);
|
|
my $result = part_one(\@numbers);
|
|
print $result, "\n";
|