]> www.fi.muni.cz Git - aoc.git/blob - 2018/14.pl
Day 25: examining the input
[aoc.git] / 2018 / 14.pl
1 #!/usr/bin/perl -w
2
3 use v5.30;
4 use strict;
5
6 my %prereqs;
7 my %steps;
8 while (<>) {
9         my ($src, $dst) = /(\w) must be.* (\w) can/;
10         $prereqs{$dst}->{$src} = 1;
11         $steps{$src} = ord($src)-ord('A')+61;
12         $steps{$dst} = ord($dst)-ord('A')+61;
13 }
14
15 my $time = 0;
16 while (%steps) {
17         $time++;
18         my @avail = sort grep { keys %{ $prereqs{$_} } == 0 } keys %steps;
19         for my $step (splice @avail, 0, 5) {
20                 next if --$steps{$step} > 0;
21                 delete $steps{$step};
22                 for my $p (keys %prereqs) {
23                         delete $prereqs{$p}->{$step};
24                 }
25         }
26 }
27
28 say $time;
29