186 #5389(2008/01/18 16:14 GMT) [ Scheme ] Rating0/0=0.00
ところでt=1で(x,y)=(10,9)のセルは生きてるんじゃないでしょうか?
t=0で隣接する(10,8), (9, 10), (1,9)が生きているので.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
(use util.list) (use srfi-1) (define (life-next-board board) ;盤面の更新 (define (life-neighbours n) ;隣接セルのインデックス (define (ln-in x y) (+ (* (modulo x 10) 10) (modulo y 10))) (receive (x y) (quotient&remainder n 10) (list (ln-in (- x 1) (- y 1)) (ln-in (- x 1) y) (ln-in (- x 1) (+ y 1)) (ln-in x (- y 1)) (ln-in x (+ y 1)) (ln-in (+ x 1) (- y 1)) (ln-in (+ x 1) y) (ln-in (+ x 1) (+ y 1))))) (define (life-live? n board) ;セルが生きているかどうか (= (list-ref board n) 1)) (define (life-next-cell n board) ;セルの更新 (let [(count (apply + (map (lambda (x) (list-ref board x)) (life-neighbours n))))] (cond [(life-live? n board) (if (or (= count 2) (= count 3)) 1 0)] [else (if (= count 3) 1 0)]))) (map (lambda (n) (life-next-cell n board)) (iota 100))) (define (life-print b t) ;出力用 (begin (newline) (format #t "Time = ~d" t) (newline) (map print (slices b 10)))) (define (life-game b u-t) ;本体 (define (lg-in b t) (let ((c (read-char))) (if (not (char=? #\e c)) (unless (> t u-t) (begin (life-print b t) (lg-in (life-next-board b) (+ t 1))))))) (lg-in b 0)) (define b1 (list 0 1 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 0 1 0 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 1 0)) (life-game b1 10)
Rating0/0=0.00-0+
1 reply [ reply ]
saws #5398(2008/01/19 13:20 GMT) Rating0/0=0.00
確かにt=1で(x,y)=(10,9)のセルは生き残ってないとおかしいですね. (^ ^); すいません, こちらのコーディングにバグがありました.
[ reply ]
186 #5389() [ Scheme ] Rating0/0=0.00
ところでt=1で(x,y)=(10,9)のセルは生きてるんじゃないでしょうか?
t=0で隣接する(10,8), (9, 10), (1,9)が生きているので.
Rating0/0=0.00-0+
1 reply [ reply ]