[REBOL] Re: how do I get ampm format for time?
From: gjones05:mail:orion at: 19-Jan-2001 18:57
Hi, Jeff, Bo, et al
Sorry to beat a dead horse, but as Larry Wall has said, there's more than
one way to do things (and apologies to Bertrand Meyer ;-).
Jeff and others politely pointed out my programming-logic gaff from early
this morning. However, being a REBOL newbie, I have really enjoyed seeing
all the ways to tackle the problem (great way to learn the tricks of the
language). I would normally be more than satisfied with Jeff's solution:
time-ampm: func [dt [time!] /dd/merid][
merid: pick [PM AM] found? all [24:0 > dt dt >= 12:0 ]
reduce [(dd: dt // 12:0) + pick [12:0 0] 1:0 > dd merid]
]
but I was bothered that I couldn't get the logic to be correct using few
tricks without the code seeming to grow exponentially in comparison to
Jeff's, with his neat tricks. I mulled on it this evening and came up with:
time-ampm-mine: func [dt [time!]] [
either dt >= 12:0 [
join (either dt < 13:0 [dt] [dt - 12:0]) "PM"
][
join (either dt < 1:0 [dt + 12:0] [dt]) "AM"]
]
It seems to work at all the "boundary" cases, but please yell if I
overlooked something. Being curious as to the affect that the differences
in sources would have on execution time, I set up a loop to iterate the
functions 1 million times and measured times. On my 500 mhz (de)Celeron, my
function averaged 22 to 23 seconds, and Jeff's averaged 38 to 40 seconds. I
still prefer Jeff's because of the "beauty" of the tricks used.
As always, this information and 35 cents may buy you a phone call.
Cheers, Scott