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


In reply to Re: Pattern Recognition Quest by blokhead
in thread Pattern Recognition Quest by eric256

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.