Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re (tilly) 2: Golf challange: match U.S. State names

by tilly (Archbishop)
on Jun 06, 2001 at 03:29 UTC ( [id://86065]=note: print w/replies, xml ) Need Help??


in reply to Re: Golf challange: match U.S. State names
in thread Golf challange: match U.S. State names

I think it is the principle of the thing that counts. How about:
AK AL AR AZ CA CO CT DC DE FL GA HI IA ID IL IN KS KT KY LA MA MD ME MI MN MO MS MT NC ND NE NH NJ NM NV NY OH OK OR PA RI SC SD TN TX UT VA VT WA WI WV WY
And the obvious answer is, of course,
sub state { grep$_[0]eq$_,'AKALARAZCACOCTDCDEFLGAHIIAIDILINKSKTKYLAMAMDMEMIMNMOMSM +TNCNDNENHNJNMNVNYOHOKORPARISCSDTNTXUTVAVTWAWIWVWY'=~/../g }
at 127 characters. I don't see an obviously better approach...

Replies are listed 'Best First'.
Re: Re (tilly) 2: Golf challange: match U.S. State names
by MeowChow (Vicar) on Jun 06, 2001 at 03:40 UTC
    124 chars, using that set :)
    sub state { pop=~/^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[STY]|LA|M[ADEINOST]| +N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$/ }
       MeowChow                                   
                   s aamecha.s a..a\u$&owag.print
      Your subroutine will accept "AK\n" as a state. Fixing that takes it to 125. But I can beat that with the following 122 character solution (which is what I was trying to figure out when I posted my first):
      sub state{ $_[0]=~/^\w\w\z/&&grep/$_[0]/,'WVTNHINMSCORIDCAKSDE WIALAR MNCTX NVAZ' +,'FLGAILKTKYMAMDMEMIMOMTNDNENJNYOHOKPAUTWAWY'=~/../g }
      OTOH I can improve your idea down to 119:
      sub state { pop=~/^([CGILPVW]A|[CKUV]T|[HRW]I|A[KLRZ]|CO|DC|DE|FL|I[DLN]|KS|KY|M[A +DEINOST]|N[CDEHJMVY]|O[HKR]|SC|SD|TN|TX|WV|WY)\z/ }
        Your first one can go down to 121:
        sub state{ grep$_[0]eq$_,'WVTNHINMSCORIDCAKSDE WIALAR MNCTX NVAZ'=~/(?=(\w\w))/ +g,'FLGAILKTKYMAMDMEMIMOMTNDNENJNYOHOKPAUTWAWY'=~/../g }
        ... or you could have just taken the easy route by converting the && into an &.
           MeowChow                                   
                       s aamecha.s a..a\u$&owag.print

      And 2 characters less by group the first letters too:

      sub state { pop=~/^(A[KLRZ]|C[AOT]|D[CE]|I[ADLN]|K[STY]|M[ADEINOST]|N[CDEHJMVY +]|O[HKR]|S[CD]|T[NX]|V[AT]|[GLP]A|[HR]I|FL|UT|W[AIVY])$/ }

      --bwana147

Re: Re (tilly) 2: Golf challange: match U.S. State names
by cforde (Monk) on Jun 06, 2001 at 03:48 UTC
    But the match isn't just on the names, but also on the abutment of names. I think you will get some false positives Eg. 'ZC' and 'OC' etc...

    Have fun,
    Carl Forde

      Not so, the regex returns matches in pairs, ie:
      @list = 'foobarbazo' =~ /../g; # sets @list to ('fo','ob','ar','ba',' +zo')
         MeowChow                                   
                     s aamecha.s a..a\u$&owag.print
        Aaahhhh, I see. That's what I get for not testing it first.

        Have fun,
        Carl Forde

Re: Golf challange: match U.S. State names
by John M. Dlugosz (Monsignor) on Jun 06, 2001 at 18:47 UTC
    Hmm, that's indeed 52 names. 50 states plus DC plus what?
      KT.

      Kentucky is supposed to be KY, but that list was pulled from a mapping that had to account for several mistakes. Sorry. (Similarly Quebec is PQ, but is often mistakenly written as QC.)

      BTW the US state abbreviations also include GU, PR and VI.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (3)
As of 2024-04-19 05:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found