From 8f465a4a5049f1791eb5f334dda975a388856329 Mon Sep 17 00:00:00 2001 From: ston1th Date: Thu, 27 May 2021 07:39:32 +0200 Subject: [PATCH] optimize code --- .gitignore | 1 + main.go | 40 ++++++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 18 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58a5ef7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +gol diff --git a/main.go b/main.go index 7644f15..29d47e4 100644 --- a/main.go +++ b/main.go @@ -11,10 +11,13 @@ import ( ) const ( + // Grid size //size = 150 size = 30 + // Image zoom value zoom = 8 - fps = 2 + // Generations per second + gps = 2 ) type Grid struct { @@ -111,18 +114,17 @@ func max(i int) int { return i } -func (g *GOL) Check(x, y int) { +func (g *GOL) check(x, y int) { n := 0 for i := min(x - 1); i <= max(x+1); i++ { for j := min(y - 1); j <= max(y+1); j++ { if g.grid1.G[i][j] { - if !(i == x && j == y) { - n++ - } + n++ } } } if g.grid1.G[x][y] { + n-- switch n { case 0, 1: g.grid2.G[x][y] = false @@ -138,7 +140,7 @@ func (g *GOL) Check(x, y int) { } } -func (g *GOL) Grid() (gr *Grid) { +func (g *GOL) grid() (gr *Grid) { gr = new(Grid) for i := 0; i < size; i++ { gr.G[i] = g.grid1.G[i] @@ -147,6 +149,15 @@ func (g *GOL) Grid() (gr *Grid) { return } +func (g *GOL) Calc() (gr *Grid) { + for i := 0; i < size; i++ { + for j := 0; j < size; j++ { + g.check(i, j) + } + } + g.Gen++ + return g.grid() +} func main() { gol := NewGOL() gc := make(chan *Grid, 10) @@ -159,8 +170,7 @@ func main() { case img = <-ic: default: } - err := jpeg.Encode(os.Stdout, img, &o) - if err == nil { + if jpeg.Encode(os.Stdout, img, &o) == nil { os.Stdout.Sync() } time.Sleep(time.Millisecond * 16) @@ -170,13 +180,13 @@ func main() { s := size * zoom r := image.Rect(0, 0, s, s) for { - img := image.NewNRGBA(r) + img := image.NewGray(r) grid := <-gc x := 0 y := 0 + var c color.Color for i := 0; i < size; i++ { for j := 0; j < size; j++ { - var c color.Color if grid.G[i][j] { c = color.Black } else { @@ -197,14 +207,8 @@ func main() { }() for { - for i := 0; i < size; i++ { - for j := 0; j < size; j++ { - gol.Check(i, j) - } - } - gc <- gol.Grid() - gol.Gen++ + gc <- gol.Calc() fmt.Fprintf(os.Stderr, "\rGeneration: %d", gol.Gen) - time.Sleep(time.Second / fps) + time.Sleep(time.Second / gps) } }