Perl Advent Calendar 2009-12-25

Finding the perfect tree topper

by Jerrad Pierce

Santa is nothing if not fair, and insists that the games he gives out be fair too. To that end he employs Acme::Grep2D to evaluate board game configurations, and for quality control of pre-press editions of the word searches in puzzle books. It also comes in quite handy for parsing concrete poems.

There are 25 stars.
 3=> 1,  4=> 0 = STAR                                                           
49=> 1,  7=> 0 = STAR                                                           
19=> 1, 13=> 0 = STAR                                                           
57=> 1, 17=> 0 = STAR                                                           
12=> 1, 20=> 0 = STAR                                                           
13=>-1,  4=> 0 = STAR                                                           
59=>-1,  7=> 0 = STAR                                                           
29=>-1, 13=> 0 = STAR                                                           
67=>-1, 17=> 0 = STAR                                                           
22=>-1, 20=> 0 = STAR                                                           
11=>-1,  7=>-1 = STAR
27=>-1, 16=>-1 = STAR
65=>-1, 20=>-1 = STAR
57=>-1, 10=>-1 = STAR
20=>-1, 23=>-1 = STAR
 5=> 1,  7=>-1 = STAR
14=> 1, 23=>-1 = STAR
21=> 1, 16=>-1 = STAR
51=> 1, 10=>-1 = STAR
59=> 1, 20=>-1 = STAR
 8=> 0,  1=> 1 = STAR
17=> 0, 17=> 1 = STAR
24=> 0, 10=> 1 = STAR
54=> 0,  4=> 1 = STAR
62=> 0, 14=> 1 = STAR

mod25.pl

   1 use Acme::Grep2D;
   2
   3 #Count all the stars in the sky
   4 $g2d = Acme::Grep2D->new(text => do{ local $/ = undef; <DATA> });
   5
   6 printf "There are %i stars.\n", scalar( @matches = $g2d->Grep(qr/star/i) );
   7
   8 foreach( @matches ){
   9     printf '%2$2i=>%4$2i, %3$2i=>%5$2i = %7$s'."\n", @{$_}, $g2d->extract($_)
  10 }
  11
  12 __DATA__
  13 skyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  14 skyskyskSskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  15 skyskyskTskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  16 skyskyskAskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  17 skySTARkRsRATSyskyskyskyskyskyskyskyskyskyskyskyskyskySkyskyskyskyskyskyskysky
  18 skyskysAyAkyskyskyskyskyskyskyskyskyskyskyskyskyskyskyTkyskyskyskyskyskyskysky
  19 skyskyTkysTyskyskyskyskyskyskyskyskyskyskyskyskyskyskyAkyskyskyskyskyskyskysky
  20 skyskSskyskSskyskyskyskyskyskyskyskyskyskyskyskysSTARyRkRATSskyskyskyskyskysky
  21 skyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskAsAyskyskyskyskyskyskysky
  22 skyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysTyskTskyskyskyskyskyskysky
  23 skyskyskyskyskyskyskyskySkyskyskyskyskyskyskyskyskySkyskySkyskyskyskyskyskysky
  24 skyskyskyskyskyskyskyskyTkyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  25 skyskyskyskyskyskyskyskyAkyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  26 skyskyskyskyskyskysSTARyRkRATSskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  27 skyskyskyskyskyskyskyskAsAyskyskyskyskyskyskyskyskyskyskyskyskSskyskyskyskysky
  28 skyskyskyskyskyskyskysTyskTskyskyskyskyskyskyskyskyskyskyskyskTskyskyskyskysky
  29 skyskyskyskyskyskyskySkyskySkyskyskyskyskyskyskyskyskyskyskyskAskyskyskyskysky
  30 skyskyskyskyskyskSskyskyskyskyskyskyskyskyskyskyskyskyskySTARkRsRATSyskyskysky
  31 skyskyskyskyskyskTskyskyskyskyskyskyskyskyskyskyskyskyskyskysAyAkyskyskyskysky
  32 skyskyskyskyskyskAskyskyskyskyskyskyskyskyskyskyskyskyskyskyTkysTyskyskyskysky
  33 skyskyskyskySTARkRsRATSyskyskyskyskyskyskyskyskyskyskyskyskSskyskSskyskyskysky
  34 skyskyskyskyskysAyAkyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  35 skyskyskyskyskyTkysTyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  36 skyskyskyskyskSskyskSskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
  37 skyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskyskysky
View Source (POD)