I started with 

XXXXX X  X XXXX   XXXX  XXXX XXX  X         X  XX  X  X XXX  X   X  XX  X   
  X   X  X X      X   X X    X  X X         X X  X X  X X  X XX  X X  X X   
  X   XXXX XXX    XXXX  XXX  XXX  X         X X  X X  X XXX  X X X XXXX X   
  X   X  X X      X     X    X X  X      X  X X  X X  X X X  X  XX X  X X   
  X   X  X XXXX   X     XXXX X  X XXXX   XXXX  XX   XX  X  X X   X X  X XXXX

and I used binary-run-length-encoding to compress it.

I replaced consecutive "X"'s with plus,comma,dash,dot and slash (ascii
characters 43 through 47) depending on whether there were 1,2,3,4 or 5 
consecutive "X"s.  I then replaced consecutive spaces with the digits
1 through 9 (ascii 49 through 57), each digit corresponding to the
appropriate number of consecutive spaces.

I then looked for common consecutive characters, such as "2+", and
replaced occurrences with the next character (":" (ascii 58)), repeating
this algorithm (replacing "1+" with ";" (ascii 59), ":;" with "<"
(ascii 60), etc.) until I ran out of characters to replace with,
leaving me with the compressed string "/vw<OpA-5coTgyUF,t".

I stored the replaced duples in a string, knowing that any ascii
character n would be the replacement of substr(string,2*n,2).  I could 
thus reverse the compression with

  s/chr($i)/substr($string,2*$i),2)/.

Of course, I thought it would be trickier to replace substr with

  ($string =~ s/(..)/g)[$i]

Finally, I reversed the binary-run-length-encoding to produce
consecutive #'s and spaces, thus restoring the ascii art.

This is really the core of my first submission -- it's there becuase
(a) it's more perl, less ascii
(b) cat submission.pl | perl works
