[Purdue-pm] More on Mark's challenge

Phillip San Miguel pmiguel at purdue.edu
Fri Jan 15 13:34:31 PST 2010


Mark Senn wrote:
>   On Wed, 13 Jan 2010 09:13:21 -0500 Rick Westerman wrote:
>   > I had a question today as to if is required to use the 'hereis' text
>   > Mark put in his original challenge email.  My feeling is 'yes'.  Just
>   > filling up an array with serial ASCII characters defeats part of the
>   > challenge -- one could certainly imagine a scenario where arbitrary text
>   > is used in a non-serial manner.  But maybe I am saying this because
>   > working with the 'hereis' took most of my less than 2 hour effort (I
>   > almost never use 'hereis') and so want to see what other people come up
>   > with.
>
> The original challenge email with some reformattig to make it easier to read
> and additions made on 2010-01-12 (they're clearly marked):
>
>     I came across the following when doing normal work for my job.
>
>     Using the following
>     ==== start with next line
>            0 NUL   1 SOH    2 STX    3 ETX    4 EOT    5 ENQ    6 ACK    7 BEL
>            8 BS    9 HT    10 NL    11 VT    12 NP    13 CR    14 SO    15 SI
>           16 DLE  17 DC1   18 DC2   19 DC3   20 DC4   21 NAK   22 SYN   23 ETB
>           24 CAN  25 EM    26 SUB   27 ESC   28 FS    29 GS    30 RS    31 US
>           32 SP   33 !     34 "     35 #     36 $     37 %     38 &     39 '
>           40 (    41 )     42 *     43 +     44 ,     45 -     46 .     47 /
>           48 0    49 1     50 2     51 3     52 4     53 5     54 6     55 7
>           56 8    57 9     58 :     59 ;     60 <     61 =     62 >     63 ?
>           64 @    65 A     66 B     67 C     68 D     69 E     70 F     71 G
>           72 H    73 I     74 J     75 K     76 L     77 M     78 N     79 O
>           80 P    81 Q     82 R     83 S     84 T     85 U     86 V     87 W
>           88 X    89 Y     90 Z     91 [     92 \     93 ]     94 ^     95 _
>           96 `    97 a     98 b     99 c    100 d    101 e    102 f    103 g
>          104 h   105 i    106 j    107 k    108 l    109 m    110 n    111 o
>          112 p   113 q    114 r    115 s    116 t    117 u    118 v    119 w
>          120 x   121 y    122 z    123 {    124 |    125 }    126 ~    127 DEL
>     ==== end with previous line
>     in a here document set up an array @print in Perl 5 so that elements
>         0..31 are '.'
>         32 is ' '
>         33..126 are as listed
>         127 is '.'
>         128..255 is '.'
>
>     I'll show my solution (that doesn't use
>         chr
>         do
>         for
>         grep (added on 2010-01-12)
>         if
>         map (added on 2010-01-12)
>         ord
>         repeat (added on 2010-01-12)
>         require (added on 2010-01-14)
>         sub
>         while
>         until
>         use (added on 2010-01-14)
>     ) at next meeting and would like to see other solutions with
>     or without the parenthesized restraint above.    -mark
>
> One must use the here document in the original challenge email so that,
> for example, if "R" where changed to "X" in the here document then
> $print[82] would be "X" after your code runs.
>
> There are two kinds of solutions:
>
> FIRST KIND: ignores the character numbers like the "0" in "0 NUL" and
> assumes the values for the @print array are listed in order.
>
> SECOND KIND: uses the character numbers so that if, for example, "127 DEL"
> were changed to "127 x" then $print[127] would be "x" after the code runs.
>
> I did an easy to read and understand solution of the first kind.  After
> reading comments by other people, I did a Perl golf solution (minimize
> number of characters used) of the second kind, and a reformatted version
> of the Perl golf solution so it is easier to read.
>   
I now have a single statement (68 characters for the "golf" 
version--including "@print=" characters) solution which may be of the 
1st kind or the 2nd kind. I am presuming that the here doc is dumped 
into $_ and that step doesn't count against my "score". It is ugly, I 
guess. But I'm not using any JAPHistry. All the commands I deploy do 
what you expect them to--they don't rely on some side effect to get the 
job done.

Strictly speaking it is of the 2nd kind in that it passes the test Mark 
stipulates above. But past that I'm not sure whether it would suit 
Mark's purposes or not.
Phillip


More information about the Purdue-pm mailing list