adventofcode2018/4/1.pl
2018-12-04 22:46:54 +00:00

47 lines
No EOL
1.1 KiB
Perl

#!/usr/bin/perl
use strict;
use v5.10;
use Data::Dumper;
chomp (my @data = <STDIN>);
@data = sort @data;
my %sleeps;
my %most;
my $currentguard = -1;
my $sleeptime = -1;
foreach my $line (@data) {
say $line;
if ( my ($date, $hour, $min, $guard) =
($line =~
m/\[(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})\] Guard #(\d+) begins shift/) ) {
$currentguard = $guard;
}
elsif ( my ($date, $hour, $min) =
($line =~
m/\[(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})\] falls asleep/) ) {
$sleeptime = $min;
}
elsif ( my ($date, $hour, $min) =
($line =~
m/\[(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})\] wakes up/) ) {
foreach my $mt ($sleeptime .. $min-1) {
$sleeps{$currentguard}->{$mt}++;
$most{$currentguard}++;
}
}
else {
say "no match"
}
}
my @most = sort { $most{$b} <=> $most{$a} } keys %most;
say $most[0] . " most, with " . $most{$most[0]};
my $result = $sleeps{$most[0]};
my @best = sort { $$result{$b} <=> $$result{$a} } keys %$result;
say $best[0] . " best minute";
say ($best[0] * $most[0]);