in reply to Re: Golf - Ordinal Suffixes
in thread Golf - Ordinal Suffixes

Very nice. Here's my 40 chars... It runs under strict, anyway...

sub num2ord { local $_ = shift; # 1 2 3 4 5 6 +7 # 12345678901234678901234567890123456789012345678901234567890123456789 +0 $_.qw(th st nd rd)[/(?<!1)([123])$/*$1] }
And, combining ours can get us down to 35...

-sauoq
"My two cents aren't worth a dime.";

Replies are listed 'Best First'.
Re^3: Golf - Ordinal Suffixes
by japhy (Canon) on Oct 27, 2005 at 04:21 UTC
    Your way to shave a character (/msg'd) and my way are different, thus we can get it down to 34:
    sub num2ord { local $_ = shift; # 1 2 3 4 # 123456789012346789012345678901234567890 $_.(qw(0 st nd rd)[/1?\d$/g]||th) }

    Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
    How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

      We're assuming good input anyway, so we can shave another off...

      sub num2ord { local $_ = shift; # 1 2 3 4 # 123456789012346789012345678901234567890 $_.(qw(0 st nd rd)[/1?.$/g]||th) }
      Which drops us to 33.

      -sauoq
      "My two cents aren't worth a dime.";
      

        One bareword hardly seems enough:

        sub num2ord { local $_ = shift; # 1 2 3 4 # 123456789012346789012345678901234567890 $_.((0,st,nd,rd)[/1?.$/g]||th) }

        Update: oops, typo: too many parens at start.

        Hugo