Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- (define (member? a lat) (cond ((null? lat) #f) ((equal? a (car lat)) #t) (else (member? a (cdr lat)))))
- (define (check p) (< (random) p))
- (define singlebronze 0)
- (define tenbronze 0)
- (define silvers 0)
- (define golds 0)
- (define (pin r c) (cond
- ((= r 1) (pin 2 (if (check 0.5) c (+ c 1))))
- ((= r 2) (pin 3 (if (check 0.5) c (+ c 1))))
- ((= r 3) (cond
- ((or (= c 1) (= c 6)) (pin 4 (if (= c 1) 1 5)))
- ((not (or (= c 2) (= c 5))) (pin 4 (if (check 0.5) c (- c 1))))
- ((check 0.25) (pin 4 (+ (if (= c 2) 3 4) (if (check 0.5) 0 1)))) ;wheel succeeds
- (else (pin 4 (if (check 0.5) c (- c 1))))))
- ((= r 4) (pin 5 (if (check 0.5) c (+ c 1))))
- ((= r 5) (cond
- ((= c 1) (pin 6 1))
- ((= c 6) (pin 6 5))
- (else (pin 6 (if (check 0.5) c (- c 1))))))
- (( = r 6) (cond
- ((or (= c 2) (= c 4)) (begin (set! singlebronze (+ 1 singlebronze)) 'single))
- ((= c 3) (if (check 0.25) (begin (set! silvers (+ 1 silvers)) 'silver) 'drain))
- (else (pin 7 (if (check 0.5) c (+ c 1))))))
- ((= r 7) (cond
- ((or (= c 1) (= c 6)) (pin 8 (if (= c 1) 1 5)))
- ((or (= c 2) (= c 5)) (if (check 0.25) (pin 8 (- (if (= c 2) 3 4) (if (check 0.5) 0 1))) (pin 8 (- c (if (check 0.5) 0 1)))))
- (else 'TILT)))
- ((= r 8) (cond
- ((or (= c 1) (= c 5)) (begin (set! singlebronze (+ 1 singlebronze)) 'single))
- ((or (= c 2) (= c 4)) (begin (set! tenbronze (+ 1 tenbronze)) 'ten))
- ((check 0.1) (begin (set! golds (+ 1 golds)) 'gold))
- (else 'drain)))))
- (define (run-a-million-tests shot)
- (begin
- (set! singlebronze 0)
- (set! tenbronze 0)
- (set! silvers 0)
- (set! golds 0)
- (build-list 1000000 (lambda (x) (pin 1 shot)))
- `((,singlebronze singles) (,tenbronze tens) (,silvers sets of silvers) (,golds sets of golds))))
- ;(run-a-million-tests 1)
- ;(run-a-million-tests 2)
- (define petfood 0)
- (define specialfood 0)
- (define PetLock 0)
- (define (b-pin r c)
- (begin (if (> PetLock 0) (set! PetLock (- PetLock 1)) #f)
- (cond
- ((= r 1) (b-pin 2 (+ c (if (> c 2) 1 0))))
- ((= r 2) (cond
- ((= c 1) (b-pin 3 (if (check 0.5) 1 2)))
- ((= c 2) (if (check 0.1) (b-pin 2 3) (b-pin 3 2)))
- ((= c 3) (begin (if (check 0.04) (set! PetLock 6) #f) (b-pin 3 (if (check 0.5) 3 4))))
- ((= c 4) (if (check 0.1) (b-pin 2 3) (b-pin 3 5)))
- (else (b-pin 3 (if (check 0.5) 5 6)))))
- ((= r 3) (b-pin 4 (+ c (if (check 0.5) 0 1))))
- ((= r 4) (cond
- ((member? c `(2 3 5 6)) 'drain)
- ((member? c `(1 7)) (if (check 0.1) (begin (set! petfood (+ petfood 1)) 'food) 'drain))
- (else (if (> PetLock 0) (begin (set! specialfood (+ specialfood 1)) 'special) 'lock1)))))))
- (define (b-test ai)
- (begin (set! petfood 0) (set! specialfood 0) (set! PetLock 0) (b-testh ai 1000000)))
- (define (b-testh ai n)
- (cond
- ((> n 0) (begin (b-pin 1 (ai n)) (b-testh ai (- n 1))))
- (else `((,petfood Pet Food) (,specialfood Special Food)))))
Add Comment
Please, Sign In to add comment