# Math problem

Geoff Canyon Rev gcanyon+rev at gmail.com
Sat Feb 18 22:22:16 CST 2012

```On Fri, Feb 17, 2012 at 7:55 PM, Kay C Lan <lan.kc.macmail at gmail.com> wrote:

> Guys I thought I'd speed test these.

Given that we're dealing in seconds (and therefore integers), the very
clever itemoffset idea Peter came up with is unnecessary. Here's a
comparison of the three options, with mine tweaked to be similar to my
original idea (and to return hours, so it matches the output of the other
two).

I took the liberty of removing the "max" function from Paul's code, since
all it does is restrict the rounding interval to a one minute interval,
which was not part of the original spec, and also since this test uses a
constant 15 minute interval, completely unused here. I got this on my
MacBook:

For 1000000 cycles
K's solution = 1342ms
Paul's solution = 1226ms
Geoff's solution = 1095ms

Which is to say that, at about 1 million calculations per second, any of
these solutions would be fine in practice.

gc

on mouseUp
put 1000000 into tRepeats
--to create a list of times to use.
--900 is used as fixed 1/4 hour interval
put 1329494400 into tStartTime
put 900 into tIncrement
repeat with i = 1 to tRepeats
put  (1329494400 + random(36000)) & cr after tStore
end repeat

--K solution
put the millisec into tStartClock
repeat for each line tEndTime in tStore
put round(((tEndTime + (tIncrement/2) - 1 - \
tStartTime)/tIncrement),0)/(3600/tIncrement) & cr after tStore2
end repeat
put the millisec - tStartClock into tTotalTime1

--Paul's  max solution
put the millisec into tStartClock
repeat for each line tEndTime in tStore
put round(((tEndTime-tStartTime)/tIncrement)+\
0.4999,0)/(3600/tIncrement) & cr after tStore3
end repeat
put the millisec - tStartClock into tTotalTime2
if (tStore2 <> tStore3) then
put "Paul's solution doesn't = K's" & cr after tErrors
end if

--Geoff's revised mod solution
put the millisec into tStartClock
repeat for each line tEndTime in tStore
put (tEndTime - tStartTime + tIncrement - 1) \
div tIncrement / 4 & cr after tStore4
end repeat
put the millisec - tStartClock into tTotalTime3
if (tStore2 <> tStore4) then
put "Geoff's solution doesn't = K's" & cr after tErrors
end if
if (tStore3 <> tStore4) then
put "Geoff's solution doesn't = Paul's" & cr after tErrors
end if

put "For " & tRepeats & " cycles" & cr into R
put "K's solution = " & tTotalTime1 & "ms" & cr after R
put "Paul's solution = " & tTotalTime2 & "ms" & cr after R
put "Geoff's solution = " & tTotalTime3 & "ms" & cr after R
put R & tErrors
end mouseUp
```