diff --git a/conway/go/conways-game-of-life/main.go b/conway/go/conways-game-of-life/main.go index 97eb454..d9c92e5 100644 --- a/conway/go/conways-game-of-life/main.go +++ b/conway/go/conways-game-of-life/main.go @@ -29,15 +29,27 @@ func main() { os.Exit(2) } + cksum := game.Checksum() + ticks := time.Tick(time.Duration(*sleepMs) * time.Millisecond) generations := 0 for now := range ticks { fmt.Printf("\nGeneration %v\n%v\n", generations, now) fmt.Println(game) + game.EvaluateGeneration() + + if cksum == game.Checksum() { + fmt.Println("Stasis!") + os.Exit(0) + } + + cksum = game.Checksum() + if *mutate && generations%2 == 0 { game.Mutate() } + generations++ } } diff --git a/conway/go/game_of_life.go b/conway/go/game_of_life.go index 7b53b8b..de1a424 100644 --- a/conway/go/game_of_life.go +++ b/conway/go/game_of_life.go @@ -7,8 +7,13 @@ import ( "math" "math/rand" "strings" + "time" ) +func init() { + rand.Seed(time.Now().UTC().UnixNano()) +} + type GameOfLife struct { State *GameState } @@ -159,6 +164,10 @@ func (state *GameState) Mutate() error { return nil } +func (game *GameOfLife) Checksum() string { + return game.State.Checksum() +} + func (state *GameState) Checksum() string { ck := sha1.New() cells := make(chan *GameStateCell) @@ -282,7 +291,7 @@ func (state *GameState) String() string { return "" } - if value == 0 { + if value == 1 { stringVal = "ยท" } cells = append(cells, stringVal)