fork download
  1. ; television time
  2.  
  3. (define (range . args)
  4. (case (length args)
  5. ((1) (range 0 (car args) (if (negative? (car args)) -1 1)))
  6. ((2) (range (car args) (cadr args) (if (< (car args) (cadr args)) 1 -1)))
  7. ((3) (let ((le? (if (negative? (caddr args)) >= <=)))
  8. (let loop ((x(car args)) (xs '()))
  9. (if (le? (cadr args) x)
  10. (reverse xs)
  11. (loop (+ x (caddr args)) (cons x xs))))))
  12. (else (error 'range "unrecognized arguments"))))
  13.  
  14. (define (unique eql? xs)
  15. (cond ((null? xs) '())
  16. ((null? (cdr xs)) xs)
  17. ((eql? (car xs) (cadr xs))
  18. (unique eql? (cdr xs)))
  19. (else (cons (car xs) (unique eql? (cdr xs))))))
  20.  
  21. (define (mappend f . xss) (apply append (apply map f xss)))
  22.  
  23. (define (tv-time xs)
  24. (length (unique = (sort
  25. (mappend (lambda (x) (range (car x) (cadr x))) xs) <))))
  26.  
  27. (display (tv-time '((1 4) (2 3)))) (newline) ; 1, 2, 3
  28. (display (tv-time '((4 6) (1 2)))) (newline) ; 1, 4, 5
  29. (display (tv-time '((1 4) (6 8) (2 4) (7 9) (10 15)))) (newline) ; 1, 2, 3, 6, 7, 8, 10, 11, 12, 13, 14
Success #stdin #stdout 0.03s 8216KB
stdin
Standard input is empty
stdout
3
3
11