Files
golsky/rule.go

53 lines
913 B
Go
Raw Normal View History

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
2024-05-23 17:07:21 +02:00
func NumbersToList(numbers string) []int64 {
list := []int64{}
items := strings.Split(numbers, "")
for _, item := range items {
2024-05-23 17:07:21 +02:00
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
}