Mercurial > repos > icfp2013
comparison src/bv.tp @ 7:301f16245955
Add support for generating all programs up to size 3 inclusive
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 09 Aug 2013 00:01:05 -0700 |
parents | 538440e1c3d2 |
children | 3f0172ceab81 |
comparison
equal
deleted
inserted
replaced
6:aac89683606e | 7:301f16245955 |
---|---|
155 | 155 |
156 exampleprog <- { | 156 exampleprog <- { |
157 root <- fold: input with: (opOr: val acc) startingAt: zero | 157 root <- fold: input with: (opOr: val acc) startingAt: zero |
158 self | 158 self |
159 } | 159 } |
160 | |
161 //TODO: memoize this to improve runtime for large n | |
162 allOfSize:inFold? <- :n :infold? { | |
163 if: n = 1 { | |
164 res <- #[one zero input] | |
165 if: infold? { | |
166 res append: acc | |
167 res append: val | |
168 } | |
169 res | |
170 } else: { | |
171 res <- #[] | |
172 foreach: (allOfSize: n - 1 inFold?: infold?) :idx exp { | |
173 res append: (opNot: exp) | |
174 res append: (shl1: exp) | |
175 res append: (shr1: exp) | |
176 res append: (shr4: exp) | |
177 res append: (shr16: exp) | |
178 } | |
179 if: n > 2 { | |
180 numLeft <- 1 | |
181 argTotal <- n - 1 | |
182 while: { numLeft < argTotal } do: { | |
183 numRight <- argTotal - numLeft | |
184 choicesRight <- (allOfSize: numRight inFold?: infold?) | |
185 foreach: (allOfSize: numLeft inFold?: infold?) :idx leftExp { | |
186 foreach: choicesRight :idx rightExp { | |
187 res append: (opAnd: leftExp rightExp) | |
188 res append: (opOr: leftExp rightExp) | |
189 res append: (opXor: leftExp rightExp) | |
190 res append: (plus: leftExp rightExp) | |
191 } | |
192 } | |
193 numLeft <- numLeft + 1 | |
194 } | |
195 } | |
196 res | |
197 } | |
198 } | |
199 | |
200 allOfSize <- :n { | |
201 allOfSize: n inFold?: false | |
202 } | |
160 } | 203 } |
161 } | 204 } |
162 | 205 |
163 test <- :prog { | 206 test <- :prog { |
164 print: (string: prog) . "\n" | 207 print: (string: prog) . "\n" |
171 } | 214 } |
172 | 215 |
173 main <- { | 216 main <- { |
174 test: (program gentestprog) | 217 test: (program gentestprog) |
175 test: (program exampleprog) | 218 test: (program exampleprog) |
219 prog <- program | |
220 foreach: (prog allOfSize: 3) :idx tree { | |
221 prog root! tree | |
222 test: prog | |
223 } | |
176 } | 224 } |
177 } | 225 } |