; anagrams, again
(define (anagram? str1 str2)
(if (not (= (string-length str1) (string-length str2))) #f
(let ((buckets (make-vector 256 0)))
(do ((cs (string->list str1) (cdr cs))) ((null? cs))
(let ((i (char->integer (car cs))))
(vector-set! buckets i (+ (vector-ref buckets i) 1))))
(do ((cs (string->list str2) (cdr cs))) ((null? cs))
(let ((i (char->integer (car cs))))
(vector-set! buckets i (- (vector-ref buckets i) 1))))
(let loop ((i 0))
(if (= i 256) #t
(if (not (zero? (vector-ref buckets i))) #f
(loop (+ i 1))))))))
(display (anagram? "time" "emit")) (newline)
OyBhbmFncmFtcywgYWdhaW4KCihkZWZpbmUgKGFuYWdyYW0/IHN0cjEgc3RyMikKICAoaWYgKG5vdCAoPSAoc3RyaW5nLWxlbmd0aCBzdHIxKSAoc3RyaW5nLWxlbmd0aCBzdHIyKSkpICNmCiAgICAobGV0ICgoYnVja2V0cyAobWFrZS12ZWN0b3IgMjU2IDApKSkKICAgICAgKGRvICgoY3MgKHN0cmluZy0+bGlzdCBzdHIxKSAoY2RyIGNzKSkpICgobnVsbD8gY3MpKQogICAgICAgIChsZXQgKChpIChjaGFyLT5pbnRlZ2VyIChjYXIgY3MpKSkpCiAgICAgICAgICAodmVjdG9yLXNldCEgYnVja2V0cyBpICgrICh2ZWN0b3ItcmVmIGJ1Y2tldHMgaSkgMSkpKSkKICAgICAgKGRvICgoY3MgKHN0cmluZy0+bGlzdCBzdHIyKSAoY2RyIGNzKSkpICgobnVsbD8gY3MpKQogICAgICAgIChsZXQgKChpIChjaGFyLT5pbnRlZ2VyIChjYXIgY3MpKSkpCiAgICAgICAgICAodmVjdG9yLXNldCEgYnVja2V0cyBpICgtICh2ZWN0b3ItcmVmIGJ1Y2tldHMgaSkgMSkpKSkKICAgICAgKGxldCBsb29wICgoaSAwKSkKICAgICAgICAoaWYgKD0gaSAyNTYpICN0CiAgICAgICAgICAoaWYgKG5vdCAoemVybz8gKHZlY3Rvci1yZWYgYnVja2V0cyBpKSkpICNmCiAgICAgICAgICAgIChsb29wICgrIGkgMSkpKSkpKSkpCgooZGlzcGxheSAoYW5hZ3JhbT8gInRpbWUiICJlbWl0IikpIChuZXdsaW5lKQ==