reorganized source, added test cases for tuning

This commit is contained in:
2024-06-05 16:33:35 +02:00
parent 50fab6e1a5
commit 162d141b34
33 changed files with 811 additions and 97 deletions

52
src/rule.go Normal file
View File

@@ -0,0 +1,52 @@
package main
import (
"log"
"strconv"
"strings"
)
// a GOL rule
type Rule struct {
Definition string
Birth []int64
Death []int64
}
// parse one part of a GOL rule into rule slice
func NumbersToList(numbers string) []int64 {
list := []int64{}
items := strings.Split(numbers, "")
for _, item := range items {
num, err := strconv.ParseInt(item, 10, 64)
if err != nil {
log.Fatalf("failed to parse game rule part <%s>: %s", numbers, err)
}
list = append(list, num)
}
return list
}
// parse GOL rule, used in CheckRule()
func ParseGameRule(rule string) *Rule {
parts := strings.Split(rule, "/")
if len(parts) < 2 {
log.Fatalf("Invalid game rule <%s>", rule)
}
golrule := &Rule{Definition: rule}
for _, part := range parts {
if part[0] == 'B' {
golrule.Birth = NumbersToList(part[1:])
} else {
golrule.Death = NumbersToList(part[1:])
}
}
return golrule
}