;;; http://shootout.alioth.debian.org/
;;; Random implementation, by Jens Axel Sogaard
;;;
;;; Modified for proper string output by Brent Fulgham

(module random mzscheme
  (require (only mzlib/string real->decimal-string))

  (define IM 139968)
  (define IA   3877)
  (define IC  29573)

  (define gen_random
    (let ((LAST 42))
      (lambda (max)
	(set! LAST (modulo (+ (* LAST IA) IC) IM))
	(/ (* max LAST) IM))))

  (define (roundto digits num)
    (let* ([e (expt 10 digits)]
	   [num (round (* e (inexact->exact num)))])
      (format "~a.~a"
	      (quotient num e)
	      (substring (string-append (number->string (remainder num e))
					(make-string digits #\0))
			 0 digits))))

  (let ((n (string->number 
            (vector-ref (current-command-line-arguments)
                        0))))
    (let loop ((iter n))
      (if (> iter 1)
          (begin
            (gen_random 100.0)
            (loop (- iter 1)))))
    (printf "~a~%"
            (real->decimal-string (gen_random 100.0) 9))))
