[Jprogramming] Everyone giving dollars to random others
olius at bluewin.ch
olius at bluewin.ch
Fri Jul 21 01:15:36 UTC 2017
I like your new version very much Raul. Hard to top that. Hat's off for the
i.@# #/.~@,
part.
Bravo!
Louis
----Original Message----
>From : rauldmiller at gmail.com
Date : 20/07/2017 - 17:45 (EDT)
To : programming at jsoftware.com
Subject : Re: [Jprogramming] Everyone giving dollars to random others
So... here's a collection of some of the definitions seen here, with
some timing runs:
NB. Xiao-Yong Jin's implementation as revised by Pascal Jasmin
NB. http://jsoftware.com/pipermail/programming/2017-July/047881.html
revised=: ''1 :(0 :0-.LF)
/:~@(
-&1`]@.(=&0)"0
(#/.~@] + ~.@]{[)
`(~.@])
`[
}
>&0
#
(
?@#~@#@]`]`[}
]
I.@:=
i.@#
)@?@#~@#)
)
NB. Mike Day's implementation
NB. http://jsoftware.com/pipermail/programming/2017-July/047992.html
new=: (, (# | (+ ?&.<:@#~@#)))@(i.@#) +//. ((- , ]) 1&<.)
NB. Louis de Forcrand's version
NB. http://jsoftware.com/pipermail/programming/2017-July/047996.html
RUN=: UPD rec
UPD=: 4 : 0
b -~ x u}~ (x {~ u=. ~.y) + y +//. b=. x >: 1
)
rec=: ((] + ] >: i.@[) (?@$ <:))@#
NB. Raul Miller's revised version
NB. http://jsoftware.com/pipermail/programming/2017-July/048000.html
tock=: ((0 >. <:) + _1+i.@# #/.~@, I.@:* (] + <:) +/@:* ?@# <:@#)
NB. Skip Cave's version:
NB. http://jsoftware.com/pipermail/programming/2017-July/048003.html
hist =: <: @ (#/.~) @ (i.@#@[ , I.) NB. Histogram
iter =: 4 :0
nx =: y$y NB. initialize money
while. x>0
do. sg =: +/nx>0 NB. How many still giving?
nx =: nx-nx~:0 NB. Those that have, give
nx =: nx+(i.y) hist ?sg$y NB. distribute dollars
x =. x-1
end.
)
NB. timing
ts=: timespacex
try=:3 :0
echo y
echo ".y
)
testrun=:3 :0
'n g d'=. ":&.> y
subst=. rplc&('NN';n;'GG';g;'DD';d;' 1 ts';' ts')
try subst ' NN ts ''revised^:GG #~DD'''
try subst ' NN ts ''new^:GG #~DD'''
try subst ' NN ts ''RUN^:GG #~DD'''
try subst ' NN ts ''tock^:GG #~DD'''
try subst ' NN ts ''GG iter DD'''
echo ''
)
testrun 1 5e3 200
testrun 1 5e3 10
testrun 10 1e4 100
testrun 100 1e4 20
testrun 100 1e4 200
NB. ............. test runs follow:
1 ts 'revised^:5000 #~200'
0.752696 30208
1 ts 'new^:5000 #~200'
0.261853 20992
1 ts 'RUN^:5000 #~200'
0.060494 25344
1 ts 'tock^:5000 #~200'
0.04234 18432
1 ts '5000 iter 200'
0.049315 18560
1 ts 'revised^:5000 #~10'
0.057119 6144
1 ts 'new^:5000 #~10'
0.023318 4992
1 ts 'RUN^:5000 #~10'
0.017986 7040
1 ts 'tock^:5000 #~10'
0.010964 3840
1 ts '5000 iter 10'
0.017491 2176
10 ts 'revised^:10000 #~100'
0.753988 16384
10 ts 'new^:10000 #~100'
0.266346 11520
10 ts 'RUN^:10000 #~100'
0.0737156 14848
10 ts 'tock^:10000 #~100'
0.0521216 10240
10 ts '10000 iter 100'
0.0603638 11136
100 ts 'revised^:10000 #~20'
0.198089 6144
100 ts 'new^:10000 #~20'
0.0712385 5248
100 ts 'RUN^:10000 #~20'
0.0434272 7040
100 ts 'tock^:10000 #~20'
0.027364 4096
100 ts '10000 iter 20'
0.034847 3456
100 ts 'revised^:10000 #~200'
1.53964 30208
100 ts 'new^:10000 #~200'
0.57214 20992
100 ts 'RUN^:10000 #~200'
0.140146 25344
100 ts 'tock^:10000 #~200'
0.095298 18432
100 ts '10000 iter 200'
0.100683 20352
FYI,
--
Raul
On Thu, Jul 20, 2017 at 2:26 PM, Skip Cave <skip at caveconsulting.com> wrote:
> My explicit, looping version:
>
> NB. y is number of people and dollars
>
> NB. x is iteration count
>
> hist =: <: @ (#/.~) @ (i.@#@[ , I.) NB. Histogram
>
>
> iter =: 4 :0
>
> nx =: y$y NB. initialize money
>
> while. x>0
>
> do. sg =: +/nx>0 NB. How many still giving?
>
> nx =: nx-nx~:0 NB. Those that have, give
>
> nx =: nx+(i.y) hist ?sg$y NB. distribute dollars
>
> x =. x-1
>
> end.
>
> )
>
> ts =: 6!:2 , 7!:2@]
>
> 1e2 ts '1e4 iter 20'
>
> 0.0262932 4224
>
>
> 1e2 ts '1e4 iter 200'
>
> 0.0915201 20352
>
>
> 10 ts '1e4 iter 100'
>
> 0.0528825 9344
>
> Skip Cave
> Cave Consulting LLC
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
More information about the Programming
mailing list