53 lines
1.2 KiB
Plaintext
53 lines
1.2 KiB
Plaintext
INSTALL @lib$+"TIMERLIB"
|
|
|
|
DIM Buckets%(100)
|
|
FOR i% = 1 TO 100 : Buckets%(i%) = RND(10) : NEXT
|
|
|
|
tid0% = FN_ontimer(10, PROCdisplay, 1)
|
|
tid1% = FN_ontimer(11, PROCflatten, 1)
|
|
tid2% = FN_ontimer(12, PROCroughen, 1)
|
|
|
|
ON ERROR PROCcleanup : REPORT : PRINT : END
|
|
ON CLOSE PROCcleanup : QUIT
|
|
|
|
REPEAT
|
|
WAIT 0
|
|
UNTIL FALSE
|
|
END
|
|
|
|
DEF PROCdisplay
|
|
PRINT SUM(Buckets%()) " ", MOD(Buckets%())
|
|
ENDPROC
|
|
|
|
DEF PROCflatten
|
|
LOCAL d%, i%, j%
|
|
REPEAT
|
|
i% = RND(100)
|
|
j% = RND(100)
|
|
UNTIL i%<>j%
|
|
d% = Buckets%(i%) - Buckets%(j%)
|
|
PROCatomicupdate(Buckets%(i%), Buckets%(j%), d% DIV 4)
|
|
ENDPROC
|
|
|
|
DEF PROCroughen
|
|
LOCAL i%, j%
|
|
REPEAT
|
|
i% = RND(100)
|
|
j% = RND(100)
|
|
UNTIL i%<>j%
|
|
PROCatomicupdate(Buckets%(i%), Buckets%(j%), RND(10))
|
|
ENDPROC
|
|
|
|
DEF PROCatomicupdate(RETURN src%, RETURN dst%, amt%)
|
|
IF amt% > src% amt% = src%
|
|
IF amt% < -dst% amt% = -dst%
|
|
src% -= amt%
|
|
dst% += amt%
|
|
ENDPROC
|
|
|
|
DEF PROCcleanup
|
|
PROC_killtimer(tid0%)
|
|
PROC_killtimer(tid1%)
|
|
PROC_killtimer(tid2%)
|
|
ENDPROC
|