fork download
  1. ; your code goes here
  2. (define (order x)
  3. (define (iterate-until init f pred)
  4. (if (pred init)
  5. init
  6. (iterate-until (f init) f pred)))
  7. (if (>= x 1)
  8. (iterate-until 1 (lambda (p) (* p 10)) (lambda (p) (> (* p 10) x)))
  9. (iterate-until 1 (lambda (p) (/ p 10)) (lambda (p) (<= p x)))))
  10.  
  11. (define (real-bar-length min)
  12. (let ([p (order min)])
  13. (cond ([<= min p] p)
  14. ([<= min (* 2 p)] (* 2 p))
  15. ([<= min (* 5 p)] (* 5 p))
  16. (else (* 10 p)))))
  17.  
  18. (define (bar-length s)
  19. (* s (real-bar-length (/ 100 s))))
  20.  
  21. (define (test s expect)
  22. (display (= (bar-length s) expect))
  23. (newline))
  24.  
  25. (test 3/1000 150)
  26. (test 1/100 100)
  27. (test 4/10 200)
  28. (test 96/100 192)
  29.  
  30.  
Success #stdin #stdout 0.01s 7996KB
stdin
Standard input is empty
stdout
#t
#t
#t
#t