Split out CLI
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package main
|
||||
package grow
|
||||
|
||||
import "io"
|
||||
|
||||
|
||||
19
grow/grow.go
19
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) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package main
|
||||
package grow
|
||||
|
||||
import "github.com/firestuff/subcoding/vm"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user