From 0850ada0c44298083bdb3c722c4cbf5b0121cb21 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Sat, 20 Nov 2021 19:38:31 -1000 Subject: [PATCH] Split out CLI --- grow/{ => cli}/main.go | 9 +++++++-- grow/definition.go | 2 +- grow/grow.go | 19 ++++++++++--------- grow/sample.go | 2 +- 4 files changed, 19 insertions(+), 13 deletions(-) rename grow/{ => cli}/main.go (73%) diff --git a/grow/main.go b/grow/cli/main.go similarity index 73% rename from grow/main.go rename to grow/cli/main.go index 7083514..bd9c39b 100644 --- a/grow/main.go +++ b/grow/cli/main.go @@ -6,6 +6,8 @@ import "math/rand" import "os" import "time" +import "github.com/firestuff/subcoding/grow" + func main() { defPath := flag.String("def-path", "", "path to definition YAML file") flag.Parse() @@ -21,10 +23,13 @@ func main() { log.Fatal(err) } - def, err := NewDefinition(defFile) + def, err := grow.NewDefinition(defFile) if err != nil { log.Fatal(err) } - def.Grow() + _, err = def.Grow() + if err != nil { + log.Fatal(err) + } } diff --git a/grow/definition.go b/grow/definition.go index 712e2c4..deeaa3d 100644 --- a/grow/definition.go +++ b/grow/definition.go @@ -1,4 +1,4 @@ -package main +package grow import "io" diff --git a/grow/grow.go b/grow/grow.go index b82d51d..90de4c0 100644 --- a/grow/grow.go +++ b/grow/grow.go @@ -1,4 +1,4 @@ -package main +package grow import "log" @@ -6,19 +6,18 @@ import "github.com/firestuff/subcoding/asm" import "github.com/firestuff/subcoding/gen" import "github.com/firestuff/subcoding/vm" -func (def *Definition) Grow() { +func (def *Definition) Grow() (*vm.Program, error) { high_score := 0 log.Print("Starting grow run...") // TODO: Score should be number of output criteria, not number of Samples - progs := 0 - for ; high_score < len(def.Samples); progs++ { + for progs := 0; ; progs++ { prog := gen.RandProgram(def.GlobalMemorySize, def.FunctionMemorySize, def.InstructionLimit) score, err := def.Score(prog) if err != nil { - log.Fatal(err) + return nil, err } if score > high_score { @@ -26,14 +25,16 @@ func (def *Definition) Grow() { src, err := asm.Disassemble(prog) if err != nil { - log.Fatal(err) + return nil, err } - log.Printf("New high score %d / %d:\n%s", high_score, len(def.Samples), src) + log.Printf("New high score %d / %d (after %d attempts):\n%s", high_score, len(def.Samples), progs, src) + + if score == len(def.Samples) { + return prog, nil + } } } - - log.Printf("%d programs tested", progs) } func (def *Definition) Score(prog *vm.Program) (int, error) { diff --git a/grow/sample.go b/grow/sample.go index a059760..cf51e47 100644 --- a/grow/sample.go +++ b/grow/sample.go @@ -1,4 +1,4 @@ -package main +package grow import "github.com/firestuff/subcoding/vm"