fork download
  1. ; anagrams, again
  2.  
  3. (define (anagram? str1 str2)
  4. (if (not (= (string-length str1) (string-length str2))) #f
  5. (let ((buckets (make-vector 256 0)))
  6. (do ((cs (string->list str1) (cdr cs))) ((null? cs))
  7. (let ((i (char->integer (car cs))))
  8. (vector-set! buckets i (+ (vector-ref buckets i) 1))))
  9. (do ((cs (string->list str2) (cdr cs))) ((null? cs))
  10. (let ((i (char->integer (car cs))))
  11. (vector-set! buckets i (- (vector-ref buckets i) 1))))
  12. (let loop ((i 0))
  13. (if (= i 256) #t
  14. (if (not (zero? (vector-ref buckets i))) #f
  15. (loop (+ i 1))))))))
  16.  
  17. (display (anagram? "time" "emit")) (newline)
Success #stdin #stdout 0.01s 7948KB
stdin
Standard input is empty
stdout
#t