Comment detail

n人中m人が当選するくじ (Nested Flatten)
#1248は無かったことに。 Nまでの列生成→ランダムにM個取り出し です。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
serial(S,E,[]):-S > E.
serial(S,E,[S|R]):-succ(S,S1),serial(S1,E,R).

remove([L|Ls],1,L,Ls).
remove([L|Ls],N,E,[L|R]):-succ(N1,N),remove(Ls,N1,E,R).

randomize(0,_,[]):-!.
randomize(I,L,R):-random(N),length(L,Ll),Nx is floor(N * Ll) + 1,remove(L,Nx,Le,Rs),succ(I1,I),
                  randomize(I1,Rs,Rss),R=[Le|Rss].

lot(N,M,R):-serial(1,N,L0),randomize(M,L0,R).

:-lot(20,5,R),writeln(R),halt.

Index

Feed

Other

Link

Pathtraq

loading...