Comment detail
議席数をドント方式で (Nested Flatten)同じくEmacs Lispで。 (dhondt 100 '(123 4 56 78)) =>(48 1 21 30)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | (require 'cl)
(defun dhondt (seats votes)
(let ((max1+ (lambda (l s d)
(let ((m (apply #'max l)))
(do ((l l (cdr l)) (i 0 (+ i 1)))
((null l) (cons s d))
(when (= (car l) m)
(incf (car (nthcdr i s)))
(incf (car (nthcdr i d))))))))
(len (length votes)))
(do ((score (make-list len 0))
(denom (make-list len 1)))
((>= (apply #'+ score) seats) score)
(let ((s&d (funcall max1+ (map 'list #'(lambda (a b) (/ (* a 1.0) b))
votes denom)
score denom)))
(setq score (car s&d)
denom (cdr s&d))))))
|





kacchi
#1263()
[
Scheme
]
Rating1/1=1.00
Rating1/1=1.00-0+
1 reply [ reply ]