Well, there's something wrong with the K solution and the Paul solution.
Stepping through the script with the debugger, for the first line of tStore,
the difference between tEndTime and tStartTime = 7974 (I inserted a temp
variable tTemp = tEndTime - tStartTime so I could see what was going on). You
want to round upwards to the nearest multiple of 900, which should be 8100.
Both the K and Paul solutions give a value of 2.5 -- clearly a really wrong
answer. If you amend the Geoff solution as follows:
--Geoff's itemoffset solution
put the millisec into tStartClock
repeat for each line tLine in tStore
put item 1 of tLine into tStartTime
put item 2 of tLine into tEndTime
put item 3 of tLine into tIncrement
put (x div tIncrement)*tIncrement + item itemOffset((x mod \
tIncrement > 0),"true,false") of (tIncrement,0) \
& cr after tStore4
end repeat
you get 8100, which is correct, and eyeballing the first few lines indicates
that Geoff's solution seems to be accurate.
I fixed the Geoff solution because I understand it. I'm too tired to figure out
the errors in the implementation of the other two, sorry.
-- Peter
Peter M. Brigham
[email protected]
http://home.comcast.net/~pmbrig
On Feb 17, 2012, at 8:55 PM, Kay C Lan wrote:
> Guys I thought I'd speed test these.
>
> Unfortunately I don't have the time to figure out exactly how Geoff's
> amended version of Peter's solution actually works in this case; rounding
> 1.1 to 1.25, 3.3 to 3.5. I can get it to work with whole numbers, but not
> 0.25 increments as per the OP.
>
> The current script produces:
>
> For 10000 cycles
> K's solution = 25ms
> Paul's solution = 28ms
> Geoff's solution for = 39ms
> Geoff's solution doesn't = K's
> Geoff's solution doesn't = Paul's
>
> Please amend the script below:
>
> on mouseUp
> put 10000 into tRepeats
> --to create a list of times to use.
> --900 is used as fixed 1/4 hour interval
> repeat tRepeats times
> put 1329494400 & "," & \
> (1329494400 + random(36000)) & "," & \
> 900 & cr after tStore
> end repeat
>
> --K solution
> put the millisec into tStartClock
> repeat for each line tLine in tStore
> put item 1 of tLine into tStartTime
> put item 2 of tLine into tEndTime
> put item 3 of tLine into tIncrement
> put round(((tEndTime + (tIncrement/2) - 1 -
> tStartTime)/tIncrement),0)/(3600/tIncrement) & cr after tStore2
> end repeat
> put the millisec into tEndClock
> put tEndClock - tStartClock into tTotalTime1
>
> --Paul's max solution
> put the millisec into tStartClock
> repeat for each line tLine in tStore
> put item 1 of tLine into tStartTime
> put item 2 of tLine into tEndTime
> put item 3 of tLine into tIncrement
> put
> round(((tEndTime-tStartTime)/max(tIncrement,60))+0.4999,0)/(3600/max(tIncrement,60))
> & cr after tStore3
> end repeat
> put the millisec into tEndClock
> put tEndClock - tStartClock into tTotalTime2
> if (tStore2 <> tStore3) then
> put "Paul's solution doesn't = K's" & cr after tErrors
> end if
>
> --Geoff's itemoffset solution
> put the millisec into tStartClock
> repeat for each line tLine in tStore
> put item 1 of tLine into tStartTime
> put item 2 of tLine into tEndTime
> put item 3 of tLine into tIncrement
> put (tEndTime - tStartTime)/tIncrement into x
> put 4 into i --tried 900, 4, 25 and 0.25
> put (x div i*i) + (item itemOffset((x mod i > 0),"true,false") of
> (i,0)) & cr after tStore4
> end repeat
> put the millisec into tEndClock
> put tEndClock - 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 msg
> put "K's solution = " & tTotalTime1 & "ms" & cr after msg
> put "Paul's solution = " & tTotalTime2 & "ms" & cr after msg
> put "Geoff's solution for = " & tTotalTime3 & "ms" & cr after msg
> put tErrors after msg
> end mouseUp
> _______________________________________________
> use-livecode mailing list
> [email protected]
> Please visit this url to subscribe, unsubscribe and manage your subscription
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode