Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re (tilly) 2: Fore!!! (was The Perl Review)

by tilly (Archbishop)
on Feb 01, 2002 at 22:30 UTC ( #142791=note: print w/replies, xml ) Need Help??

in reply to Fore!!! (was The Perl Review)
in thread The Perl Review

How about 48?
sub h{ # 1 2 3 4 #23456789_123456789_123456789_123456789_12345678 ($_,$s)=@_;y/A-Z/:-T/;$s=36*$s-48+ord for/./g;$s }
PS If you read the problem statement carefully, there is a 1 character answer:
sub convert_0 { 0 }
tilly ducks

Replies are listed 'Best First'.
Re: Re (tilly) 2: Fore!!! (was The Perl Review)
by blakem (Monsignor) on Feb 02, 2002 at 00:14 UTC
    The y/// is very sneaky, but why play games with that $s? If you want a 0, see if one of $% $- $? or $[ work for you. Here it is shortened to 43 chars and as an added bonus, its now strict compatible.
    # 1 2 3 4 #23456789_123456789_123456789_123456789_1234 $_=pop;y/A-Z/:-T/;$?=36*$?-48+ord for/./g;$?


      I wrote it as a function.

      The function should be usefully callable multiple times.

      Since you're well past my meagre 59 (from the use.perl thread), I might as well show it:
      $_=shift;y/0-9A-Z/\0-#/;(s/.//,($a*=36)+=ord)while length
      Yes, no output-- the game rules were unclear that way, too. Using your tricks I can get down to -- 43.
      $_=pop;y/0-9A-Z/\0-#/;($a*=46)+=ord for/./g
      If only the null byte were legal in y///, then the above could become 42...
      -- jhi
        Assuming that 46 is a typo...
        ($a*=36)+=ord # 13 chars $a=$a*36+ord # 12 chars
        But as you say, the rules are rather murky, so its tough to judge what qualifies as a solution and what doesn't.


Re: Re (tilly) 2: Fore!!! (was The Perl Review)
by jackdied (Monk) on Feb 02, 2002 at 10:06 UTC
    Could someone brief me on the y/// syntax? I took a look in man perlre, and tried stepping through it in the debugger - both were futile.


      y is a function which is explained in perlop. What it does is substitutes for any character in one list, the corresponding charater on another list.

      What I did was use ord and chr to figure out what the ASCII representation of 9 was, and what came right after that. Then I used tr to move the range A-Z so that they came right after the range 0-9, so that I could convert any digit into a number just by taking ord and subtracting off the ord of 0.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://142791]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (3)
As of 2018-04-20 03:52 GMT
Find Nodes?
    Voting Booth?