[ create a new paste ] login | about

Link: http://codepad.org/VQAhDhfV    [ raw code | fork ]

veer - Scheme, pasted on Apr 1:
;;To find the maximum difference in an array.
;;For details see http://programmingpraxis.com/2011/04/01/maximum-difference-in-an-array/

;;These kind of problems need to be proved that they are correct.


(define (max-diff array)
  (let-values ([(j i o)
                (for/fold ((i 0) (j 0) (min-index 0))
                  ((index (in-range 1 (vector-length array))))
                  (diff array i j index min-index))])
    (list i j)))


(define (diff array j i k m) 
  (let ([j-val (vector-ref array j)]
        [i-val (vector-ref array i)]
        [k-val (vector-ref array k)]
        [m-val (vector-ref array m)])
    (cond
      [(< k-val i-val) (if (< k-val m-val)
                           (values j i k)
                           (values j i m))]
      [(> k-val j-val) (values k m m)]
      [(> (- k-val m-val) (- j-val i-val))
       (values k m m)]
      [else (values j i m)])))




(equal? '(3 4) (max-diff (vector 4 3 9 1 8 2 6 7 5)))
(equal? '(1 2) (max-diff (vector  4 2 9 1 8 3 6 7 5)))
(equal? '(3 7) (max-diff (vector 4 3 9 1 2 6 7 8 5)))


Create a new paste based on this one


Comments: