fork(9) download
  1. ; zero-sum sub-arrays
  2.  
  3. (import (rnrs hashtables (6)))
  4.  
  5. (define (add1 x) (+ x 1))
  6.  
  7. (define (count xs)
  8. (let ((counts (make-eq-hashtable))
  9. (sum 0) (result 0))
  10. (do ((xs xs (cdr xs))) ((null? xs) result)
  11. (set! sum (+ sum (car xs)))
  12. (when (hashtable-contains? counts sum)
  13. (set! result (+ result (hashtable-ref counts sum 0))))
  14. (hashtable-update! counts sum add1 1))))
  15.  
  16. (display (count '(-1 1 -1 1))) (newline)
Success #stdin #stdout 0.03s 44752KB
stdin
Standard input is empty
stdout
4