(define (iota n . args) (let ((start (if (pair? args) (car args) 0)) (step (if (and (pair? args) (pair? (cdr args))) (cadr args) 1))) (let loop ((m n) (last (+ start (* step (- n 1)))) (a '())) (if (zero? m) a (loop (- m 1) (- last step) (cons last a)))))) (define (take-candy a) (let ((a (sort a <))) (cons (- (car a) 1) (cdr a)))) (define (take-candy-rec M C) (let ((C (filter positive? C))) (if (zero? M) C (take-candy-rec (- M 1) (take-candy C))))) (define (solve N M C) (- N (length (take-candy-rec M C)))) (display (let* ((N (read)) (M (read)) (C (map (lambda (x) (read)) (iota N)))) (solve N M C))) (newline)