cardinal golf

Tkil tkil-sdpm at
Fri Feb 6 19:31:10 CST 2004

>>>>> "Charles" == C Abney <cabney at> writes:

| perl -le 'for(1..125){($b,$c)=reverse split//;
|           print$_,($c!=1?($b==1?"st":$b==2?"nd":$b==3?"rd":"th"):"th")}'

Hm.  I don't think I saw the rules, but I imagine it has to do with
how tightly you can write cardinal suffixes?  On a command line that
many characters long.

My current record is 61 total characters (including "perl" and the
closing single tick).  Skip to the bottom to see my solution, although
I left the trail I followed here (including a false start; those are
marked "wrong".)

How about:

  # oops, this is wrong
  perl -le '@x=(qw(th st nd rd),("th")x6);for(1..70){print$_,$x[$_%10]}'

Similar idea, but with strings:

  # this one too
  perl -le '$x="thstndrdthththththth";for(1..75){print$_,substr$x,$_%10*2,2}'

And even further:

  # still wrong.
  perl -le '$x="thstndrd"."th"x6;for(1..70){print$_,substr$x,$_%10*2,2}'

Back to 70 characters.

Ok, screw efficiency and use a goofy loop construct as well:

  # yup, still wrong.
  perl -le 'print$_,substr"thstndrd"."th"x6,$_%10*2,2 for 1..62'

Ah, I missed the 'teens.

  perl -le 'print$_,/1.$/?"th":substr"thstndrd"."th"x6,$_%10*2,2 for 1..73'

And just to squeeze two more characters out:

  perl -le'print$_,/1.$/?"th":substr"thstndrd"."th"x6,$_%10*2,2for 1..71'

This is getting gross.  Let's move that conditional in:

  perl -le'print$_,substr"thstndrd"."th"x6,/1.$/?0:$_%10*2,2for 1..68'

And maybe something other than ?:...

  perl -le'print$_,substr"thstndrd"."th"x6,!/1.$/*$_%10*2,2for 1..67'

Same thing if we go back to arrays:

  perl -le'print$_,(qw(th st nd rd),("th")x6)[!/1.$/*$_%10]for 1..67'

Ha.  To make sure that I've grovelled as low as I'm willing to go,
let's use barewords!

  perl -le'print$_,(th,st,nd,rd,(th)x6)[!/1.$/*$_%10]for 1..61'

Ok, I think I'm done.

Thanks for the fun.  Also about 20 minutes, here.  :)


The posting address is: san-diego-pm-list at

List requests should be sent to: majordomo at

If you ever want to remove yourself from this mailing list,
you can send mail to <majordomo at> with the following
command in the body of your email message:

    unsubscribe san-diego-pm-list

If you ever need to get in contact with the owner of the list,
(if you have trouble unsubscribing, or have questions about the
list itself) send email to <owner-san-diego-pm-list at> .
This is the general rule for most mailing lists when you need
to contact a human.

More information about the San-Diego-pm mailing list