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.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
To match the exact output you wanted, you would also have to trim all leading and trailing trailing all-zero rows & columns.
blokhead
In reply to Re: Pattern Recognition Quest
by blokhead
in thread Pattern Recognition Quest
by eric256
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |