Split out CLI

This commit is contained in:
Ian Gulliver
2021-11-20 19:38:31 -10:00
parent 8097d6d24f
commit 0850ada0c4
4 changed files with 19 additions and 13 deletions

View File

@@ -6,6 +6,8 @@ import "math/rand"
import "os" import "os"
import "time" import "time"
import "github.com/firestuff/subcoding/grow"
func main() { func main() {
defPath := flag.String("def-path", "", "path to definition YAML file") defPath := flag.String("def-path", "", "path to definition YAML file")
flag.Parse() flag.Parse()
@@ -21,10 +23,13 @@ func main() {
log.Fatal(err) log.Fatal(err)
} }
def, err := NewDefinition(defFile) def, err := grow.NewDefinition(defFile)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
def.Grow() _, err = def.Grow()
if err != nil {
log.Fatal(err)
}
} }

View File

@@ -1,4 +1,4 @@
package main package grow
import "io" import "io"

View File

@@ -1,4 +1,4 @@
package main package grow
import "log" import "log"
@@ -6,19 +6,18 @@ import "github.com/firestuff/subcoding/asm"
import "github.com/firestuff/subcoding/gen" import "github.com/firestuff/subcoding/gen"
import "github.com/firestuff/subcoding/vm" import "github.com/firestuff/subcoding/vm"
func (def *Definition) Grow() { func (def *Definition) Grow() (*vm.Program, error) {
high_score := 0 high_score := 0
log.Print("Starting grow run...") log.Print("Starting grow run...")
// TODO: Score should be number of output criteria, not number of Samples // TODO: Score should be number of output criteria, not number of Samples
progs := 0 for progs := 0; ; progs++ {
for ; high_score < len(def.Samples); progs++ {
prog := gen.RandProgram(def.GlobalMemorySize, def.FunctionMemorySize, def.InstructionLimit) prog := gen.RandProgram(def.GlobalMemorySize, def.FunctionMemorySize, def.InstructionLimit)
score, err := def.Score(prog) score, err := def.Score(prog)
if err != nil { if err != nil {
log.Fatal(err) return nil, err
} }
if score > high_score { if score > high_score {
@@ -26,14 +25,16 @@ func (def *Definition) Grow() {
src, err := asm.Disassemble(prog) src, err := asm.Disassemble(prog)
if err != nil { 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)
}
}
log.Printf("%d programs tested", progs) if score == len(def.Samples) {
return prog, nil
}
}
}
} }
func (def *Definition) Score(prog *vm.Program) (int, error) { func (def *Definition) Score(prog *vm.Program) (int, error) {

View File

@@ -1,4 +1,4 @@
package main package grow
import "github.com/firestuff/subcoding/vm" import "github.com/firestuff/subcoding/vm"