On Fri, 17 Feb 2012, Michael W wrote:
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)))))
You can also replace positive? by (> C 0), and change the name "board" to
something shorter.
-- Jeremiah Willcock
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
____________________
Racket Users list:
http://lists.racket-lang.org/users