#!/usr/bin/perl -w use strict; use List::Util qw( min max ); sub minmax { ( min(@_), max(@_) ) } # draw rectangles onto sparse screen matrix my %screen; # sparse screen matrix my $rectangle_name = "A"; for () { if (/^(\d+),(\d+):(\d+),(\d+)$/) { my ($l,$r, $t,$b) = (minmax($1,$3), minmax($2,$4)); for my $x ($l .. $r) { # left to right for my $y ($t .. $b) { # top to bottom $screen{$y}{$x} = $rectangle_name; } } } $rectangle_name++; } # print out screen for my $f (sub {$_/10 % 10}, sub {$_ % 10}, sub {"_"}) { print " ", (map &$f, 1..20), "\n"; } my ($ymin, $ymax) = minmax(keys %screen); for my $y ($ymin .. $ymax) { printf "%2d|", $y; for my $x (1 .. 60) { print $screen{$y}{$x} || " "; } print "\n"; } __DATA__ 2,2:4,4 5,10:10,5 12,5:6,1 8,12:1,15