fork download
  1. ; rng147
  2.  
  3. (define (uniq-c eql? xs)
  4. (if (null? xs) xs
  5. (let loop ((xs (cdr xs)) (prev (car xs)) (k 1) (result '()))
  6. (cond ((null? xs) (reverse (cons (cons prev k) result)))
  7. ((eql? (car xs) prev) (loop (cdr xs) prev (+ k 1) result))
  8. (else (loop (cdr xs) (car xs) 1 (cons (cons prev k) result)))))))
  9.  
  10. (define rand
  11. (let ((seed 0.3141592654))
  12. (lambda args
  13. (set! seed
  14. (if (pair? args)
  15. (sin (car args))
  16. (let ((x (* seed 147.0)))
  17. (- x (floor x)))))
  18. seed)))
  19.  
  20. (define (randlist n . args)
  21. (when (pair? args) (rand (car args)))
  22. (do ((n n (- n 1))
  23. (rs (list) (cons (rand) rs)))
  24. ((zero? n) rs)))
  25.  
  26. (define (freq n k)
  27. (uniq-c =
  28. (sort
  29. (map inexact->exact
  30. (map floor
  31. (map (lambda (x) (* x (expt 10 k)))
  32. (randlist n)))) <)))
  33.  
  34. (define (dir n)
  35. (let loop ((rs (randlist n)) (up 0) (down 0))
  36. (cond ((null? (cdr rs))
  37. (list up (- n up down 1) down))
  38. ((< (car rs) (cadr rs))
  39. (loop (cdr rs) (+ up 1) down))
  40. ((< (cadr rs) (car rs))
  41. (loop (cdr rs) up (+ down 1)))
  42. (else (loop (cdr rs) up down)))))
  43.  
  44. (display (freq 10000 1)) (newline)
  45. (display (freq 100000 2)) (newline)
  46. (display (dir 100000)) (newline)
Success #stdin #stdout 4.13s 57776KB
stdin
Standard input is empty
stdout
((0 . 956) (1 . 1010) (2 . 977) (3 . 1033) (4 . 1003) (5 . 1023) (6 . 1010) (7 . 1050) (8 . 973) (9 . 965))
((0 . 979) (1 . 1038) (2 . 987) (3 . 1052) (4 . 978) (5 . 1006) (6 . 1020) (7 . 963) (8 . 1002) (9 . 1030) (10 . 971) (11 . 1008) (12 . 1030) (13 . 1010) (14 . 940) (15 . 977) (16 . 1003) (17 . 1026) (18 . 1021) (19 . 1032) (20 . 1027) (21 . 1008) (22 . 970) (23 . 1009) (24 . 951) (25 . 1030) (26 . 998) (27 . 965) (28 . 989) (29 . 966) (30 . 1018) (31 . 1002) (32 . 952) (33 . 990) (34 . 1026) (35 . 964) (36 . 1012) (37 . 998) (38 . 1012) (39 . 992) (40 . 999) (41 . 932) (42 . 1028) (43 . 1036) (44 . 1054) (45 . 950) (46 . 1002) (47 . 965) (48 . 1051) (49 . 953) (50 . 1027) (51 . 1046) (52 . 1022) (53 . 999) (54 . 974) (55 . 968) (56 . 983) (57 . 1007) (58 . 970) (59 . 998) (60 . 994) (61 . 1023) (62 . 1029) (63 . 999) (64 . 1002) (65 . 966) (66 . 973) (67 . 911) (68 . 985) (69 . 983) (70 . 985) (71 . 1056) (72 . 1008) (73 . 997) (74 . 1020) (75 . 990) (76 . 1011) (77 . 984) (78 . 963) (79 . 1014) (80 . 961) (81 . 1034) (82 . 993) (83 . 1034) (84 . 1019) (85 . 951) (86 . 1031) (87 . 1013) (88 . 986) (89 . 955) (90 . 1024) (91 . 992) (92 . 1005) (93 . 1027) (94 . 1043) (95 . 1020) (96 . 1042) (97 . 1027) (98 . 1024) (99 . 1010))
(50119 0 49880)