; three amazon interview questions
(define (ransom note magazine)
(let ((alphabet (make-vector 256 0)))
(do ((note (string->list note) (cdr note))) ((null? note))
(vector-set! alphabet (char->integer (car note))
(+ (vector-ref alphabet (char->integer (car note))) 1)))
(do ((mag (string->list magazine) (cdr mag))) ((null? mag))
(vector-set! alphabet (char->integer (car mag))
(- (vector-ref alphabet (char->integer (car mag))) 1)))
(not (positive? (apply max (vector->list alphabet))))))
(display (ransom "send money" "four score and seven years ago")) (newline)
(display (ransom "send money" "four million and seven years ago")) (newline)
(define (consec xs)
(let loop ((xs xs) (prev #f) (run 1) (maxval #f) (maxcnt 0))
(cond ((null? xs) (values maxval maxcnt))
((equal? (car xs) prev)
(if (<= maxcnt run)
(loop (cdr xs) prev (+ run 1) prev (+ run 1))
(loop (cdr xs) prev (+ run 1) maxval maxcnt)))
(else (loop (cdr xs) (car xs) 1 maxval maxcnt)))))
(call-with-values
(lambda () (consec '(1 1 1 2 3 3 3 3 4 4 1 1 1)))
(lambda (val cnt)
(display val) (newline)
(display cnt) (newline)))