challenge n人中m人が当選するくじ

n人の中から公平にm人を選ぶ、くじ引きプログラムを作ってください。

Posted feedbacks - Emacs Lisp

1
2
3
4
5
6
(defun lot (n m)
  (let ((lot (loop for i from 1 to n collect i)))
    (loop repeat m collect
         (let ((x (nth (random (length lot)) lot)))
           (setf lot (delete x lot))
           x))))

(lot 100 3)
=>(99 21 16)
1
2
3
(defun lot (n m)
  (let ((v (vconcat (number-sequence 0 (- n 1)))))
    (nthcdr (- n m) (append (shuffle-vector v) nil))))

Index

Feed

Other

Link

Pathtraq

loading...