-#!/usr/bin/perl -wn
+#!/usr/bin/perl -w
use strict;
+use POSIX;
-our $want;
+our %want;
-BEGIN {
- $want = shift @ARGV;
- die unless $want =~ m/^\d+$/;
-}
+our $nknives = 3;
-our $drop;
+our @part_order = qw(h b l);
+
+my $want = shift @ARGV;
+my ($wknife,$wparts) = $want =~ m/^(\d)([a-z]+)$/ or die;
-if (m/^\S/) {
- $drop =
- m/^2 / ||
- m/^3 \d+ \d+ \d+ (?!$want )\d+ /;
+sub want ($) {
+ my ($colournum) = @_;
+ my $knife = $nknives-1 - ($colournum-1) % $nknives;
+ return 0 unless $knife == $wknife;
+ my $part = $part_order[ floor(($colournum-1) / $nknives) ];
+ die "huh colour $colournum?" unless defined $part;
+ return 0 unless $part =~ m/[$wparts]/o;
+ print STDERR "$0: including colour $colournum ($knife $part)\n";
+ return 1;
}
-next if $drop;
+our $drop;
+while (<>) {
+ if (m/^\S/) {
+ $drop =
+ m/^2 5 / ||
+ (m/^(?:3 1|2 3) \d+ \d+ (\d+) / && !want($1));
+ }
+ next if $drop;
-print or die $!;
+ print or die $!;
+}