平均 μ 、標準偏差 σ の正規分布にしたがって乱数を生成する関数を normal(μ,σ) 、
a 以上 b 以下の整数を一様ランダムに生成する関数を rand(a,b) と表します。
N=500,K=rand(300,400) とします。
1≤i≤K,1≤j≤4 に対して wi,j=max(1,min(10000,⌊normal(5000,1600)⌋)) とします。 ただし、 wi に同じ値が複数回出現するような i が存在すれば wi の各要素の生成はやり直され、それはこのような i が存在しなくなるまで続けられます。
各 i について wi の要素を昇順に並び替えます。
1≤i≤K について
ai=wi,2
ci=wi,3
ci+N=wi,4
ei=wi,1
とします。
K+1≤i≤N について
ai=max(1,min(10000,⌊normal(5000,1600)⌋))
ci=max(1,min(10000,⌊normal(5000,1600)⌋))
ci+N=max(1,min(10000,⌊normal(5000,1600)⌋))
ei=max(1,min(10000,⌊normal(5000,1600)⌋))
とします。
a,c,e をランダムに並び替えます。
1≤i≤N について
bi=max(1,min(1000,⌊normal(ai,500)⌋))
di=max(1,min(1000,⌊normal(di,500)⌋))
di+N=max(1,min(1000,⌊normal(di+N,500)⌋))
fi=max(1,min(1000,⌊normal(fi,500)⌋))
とします。
ジェネレータコード (Python)
import random
def high(wide):
return max(1,min(10000,int(random.gauss(wide,500))))
N=500
K=random.randint(300,400)
a=[]
b=[]
c=[]
d=[]
e=[]
f=[]
for i in range(K):
wide=[max(1,min(10000,int(random.gauss(5000,1600)))) for i in range(4)]
while len(set(wide))!=4:
wide=[max(1,min(10000,int(random.gauss(5000,1600)))) for i in range(4)]
wide.sort()
e.append(wide[0])
c.append(wide[3])
c.append(wide[2])
a.append(wide[1])
for i in range(N-K):
e.append(max(1,min(10000,int(random.gauss(5000,1600)))))
c.append(max(1,min(10000,int(random.gauss(5000,1600)))))
c.append(max(1,min(10000,int(random.gauss(5000,1600)))))
a.append(max(1,min(10000,int(random.gauss(5000,1600)))))
random.shuffle(a)
random.shuffle(c)
random.shuffle(e)
for i in range(N):
b.append(high(a[i]))
f.append(high(e[i]))
d.append(high(c[i*2]))
d.append(high(c[i*2+1]))
print(N,K)
print(*a)
print(*b)
print(*c)
print(*d)
print(*e)
print(*f)