; finding the median
(define (median xs)
(let* ((counts (make-vector 256 0))
(len (do ((xs xs (cdr xs)) (len 0 (+ len 1))) ((null? xs) len)
(vector-set! counts (car xs) (+ (vector-ref counts (car xs)) 1)))))
(let loop ((lo 0) (lo-count 0) (hi 255) (hi-count 0))
(cond ((< lo-count (/ len 2)) (loop (+ lo 1) (+ lo-count (vector-ref counts lo)) hi hi-count))
((< hi-count (/ len 2)) (loop lo lo-count (- hi 1) (+ hi-count (vector-ref counts hi))))
(else (/ (+ lo hi) 2))))))
(display (median '(2 4 5 7 3 6 1))) (newline)
(display (median '(5 2 1 6 3 4))) (newline)
OyBmaW5kaW5nIHRoZSBtZWRpYW4KCihkZWZpbmUgKG1lZGlhbiB4cykKICAobGV0KiAoKGNvdW50cyAobWFrZS12ZWN0b3IgMjU2IDApKQogICAgICAgICAobGVuIChkbyAoKHhzIHhzIChjZHIgeHMpKSAobGVuIDAgKCsgbGVuIDEpKSkgKChudWxsPyB4cykgbGVuKQogICAgICAgICAgICAgICAgKHZlY3Rvci1zZXQhIGNvdW50cyAoY2FyIHhzKSAoKyAodmVjdG9yLXJlZiBjb3VudHMgKGNhciB4cykpIDEpKSkpKQogICAgKGxldCBsb29wICgobG8gMCkgKGxvLWNvdW50IDApIChoaSAyNTUpIChoaS1jb3VudCAwKSkKICAgICAgKGNvbmQgKCg8IGxvLWNvdW50ICgvIGxlbiAyKSkgKGxvb3AgKCsgbG8gMSkgKCsgbG8tY291bnQgKHZlY3Rvci1yZWYgY291bnRzIGxvKSkgaGkgaGktY291bnQpKQogICAgICAgICAgICAoKDwgaGktY291bnQgKC8gbGVuIDIpKSAobG9vcCBsbyBsby1jb3VudCAoLSBoaSAxKSAoKyBoaS1jb3VudCAodmVjdG9yLXJlZiBjb3VudHMgaGkpKSkpCiAgICAgICAgICAgIChlbHNlICgvICgrIGxvIGhpKSAyKSkpKSkpCgooZGlzcGxheSAobWVkaWFuICcoMiA0IDUgNyAzIDYgMSkpKSAobmV3bGluZSkKKGRpc3BsYXkgKG1lZGlhbiAnKDUgMiAxIDYgMyA0KSkpIChuZXdsaW5lKQ==