; rng147 (define (uniq-c eql? xs) (if (null? xs) xs (let loop ((xs (cdr xs)) (prev (car xs)) (k 1) (result '())) (cond ((null? xs) (reverse (cons (cons prev k) result))) ((eql? (car xs) prev) (loop (cdr xs) prev (+ k 1) result)) (else (loop (cdr xs) (car xs) 1 (cons (cons prev k) result))))))) (define rand (let ((seed 0.3141592654)) (lambda args (set! seed (if (pair? args) (sin (car args)) (let ((x (* seed 147.0))) (- x (floor x))))) seed))) (define (randlist n . args) (when (pair? args) (rand (car args))) (do ((n n (- n 1)) (rs (list) (cons (rand) rs))) ((zero? n) rs))) (define (freq n k) (uniq-c = (sort (map inexact->exact (map floor (map (lambda (x) (* x (expt 10 k))) (randlist n)))) <))) (define (dir n) (let loop ((rs (randlist n)) (up 0) (down 0)) (cond ((null? (cdr rs)) (list up (- n up down 1) down)) ((< (car rs) (cadr rs)) (loop (cdr rs) (+ up 1) down)) ((< (cadr rs) (car rs)) (loop (cdr rs) up (+ down 1))) (else (loop (cdr rs) up down))))) (display (freq 10000 1)) (newline) (display (freq 100000 2)) (newline) (display (dir 100000)) (newline)
Standard input is empty
((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)