Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

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


Comment on Re (tilly) 2: Fore!!! (was The Perl Review)
Select or Download Code
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;$?

    -Blake

      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.

        -Blake

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.

    -jackdied

      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?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://142791]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (9)
As of 2015-07-03 20:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (56 votes), past polls