なんかあの格差(?)のやつ

Twitterで見ました。オリジナルではありません。

100円を持ったN人の人がいました。それぞれの人は、毎ターン、ランダムに決めたある参加者に対してお金を1円を渡します(自分にあげることも可)。これをtimes回繰り返します。さて、皆さんどれくらいのお金を持っているでしょうか?

N=10、100ターンやるとこんな感じ(貧乏な順にソート)。5回やってみましょう。
[73, 82, 87, 92, 96, 99, 102, 106, 128, 135]
[61, 82, 86, 91, 95, 96, 108, 114, 132, 135]
[47, 75, 76, 89, 97, 99, 122, 126, 131, 138]
[46, 65, 82, 84, 94, 107, 121, 125, 126, 150]
[48, 59, 75, 76, 97, 109, 110, 132, 133, 161]
まあまあ格差ありますね。

300ターンにします。
[40, 68, 74, 77, 82, 107, 115, 139, 144, 154]
[30, 57, 57, 60, 75, 103, 141, 155, 157, 165]
[35, 42, 55, 56, 83, 125, 139, 143, 160, 162]
[21, 43, 46, 56, 91, 137, 140, 141, 147, 178]
[18, 30, 46, 52, 105, 116, 136, 161, 164, 172]
格差広がりました??

1000ターン
[26, 39, 84, 87, 99, 103, 107, 122, 126, 207]
[40, 42, 53, 70, 85, 102, 114, 114, 162, 218]
[11, 26, 30, 96, 109, 112, 130, 142, 150, 194]
[19, 21, 25, 49, 99, 104, 128, 153, 183, 219]
[3, 24, 43, 49, 66, 107, 139, 162, 195, 212]
もっと広がっている??

上の操作を100回繰り返して、最も貧乏な人の平均値と、最も裕福な人の平均値を出してみます。

100ターン:最小27.06、最大219.82
300ターン:最小10.58、最大272.67
1000ターン:最小8.93、最大319.29

ターンが増えると格差も増えそう?ランダムなので、平均値ですら安定しないのですが....。


import random
N=100 #人数
give = 1 #1回で渡すお金
Prime_money=100 #初期のお金
times = 100 #何回繰り返すか?
M=100 #何回の平均を取るか?

ave_min=0 #最もお金を持っている人の平均
ave_max=0 #最もお金を持っていない人の平均

prime=[]
L=[]
for i in range(N):
    prime.append(Prime_money)

for i in range(M):
    #res(N,give,Prime_money,times,prime)
    L=prime
    for j in range(times):
        for i in range(N):
            if L[i] != 0:
                k = random.randint(0,N-1)
                L[i] -= give
                L[k] += give
    s_L = sorted(L)
    ave_min += s_L[0]
    ave_max += s_L[N-1]
    
print(str(ave_min / M)+" , "+str(ave_max / M))