Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
30
Task/Subtractive-generator/Racket/subtractive-generator.rkt
Normal file
30
Task/Subtractive-generator/Racket/subtractive-generator.rkt
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#lang racket
|
||||
(define (make-initial-state a-list max-i)
|
||||
(for/fold ((state a-list))
|
||||
((i (in-range (length a-list) max-i)))
|
||||
(append state (list (- (list-ref state (- i 2)) (list-ref state (- i 1))))))) ;from the seed and 1 creates the initial state
|
||||
|
||||
(define (shuffle a-list)
|
||||
(for/list ((i (in-range (length a-list))))
|
||||
(list-ref a-list (modulo (* 34 (add1 i)) 55)))) ;shuffles the state
|
||||
|
||||
(define (advance-state state (times 1))
|
||||
(cond ((= 0 times) state)
|
||||
(else (advance-state
|
||||
(cdr (append state
|
||||
(list (modulo (- (list-ref state 0) (list-ref state 31))
|
||||
(expt 10 9)))))
|
||||
(sub1 times))))) ;takes a state and the times it must be advanced, and returns the new state
|
||||
|
||||
(define (create-substractive-generator s0)
|
||||
(define s1 1)
|
||||
(define first-state (make-initial-state (list s0 s1) 55))
|
||||
(define shuffled-state (shuffle first-state))
|
||||
(define last-state (advance-state shuffled-state 165))
|
||||
(lambda ((m (expt 10 9)))
|
||||
(define new-state (advance-state last-state))
|
||||
(set! last-state new-state)
|
||||
(modulo (car (reverse last-state)) m))) ;the lambda is a function with an optional argument
|
||||
;that returns a new random number each time it's called
|
||||
(define rand (create-substractive-generator 292929))
|
||||
(build-list 3 (lambda (_) (rand))) ;returns a list made from the 3 wanted numbers
|
||||
Loading…
Add table
Add a link
Reference in a new issue