Comment detail

n人中m人が当選するくじ (Nested Flatten)
Scheme (Gauche) で。素直に。
実行例:
gosh> (pick 100 4)
(12 17 72 45)
gosh> (pick 100 7)
(30 68 74 27 58 41 7)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
(use srfi-1)
(use srfi-27)
(random-source-randomize! default-random-source)

(define (pick n m)
  (let loop ((lis (iota n)) (m m) (r '()))
    (cond ((zero? m) r)
          ((null? lis) (error "pool too small"))
          (else (let1 picked (list-ref lis (random-integer (length lis)))
                  (loop (delete picked lis =) (- m 1) (cons picked r)))))))

Index

Feed

Other

Link

Pathtraq

loading...