Golfscript, 198 characters
[]"-!9 4(% 2/!$<)3A50H/ -%%4 9/5
XXXN7).X\"?!,7I3>4UU2I!#+
[[[S35.;(`A[2- 50/.]]]&]%
YO2!U3F|,`/&4ZZZZZK)%,$3
!.$ }4),ze-%%Z!'!k\n-!9 '/S(/]hh )o4(%GG,/7 /&A)3;!v"{.32>{.58<{32+}{56-~1$>2<}if}*+}/+
Output:
$ ruby golfscript.rb blessing.gs
MAY THE ROAD RISE UP TO MEET YOU
MAY THE WIND BE ALWAYS AT YOUR BACK
MAY THE SUN SHINE WARM UPON YOUR FACE
THE RAINS FALL SOFT UPON YOUR FIELDS
AND UNTIL WE MEET AGAIN
MAY GOD HOLD YOU IN THE HOLLOW OF HIS HAND
The poem is compressed to 158 characters by using part of the ASCII range for back-references (of fixed length 2). The coding scheme is as follows:
[10] : newline (unencoded)
[32] : space (unencoded)
[33..57] : literal (33=A, 34=B, ... 57=Y, Z not needed)
[58..126] : back-reference relative to the end of the decompressed string so far.
The remaining 40 characters make up the decompression code which can probably be golfed a little further, since this is my first attempt at Golfscript.
Case-sensitive version, 207 characters
Same concept, but trading some of the back-reference range for lower case letters at the cost of some compression.
[]"-AY THE ROAD RISaUPhO MEET YOU
xxxnWINxB_ALWiS^TuuRiACK
{{{sSUN[HINa{RM UPON}}}F}E
4HoRAuS fLL SOFTzzzzzkIELDS
!NDlNTIwWE MEEzAGAIN
-AY 'OsHOLxYOU k THEggLOW OF (ISeAND"{.32>{.90<{32+}{88-~1$>2<}if}*+}/+
Output:
$ ruby golfscript.rb blessing-casesensitive.gs
May the road rise up to meet you
May the wind be always at your back
May the sun shine warm upon your face
The rains fall soft upon your fields
And until we meet again
May God hold you in the hollow of His hand
5(wondering if anyone else sees a need for a 'no-encodings' tag?) – smci – 2012-01-21T09:16:11.717
@Peter: it must use ASCII, and is restricted to characters 32-127. Sound ok? – smci – 2012-01-21T09:41:06.623
2Seems both reasonable and needed. Tagged. – J B – 2012-01-21T10:40:49.940
I guess someone will compress the bitstring into the ASCII range 32..127 then unpack it, but that's frowned upon. Can anyone get below 100% length otherwise? – smci – 2012-01-21T12:36:29.830
1Do note that ASCII 127 is not printable. – J B – 2012-01-21T12:45:10.690
@ J B I know. Just (32..127) gives a range of 96 values, which will be cleaner than 95 for string manipulation or base-changing. To quibble, we also allowed newline which is ASCII 13. – smci – 2012-01-21T12:50:17.890
@smci: ASCII 13 is Carriage Return (CR). Line Feed (LF) aka. newline is ASCII 10 (my answer assumes that's what you meant). – hammar – 2012-01-21T15:54:58.797
@hammar: yes it was – smci – 2012-01-26T20:47:18.410