diff --git a/gen/opcode.go b/gen/opcode.go index d9071e8..bf7c02e 100644 --- a/gen/opcode.go +++ b/gen/opcode.go @@ -10,14 +10,14 @@ var opCodes = []vm.OpCodeType{ vm.OpMov, vm.OpAdd, -// vm.OpSub, + vm.OpSub, vm.OpMul, -// vm.OpDivU, -// vm.OpDivS, + vm.OpDivU, + vm.OpDivS, -// vm.OpNot, -// vm.OpAnd, -// vm.OpOr, + vm.OpNot, + vm.OpAnd, + vm.OpOr, vm.OpXor, // vm.OpShR, diff --git a/grow/definition.go b/grow/definition.go index fefca6f..f23a717 100644 --- a/grow/definition.go +++ b/grow/definition.go @@ -98,7 +98,7 @@ func (def *Definition) Grow(statusChan chan<- Status) (*vm.Program, error) { statusChan <- status } - if status.BestScores[0].Current == status.BestScores[0].Total { + if def.scoreIsPerfect(status.BestScores) { return prog, nil } } @@ -225,6 +225,16 @@ func (def *Definition) scoreIsBetter(old, new []*Score) bool { return false } +func (def *Definition) scoreIsPerfect(scores []*Score) bool { + for _, score := range scores { + if score.Current < score.Total { + return false + } + } + + return true +} + func (def *Definition) minifyProgram(prog *vm.Program) error { for f := 0; f < len(prog.Functions); f++ { err := def.minifyFunction(prog, f) diff --git a/grow/defs/pythag.yaml b/grow/defs/pythag.yaml index 5b211fa..3fe3e3d 100644 --- a/grow/defs/pythag.yaml +++ b/grow/defs/pythag.yaml @@ -8,20 +8,97 @@ instructions_per_function_std_dev: 3 return_to_best_period_mean: 10000 samples: -- in: [3,4] +- in: [3, 4] out: [5] - -- in: [7,24] +- in: [5, 12] + out: [13] +- in: [8, 15] + out: [17] +- in: [7, 24] out: [25] - -- in: [88, 105] - out: [137] - -- in: [140, 171] - out: [221] - -- in: [105, 208] - out: [233] - -- in: [161, 240] - out: [289] +- in: [20, 21] + out: [29] +- in: [12, 35] + out: [37] +- in: [9, 40] + out: [41] +- in: [28, 45] + out: [53] +- in: [11, 60] + out: [61] +- in: [16, 63] + out: [65] +- in: [33, 56] + out: [65] +- in: [48, 55] + out: [73] +- in: [13, 84] + out: [85] +- in: [36, 77] + out: [85] +#- in: [39, 80] +# out: [89] +#- in: [65, 72] +# out: [97] +#- in: [20, 99] +# out: [101] +#- in: [60, 91] +# out: [109] +#- in: [15, 112] +# out: [113] +#- in: [44, 117] +# out: [125] +#- in: [88, 105] +# out: [137] +#- in: [17, 144] +# out: [145] +#- in: [24, 143] +# out: [145] +#- in: [51, 140] +# out: [149] +#- in: [85, 132] +# out: [157] +#- in: [119, 120] +# out: [169] +#- in: [52, 165] +# out: [173] +#- in: [19, 180] +# out: [181] +#- in: [57, 176] +# out: [185] +#- in: [104, 153] +# out: [185] +#- in: [95, 168] +# out: [193] +#- in: [28, 195] +# out: [197] +#- in: [84, 187] +# out: [205] +#- in: [133, 156] +# out: [205] +#- in: [21, 220] +# out: [221] +#- in: [140, 171] +# out: [221] +#- in: [60, 221] +# out: [229] +#- in: [105, 208] +# out: [233] +#- in: [120, 209] +# out: [241] +#- in: [32, 255] +# out: [257] +#- in: [23, 264] +# out: [265] +#- in: [96, 247] +# out: [265] +#- in: [69, 260] +# out: [269] +#- in: [115, 252] +# out: [277] +#- in: [160, 231] +# out: [281] +#- in: [161, 240] +# out: [289] +#- in: [68, 285] +# out: [293]