Using vectors, this one's (life) function is about ~240 chars after compacting whitespace.
;;;;;;;;;;;;;;;;;; 8< ;;;;;;;;;;;;;;;;;; 8< ;;;;;;;;;;;;;;;;;; #lang racket (define glider '#(#(0 0 0 0 0 0 0 0 0 0) #(0 0 0 0 0 0 0 0 0 0) #(0 0 0 0 1 0 0 0 0 0) #(0 0 0 0 0 1 0 0 0 0) #(0 0 0 1 1 1 0 0 0 0) #(0 0 0 0 0 0 0 0 0 0) #(0 0 0 0 0 0 0 0 0 0) #(0 0 0 0 0 0 0 0 0 0) #(0 0 0 0 0 0 0 0 0 0) #(0 0 0 0 0 0 0 0 0 0))) (define (life board s) (for/vector ([r s] [R board]) (for/vector ([c s] [C R]) (let* ([s (λ(b x) (in-vector b (max 0 (- x 1))(min s (+ x 2))))] [n (for*/sum ([R (s board r)] [C (s R c)]) C)]) (if (if (positive? C) (<= 3 n 4) (= 3 n)) 1 0))))) 12 minutes ago, Michael W wrote: > Hey there! Inspired by this article, I tried (quite > unsuccessfully) to make a very short, very contrived Game of > Life just for fun. > http://news.ycombinator.com/item?id=357938 > > How can we make this shorter? > > ;;;;;;;;; 8< ;;;;;;;;;;;;;; 8< ;;;;;;;;;;;;;; > #lang racket > > (define glider > '((0 0 0 0 0 0 0 0 0 0) > (0 0 0 0 0 0 0 0 0 0) > (0 0 0 0 1 0 0 0 0 0) > (0 0 0 0 0 1 0 0 0 0) > (0 0 0 1 1 1 0 0 0 0) > (0 0 0 0 0 0 0 0 0 0) > (0 0 0 0 0 0 0 0 0 0) > (0 0 0 0 0 0 0 0 0 0) > (0 0 0 0 0 0 0 0 0 0) > (0 0 0 0 0 0 0 0 0 0))) > > (define (life board s) > (for/list ([r s]) > (for/list ([c s]) > (let* ([v (λ(r c) (list-ref (list-ref board (modulo r s)) > (modulo c s)))] > [n (count positive > (map (λ(y x)(v (- r y) (- c x))) > '(-1 -1 -1 0 0 1 1 1) > '(-1 0 1 -1 1 -1 0 1)))]) > (if (or (and (positive (v r c)) > (= 2 n)) > (= 3 n)) > 1 0))))) > -- Yell at me if you see me somewhere, _mike ____________________ Racket Users list: http://lists.racket-lang.org/users