Mercurial > repos > icfp2013
annotate src/bv.tp @ 59:3c8d8fdd32a1 default tip
mike's changes to solver
author | bill |
---|---|
date | Sun, 11 Aug 2013 15:24:22 -0700 |
parents | 27ee5051b1ec |
children |
rev | line source |
---|---|
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
1 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
2 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
3 program <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
4 _input <- 0u64 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
5 _acc <- 0u64 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
6 _val <- 0u64 |
33 | 7 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
8 _zero <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
9 string <- { "0" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
10 eval <- { 0u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
11 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
12 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
13 isTerminal? <- { true } |
33 | 14 constant? <- { true } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 } |
33 | 16 _accInputNode <- _zero |
17 _foldInputNode <- _zero | |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
19 _one <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
20 string <- { "1" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
21 eval <- { 1u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
22 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
23 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
24 isTerminal? <- { true } |
33 | 25 constant? <- { true } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
28 _inputNode <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
29 string <- { "input" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
30 eval <- { _input } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
31 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
32 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
33 isTerminal? <- { true } |
33 | 34 constant? <- { false } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
35 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
36 _accNode <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
37 string <- { "acc" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
38 eval <- { _acc } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
39 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
40 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
41 isTerminal? <- { true } |
33 | 42 constant? <- { _accInputNode constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
43 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
44 _valNode <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
45 string <- { "val" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
46 eval <- { _val } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
47 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
48 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
49 isTerminal? <- { true } |
33 | 50 constant? <- { _foldInputNode constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
51 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
52 _opPlus <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
53 _opAnd <- 2 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
54 _opOr <- 4 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
55 _opXor <- 8 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
56 _opNot <- 0x10 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
57 _opShl1 <- 0x20 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
58 _opShr1 <- 0x40 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
59 _opShr4 <- 0x80 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
60 _opShr16 <- 0x100 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
61 _opIf0 <- 0x200 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
62 _opFold <- 0x400 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
63 _opTfold <- 0x800 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
64 _maskRemoveFold <- 0x3FF |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
65 _opPlusMask <- 1 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
66 _opAndMask <- 2 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
67 _opOrMask <- 4 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
68 _opXorMask <- 8 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
69 _opNotMask <- 0x10 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
70 _opShl1Mask <- 0x20 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
71 _opShr1Mask <- 0x40 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
72 _opShr4Mask <- 0x80 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
73 _opShr16Mask <- 0x100 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
74 _opIf0Mask <- 0x200 xor 0xFFF |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
75 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
76 _names <- dict linear |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
77 _names set: "plus" _opPlus |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
78 _names set: "and" _opAnd |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
79 _names set: "xor" _opXor |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
80 _names set: "or" _opOr |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
81 _names set: "not" _opNot |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
82 _names set: "shl1" _opShl1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
83 _names set: "shr1" _opShr1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
84 _names set: "shr4" _opShr4 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
85 _names set: "shr16" _opShr16 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
86 _names set: "if0" _opIf0 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
87 _names set: "fold" _opFold |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
88 _names set: "tfold" _opTfold |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
89 _memo <- #[] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
90 _memoFoldBody <- #[] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
91 _memoFoldParam <- #[] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
92 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
93 plus <- :left right { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
94 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
95 string <- { "(plus " . (string: left) . " " . (string: right) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
96 eval <- { (eval: left) + (eval: right)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
97 operators <- { _opPlus or (left operators) or (right operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
98 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
99 isTerminal? <- { false } |
33 | 100 constant? <- { (left constant?) && (right constant?) } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
101 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
103 zero <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
104 _zero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
105 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
107 one <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
108 _one |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
111 opAnd <- :left right { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
112 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
113 string <- { "(and " . (string: left) . " " . (string: right) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
114 eval <- { (eval: left) and (eval: right)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
115 operators <- { _opAnd or (left operators) or (right operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
116 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
117 isTerminal? <- { false } |
33 | 118 constant? <- { |
119 if: (left constant?) { | |
120 if: (right constant?) { | |
121 true | |
122 } else: { | |
123 if: (string: left) = "0" { | |
124 true | |
125 } else: { | |
126 false | |
127 } | |
128 } | |
129 } else: { | |
130 if: (right constant?) { | |
131 if: (string: right) = "0" { | |
132 true | |
133 } else: { | |
134 false | |
135 } | |
136 } else: { | |
137 false | |
138 } | |
139 } | |
140 } | |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
141 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
142 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
143 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
144 opOr <- :left right { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
145 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
146 string <- { "(or " . (string: left) . " " . (string: right) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
147 eval <- { (eval: left) or (eval: right)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
148 operators <- { _opOr or (left operators) or (right operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
149 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
150 isTerminal? <- { false } |
33 | 151 constant? <- { (left constant?) && (right constant?) } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
152 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
153 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
154 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
155 opXor <- :left right { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
156 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
157 string <- { "(xor " . (string: left) . " " . (string: right) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
158 eval <- { (eval: left) xor (eval: right)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
159 operators <- { _opXor or (left operators) or (right operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
160 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
161 isTerminal? <- { false } |
33 | 162 constant? <- { |
163 if: (left constant?) && (right constant?) { | |
164 true | |
165 } else: { | |
166 (string: left) = (string: right) | |
167 } | |
168 } | |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
169 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
170 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
171 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
172 opNot <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
173 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
174 string <- { "(not " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
175 eval <- { (eval: exp) xor -1u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
176 operators <- { _opNot or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
177 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
178 isTerminal? <- { false } |
33 | 179 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
180 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
181 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
182 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
183 shl1 <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
184 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
185 string <- { "(shl1 " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
186 eval <- { lshift: (eval: exp) by: 1u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
187 operators <- { _opShl1 or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
188 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
189 isTerminal? <- { false } |
33 | 190 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
191 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
192 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
193 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
194 shr1 <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
195 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
196 string <- { "(shr1 " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
197 eval <- { rshift: (eval: exp) by: 1u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
198 operators <- { _opShr1 or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
199 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
200 isTerminal? <- { false } |
33 | 201 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
202 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
203 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
204 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
205 shr4 <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
206 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
207 string <- { "(shr4 " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
208 eval <- { rshift: (eval: exp) by: 4u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
209 operators <- { _opShr4 or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
210 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
211 isTerminal? <- { false } |
33 | 212 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
213 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
214 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
215 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
216 shr16 <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
217 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
218 string <- { "(shr16 " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
219 eval <- { rshift: (eval: exp) by: 16u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
220 operators <- { _opShr16 or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
221 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
222 isTerminal? <- { false } |
33 | 223 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
224 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
225 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
226 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
227 input <- { _inputNode } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
228 acc <- { _accNode } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
229 val <- { _valNode } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
230 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
231 if0:then:else <- :exp ifzero :ifnotzero { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
232 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
233 string <- { "(if0 " . (string: exp) . " " . (string: ifzero) . " " . (string: ifnotzero) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
234 eval <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
235 if: (eval: exp) = 0u64 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
236 eval: ifzero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
237 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
238 eval: ifnotzero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
239 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
240 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
241 operators <- { _opIf0 or (exp operators) or (ifzero operators) or (ifnotzero operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
242 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
243 isTerminal? <- { false } |
33 | 244 constant? <- { (exp constant?) && (ifzero constant?) && (ifnotzero constant?) } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
245 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
246 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
247 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
248 fold:with:startingAt <- :toFold :fun :startAcc { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
249 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
250 string <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
251 "(fold " . (string: toFold) . " " . (string: startAcc) . " (lambda (val acc) " . (string: fun) . "))" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
252 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
253 eval <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
254 _acc <- (eval: startAcc) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
255 source <- (eval: toFold) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
256 //parser doesn''t currently like vertical whitespace in arays so |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
257 //this needs to be on a single line until that bug is fixed |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
258 vals <- #[source and 255u64 (rshift: source by: 8u64) and 255u64 (rshift: source by: 16u64) and 255u64 (rshift: source by: 24u64) and 255u64 (rshift: source by: 32u64) and 255u64 (rshift: source by: 40u64) and 255u64 (rshift: source by: 48u64) and 255u64 (rshift: source by: 56u64) and 255u64] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
259 foreach: vals :idx cur { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
260 _val <- cur |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
261 _acc <- (eval: fun) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
262 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
263 _acc |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
264 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
265 operators <- { _opFold or (toFold operators) or (fun operators) or (startAcc operators) } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
266 isTfold? <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
267 (toFold isTerminal?) && (startAcc isTerminal?) && (toFold string) = "input" && (startAcc string) = "0" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
268 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
269 isTerminal? <- { false } |
33 | 270 constant? <- { |
271 _accInputNode <- startAcc | |
272 _foldInputNode <- toFold | |
273 fun constant? | |
274 } | |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
275 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
276 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
277 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
278 run <- :in { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
279 _input <- in |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
280 eval: root |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
281 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
282 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
283 root <- _zero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
284 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
285 string <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
286 "(lambda (input) " . (string: root) . ")" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
287 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
288 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
289 gentestprog <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
290 root <- if0: (opAnd: input one) then: ( |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
291 plus: (opOr: input (shl1: one)) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
292 ) else: ( |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
293 opXor: input (shr16: input) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
294 ) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
295 self |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
296 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
297 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
298 exampleprog <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
299 root <- fold: input with: (opOr: val acc) startingAt: zero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
300 self |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
301 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
302 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
303 allOfSize:inFold? <- :n :infold? { |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
304 memoAdjust <- 1 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
305 memo <- if: infold? = 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
306 _memoFoldBody |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
307 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
308 if: infold? = 1 && n > 4 { |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
309 memoAdjust <- 5 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
310 _memoFoldParam |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
311 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
312 _memo |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
313 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
314 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
315 if: n - memoAdjust < (memo length) { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
316 memo get: (n - memoAdjust) |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
317 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
318 if: n = 1 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
319 res <- #[one zero input] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
320 if: infold? = 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
321 res append: acc |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
322 res append: val |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
323 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
324 print: "Saving at memo index: " . (string: (memo length)) . "\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
325 memo append: res |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
326 res |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
327 } else: { |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
328 res <- #[] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
329 foreach: (allOfSize: n - 1 inFold?: infold?) :idx exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
330 res append: (opNot: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
331 res append: (shl1: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
332 res append: (shr1: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
333 res append: (shr4: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
334 res append: (shr16: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
335 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
336 if: n > 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
337 numLeft <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
338 argTotal <- n - 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
339 while: { numLeft < argTotal } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
340 numRight <- argTotal - numLeft |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
341 choicesRight <- (allOfSize: numRight inFold?: infold?) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
342 foreach: (allOfSize: numLeft inFold?: infold?) :idx leftExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
343 foreach: choicesRight :idx rightExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
344 res append: (opAnd: leftExp rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
345 res append: (opOr: leftExp rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
346 res append: (opXor: leftExp rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
347 res append: (plus: leftExp rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
348 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
349 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
350 numLeft <- numLeft + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
351 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
352 if: n > 3 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
353 numLeft <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
354 limitLeft <- n - 2 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
355 while: { numLeft < limitLeft } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
356 numMid <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
357 limitMid <- n - (1 + numLeft) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
358 while: { numMid < limitMid } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
359 numRight <- n - (1 + numLeft + numMid) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
360 choicesRight <- (allOfSize: numRight inFold?: infold?) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
361 choicesMid <- (allOfSize: numMid inFold?: infold?) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
362 foreach: (allOfSize: numLeft inFold?: infold?) :idx leftExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
363 foreach: choicesMid :idx midExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
364 foreach: choicesRight :idx rightExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
365 res append: (if0: leftExp then: midExp else: rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
366 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
367 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
368 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
369 numMid <- numMid + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
370 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
371 numLeft <- numLeft + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
372 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
373 if: n > 4 && infold? = 0 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
374 numSeq <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
375 limitSeq <- n - 3 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
376 while: { numSeq < limitSeq } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
377 numFun <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
378 limitFun <- n - (2 + numSeq) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
379 while: { numFun < limitFun } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
380 numStart <- n - (2 + numSeq + numFun) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
381 choicesStart <- (allOfSize: numStart inFold?: 1) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
382 choicesFun <- (allOfSize: numFun inFold?: 2) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
383 foreach: (allOfSize: numSeq inFold?: 1) :idx seqExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
384 foreach: choicesFun :idx funExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
385 foreach: choicesStart :idx startExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
386 res append: (fold: seqExp with: funExp startingAt: startExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
387 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
388 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
389 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
390 numFun <- numFun + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
391 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
392 numSeq <- numSeq + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
393 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
394 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
395 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
396 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
397 print: "Saving " . (string: n) . " at memo index: " . (string: (memo length)) . "\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
398 memo append: res |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
399 res |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
400 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
401 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
402 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
403 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
404 allOfSize <- :n { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
405 allOfSize: (n - 1) inFold?: 0 |
27
655d5b19333d
Add memoization support to program generator
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
406 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
407 |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
408 allOfSize:inFold?:withOps:needOps <- :n :infold? :ops :needed { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
409 if: n <= 7 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
410 unfiltered <- allOfSize: n inFold?: infold? |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
411 if: (needed) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
412 _filterTrees: unfiltered needed |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
413 } else: { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
414 unfiltered |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
415 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
416 } else: { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
417 res <- #[] |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
418 origops <- ops |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
419 if: (ops and _opTfold) > 0 { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
420 ops <- ops and _maskRemoveFold |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
421 } else: { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
422 if: (ops and _opNot) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
423 foreach: (allOfSize: n - 1 inFold?: infold? withOps: ops needOps: (needed and _opNotMask)) :idx exp { |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
424 res append: (opNot: exp) |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
425 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
426 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
427 if: (ops and _opShl1) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
428 foreach: (allOfSize: n - 1 inFold?: infold? withOps: ops needOps: (needed and _opShl1Mask)) :idx exp { |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
429 res append: (shl1: exp) |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
430 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
431 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
432 if: (ops and _opShr1) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
433 foreach: (allOfSize: n - 1 inFold?: infold? withOps: ops needOps: (needed and _opShr1Mask)) :idx exp { |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
434 res append: (shr1: exp) |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
435 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
436 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
437 if: (ops and _opShr4) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
438 foreach: (allOfSize: n - 1 inFold?: infold? withOps: ops needOps: (needed and _opShr4Mask)) :idx exp { |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
439 res append: (shr4: exp) |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
440 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
441 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
442 if: (ops and _opShr16) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
443 foreach: (allOfSize: n - 1 inFold?: infold? withOps: ops needOps: (needed and _opShr16Mask)) :idx exp { |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
444 res append: (shr16: exp) |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
445 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
446 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
447 numLeft <- 1 |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
448 argTotal <- n - 1 |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
449 if: (ops and (_opAnd or _opOr or _opXor or _opPlus)) > 0 { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
450 while: { numLeft < argTotal } do: { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
451 numRight <- argTotal - numLeft |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
452 choicesRight <- (allOfSize: numRight inFold?: infold? withOps: ops needOps: 0) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
453 foreach: (allOfSize: numLeft inFold?: infold? withOps: ops needOps: 0) :idx leftExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
454 if: (ops and _opAnd) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
455 foreach: choicesRight :idx rightExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
456 newop <- (opAnd: leftExp rightExp) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
457 if: needed = 0 || (((newop operators) and needed) xor needed) = 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
458 res append: newop |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
459 } |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
460 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
461 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
462 if: (ops and _opOr) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
463 foreach: choicesRight :idx rightExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
464 newop <- (opOr: leftExp rightExp) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
465 if: needed = 0 || (((newop operators) and needed) xor needed) = 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
466 res append: newop |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
467 } |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
468 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
469 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
470 if: (ops and _opXor) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
471 foreach: choicesRight :idx rightExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
472 newop <- (opXor: leftExp rightExp) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
473 if: needed = 0 || (((newop operators) and needed) xor needed) = 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
474 res append: newop |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
475 } |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
476 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
477 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
478 if: (ops and _opPlus) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
479 foreach: choicesRight :idx rightExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
480 newop <- (plus: leftExp rightExp) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
481 if: needed = 0 || (((newop operators) and needed) xor needed) = 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
482 res append: newop |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
483 } |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
484 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
485 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
486 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
487 numLeft <- numLeft + 1 |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
488 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
489 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
490 numLeft <- 1 |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
491 limitLeft <- n - 2 |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
492 if: (ops and _opIf0) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
493 while: { numLeft < limitLeft } do: { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
494 numMid <- 1 |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
495 limitMid <- n - (1 + numLeft) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
496 while: { numMid < limitMid } do: { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
497 numRight <- n - (1 + numLeft + numMid) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
498 choicesRight <- (allOfSize: numRight inFold?: infold? withOps: ops needOps: 0) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
499 choicesMid <- (allOfSize: numMid inFold?: infold? withOps: ops needOps: 0) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
500 foreach: (allOfSize: numLeft inFold?: infold? withOps: ops needOps: 0) :idx leftExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
501 foreach: choicesMid :idx midExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
502 foreach: choicesRight :idx rightExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
503 newop <- (if0: leftExp then: midExp else: rightExp) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
504 if: needed = 0 || (((newop operators) and needed) xor needed) = 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
505 res append: newop |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
506 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
507 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
508 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
509 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
510 numMid <- numMid + 1 |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
511 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
512 numLeft <- numLeft + 1 |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
513 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
514 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
515 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
516 if: infold? = 0 && (origops and (_opFold or _opTfold)) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
517 numSeq <- 1 |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
518 limitSeq <- n - 3 |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
519 oldlen <- res length |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
520 while: { numSeq < limitSeq } do: { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
521 numFun <- 1 |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
522 limitFun <- n - (2 + numSeq) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
523 while: { numFun < limitFun } do: { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
524 numStart <- n - (2 + numSeq + numFun) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
525 choicesStart <- false |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
526 choicesToFold <- false |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
527 choicesFun <- false |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
528 if: (origops and _opTfold) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
529 choicesStart <- #[zero] |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
530 choicesToFold <- #[input] |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
531 choicesFun <- (allOfSize: numFun inFold?: 2 withOps: ops needOps: (needed and _maskRemoveFold)) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
532 } else: { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
533 choicesStart <- (allOfSize: numStart inFold?: 1 withOps: ops needOps: 0) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
534 choicesToFold <- (allOfSize: numSeq inFold?: 1 withOps: ops needOps: 0) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
535 choicesFun <- (allOfSize: numFun inFold?: 2 withOps: ops needOps: 0) |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
536 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
537 foreach: choicesToFold :idx seqExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
538 foreach: choicesFun :idx funExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
539 foreach: choicesStart :idx startExp { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
540 if: (origops and _opFold) > 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
541 newop <- fold: seqExp with: funExp startingAt: startExp |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
542 if: needed = 0 || (((newop operators) and needed) xor needed) = 0 { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
543 res append: newop |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
544 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
545 } else: { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
546 mtf <- fold: seqExp with: funExp startingAt: startExp |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
547 if: (mtf isTfold?) { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
548 res append: mtf |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
549 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
550 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
551 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
552 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
553 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
554 numFun <- numFun + 1 |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
555 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
556 numSeq <- numSeq + 1 |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
557 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
558 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
559 res |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
560 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
561 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
562 |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
563 allOfSize:withOps <- :size strops { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
564 ops <- strops fold: 0 with: :acc el { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
565 acc or (_names get: el withDefault: 0) |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
566 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
567 allOfSize: (size - 1) inFold?: 0 withOps: ops needOps: ops |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
568 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
569 |
53
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
570 allWithMaxSize <- :size { |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
571 res <- #[] |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
572 n <- 3 |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
573 while: {n <= size} do: { |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
574 foreach: (allOfSize: n) :idx el{ |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
575 res append: el |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
576 } |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
577 n <- n + 1 |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
578 } |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
579 res |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
580 } |
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
581 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
582 filterTrees <- :trees strops { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
583 ops <- strops fold: 0 with: :acc el { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
584 acc or (_names get: el withDefault: 0) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
585 } |
56
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
586 _filterTrees: trees ops |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
587 } |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
588 _filterTrees <- :trees ops { |
f864792a1b17
Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
589 filtered <- #[] |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
590 if: (ops and _opTfold) > 0 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
591 foreach: trees :idx tree { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
592 if: (tree isTfold?) { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
593 if: (tree operators) and _maskRemoveFold = ops and _maskRemoveFold { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
594 filtered append: tree |
9
0ccebdbc3e80
Add support for generating programs that contain fold. Make the desired program size a command line argument.
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
595 } |
0ccebdbc3e80
Add support for generating programs that contain fold. Make the desired program size a command line argument.
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
596 } |
8
3f0172ceab81
Add support for generating programs with if0, thus allowing us to generate all programs up to size 5.
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
597 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
598 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
599 foreach: trees :idx tree { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
600 if: (tree operators) = ops { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
601 filtered append: tree |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
602 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
603 } |
7
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
604 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
605 filtered |
7
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
606 } |
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
607 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
608 } |
7
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
609 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
610 test <- :prog { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
611 print: (string: prog) . "\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
612 print: "Operators: " . (hex: ((prog root) operators)) . "\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
613 if: ((prog root) isTfold?) { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
614 print: "TFold!\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
615 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
616 //parser doesn''t currently like vertical whitespace in arays so |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
617 //this needs to be on a single line until that bug is fixed |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
618 vals <- #[0u64 1u64 2u64 3u64 0x30001u64 0x50015u64 (lshift: 0x11223344u64 by: 32u64) or 0x55667788u64] |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
619 foreach: vals :idx val { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
620 print: "p(0x" . (hex: val) . ") = 0x" . (hex: (prog run: val)) . "\n" |
7
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
621 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
622 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
623 |
54 | 624 main <- :args { |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
625 //test: (program gentestprog) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
626 //test: (program exampleprog) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
627 size <- 3 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
628 if: (args length) > 1 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
629 size <- int32: (args get: 1) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
630 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
631 if: size >= 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
632 prog <- program |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
633 ops <- #[] |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
634 if: (args length) > 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
635 ops <- (args get: 2) splitOn: "," |
43
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
636 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
637 trees <- #[] |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
638 if: (ops length) > 0 { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
639 if: size < 9 { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
640 trees <- (prog allOfSize: size) |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
641 trees <- prog filterTrees: trees ops |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
642 } else: { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
643 trees <- (prog allOfSize: size withOps: ops) |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
644 } |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
645 } else: { |
96b2fcb746bf
Add support for generating programs with only a certain set of operators to allow work with slightly larger problem sizes
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
646 trees <- (prog allOfSize: size) |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
647 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
648 foreach: trees :idx tree { |
53
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
649 prog root!: tree |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
650 test: prog |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
651 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
652 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
653 0 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
654 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
655 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
656 } |
53
0f8adc187d29
allWithMaxSize seems to work, will clean next commit
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
657 |