]> www.fi.muni.cz Git - aoc.git/blob - 2016/39.pl
The rest of Year 2016
[aoc.git] / 2016 / 39.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use v5.30;
5
6 my @ints = ([ 0, (1 << 32)-1 ]);
7 INT:
8 while (<>) {
9         chomp;
10         say join(' ', map { $_->[0] . '-' . $_->[1] } @ints);
11         my ($lo, $hi) = split /-/;
12         say "blacklisting $lo-$hi";
13         my $i = 0;
14         while ($i < @ints) {
15                 my $int = $ints[$i];
16                 if ($int->[0] < $lo && $int->[1] > $hi) {
17                         splice @ints, $i, 1, [ $int->[0], $lo-1 ], [ $hi+1, $int->[1] ];
18                         next INT;
19                 } elsif ($int->[0] < $lo && $int->[1] >= $lo && $int->[1] <= $hi) {
20                         splice @ints, $i, 1, [ $int->[0], $lo-1 ];
21                         $i++;
22                 } elsif ($int->[0] >= $lo && $int->[1] <= $hi) {
23                         splice @ints, $i, 1;
24                 } elsif ($int->[0] >= $lo && $int->[0] <= $hi && $int->[1] > $hi) {
25                         splice @ints, $i, 1, [ $hi+1, $int->[1] ];
26                         next INT;
27                 } elsif ($int->[0] > $hi) {
28                         next INT;
29                 } else {
30                         $i++;
31                 }
32         }
33 }
34
35 say $ints[0]->[0];