Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; 1000 lockers problem
- ; as in http://www.reddit.com/r/dailyprogrammer/comments/ruiob/452012_challenge_36_easy/
- (define this-many-lockers 1000)
- (define locked #t)
- (define lockers (make-vector this-many-lockers locked))
- (define (toggle! locker)
- (let ((n (+ -1 locker))) ; because vectors are zero-based but lockers begin from 1
- (vector-set! lockers n (not (vector-ref lockers n)))))
- (define (open? locker) (not (vector-ref lockers (+ -1 locker))))
- (define (multiples n upto)
- (let f ((x 1))
- (let ((m (* x n)))
- (if (> m upto) `()
- (cons m (f (+ 1 x)))))))
- (let unleash ((student 1))
- (if (> student this-many-lockers) 'gone
- (begin
- (for-each (lambda (x) (toggle! x)) (multiples student this-many-lockers))
- (unleash (+ 1 student)))))
- (define open-lockers
- (let check ((l 1))
- (if (> l this-many-lockers) `()
- (if (open? l)
- (cons l (check (+ 1 l)))
- (check (+ 1 l))))))
- (length open-lockers)
- open-lockers
Add Comment
Please, Sign In to add comment