Array Iteration Interview Problem 14 years ago
Chicken Scheme:
(use vector-lib)
(define (add1 vec val n)
(define *clone* (vector-copy vec)))
(define fold-using (if (>= n 0) vector-fold vector-fold-right))
(define (substitution-of total-replacements value)
(define replacements-left (if (= total-replacements 0) (vector-length vec) (abs total-replacements)))
(lambda (index mutable-vector current-element)
(if (and (= current-element value) (> replacements-left 0)
(begin
(vector-set! mutable-vector index (+ 1 current-element))
(set! replacements-left (- replacements-left 1))))
mutable-vector))
(fold-using (substitution-of n val) *clone* vec))
I don't like that I have to make a copy of the vector though. Maybe unfold ...