in reply to Pattern Recognition Quest

If you want more advanced pattern recognition, this is not it. But here is a really basic concept that will handle all simple rectangular shapes, including your example. In code, it looks like this:
my $IMAGE = <<END: 0000000000000000000000 0000000001111100000000 0000000001111100000000 0000000001111100000000 0000000001111100000000 0000011111111111110000 0000011111111111110000 0000011111111111110000 0000011111111111110000 0000000001111100000000 0000000001111100000000 0000000001111100000000 0000000001111100000000 0000000000000000000000 END sub transpose { my @matrix = map [ split // ], split /\n/, shift; my $dim = $#{ $matrix[0] }; @matrix = map { my $x=$_; [ map { $matrix[$_][$x] } 0..$#matrix ] +} 0..$dim; return join "", map { join("", @$_) . "\n" } @matrix; } sub squish { my $str = shift; $str =~ s/^(.*\n)\1+/$1/gm; return $str; } print transpose squish transpose squish $IMAGE; __OUTPUT__ 00000 00100 01110 00100 00000
I just threw this together, you could certainly make it more elegant, and resilient to the newlines in the data. But hopefully you get the idea. I chose to represent the image matrix as just a flat string because it makes squish simpler, but transpose would be a little more elegant with a 2-dimensional array instead of a string.

To match the exact output you wanted, you would also have to trim all leading and trailing trailing all-zero rows & columns.

blokhead