annotate src/solver.tp @ 56:f864792a1b17

Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
author Mike Pavone <pavone@retrodev.com>
date Sun, 11 Aug 2013 14:11:47 -0700
parents f4399a22a704
children c50f0fb9a717
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
1 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
2 _classifNode <- :vals prog startIdx child? {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
3 if: startIdx < (vals length) {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
4 _dict <- dict linear
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
5 _const <- #[]
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
6 _first <- false
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
7 _hasFirst? <- false
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
8 _val <- vals get: startIdx
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
9 #{
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
10 input <- { _val }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
11 valmap <- { _dict }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
12 allInputs <- { vals }
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
13 constantProgs <- { _const }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
14 append <- :tree {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
15 if: child? && (tree constant?) {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
16 _const append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
17 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
18 if: (_dict length) > 0 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
19 prog root!: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
20 res <- prog run: _val
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
21 node <- _dict get: res elseSet: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
22 _classifNode: vals prog startIdx + 1 true
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
23 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
24 node append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
25 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
26 if: _hasFirst? {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
27 prog root!: _first
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
28 res <- prog run: _val
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
29 node <- _classifNode: vals prog startIdx + 1 true
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
30 _dict set: res node
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
31 node append: _first
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
32 append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
33 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
34 _first <- tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
35 _hasFirst? <- true
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
36 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
37 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
38 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
39 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
40 length <- {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
41 len <- _dict length
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
42 if: len = 0 && _hasFirst? {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
43 len <- 1
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
44 }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
45 len + (_const length)
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
46 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
47 printwithIndent <- :indent {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
48 print: indent . "Input: " . (hex: _val) . "\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
49 nextindent <- indent . " "
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
50 if: (_const length) > 0 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
51 print: indent . "Constants:\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
52 foreach: _const :idx val {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
53 print: nextindent . (string: val) . "\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
54 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
55 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
56 if: (_dict length) > 0 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
57 foreach: _dict :key val {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
58 print: indent . (hex: key) . " ->\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
59 val printwithIndent: nextindent
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
60 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
61 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
62 if: _hasFirst? {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
63 print: nextindent . (string: _first) . "\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
64 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
65 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
66 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
67 print <- {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
68 printwithIndent: ""
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
69 }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
70 findMatches:at <- :outputs :startIdx {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
71 outVal <- outputs get: startIdx
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
72 sub <- _dict get: outVal withDefault: #{
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
73 length <- { 0 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
74 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
75 res <- #[]
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
76 if: (sub length) > 0 {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
77 res <- sub findMatches: outputs at: (startIdx + 1)
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
78 cps <- sub constantProgs
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
79 if: (cps length) > 0 {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
80 isConstant <- true
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
81 cur <- 0
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
82 while: { isConstant && cur < (cps length)} do: {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
83 isConstant <- outVal = (outputs get: cur)
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
84 cur <- cur + 1
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
85 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
86 if: isConstant {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
87 foreach: cps :idx tree {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
88 res append: cps
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
89 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
90 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
91 }
40
1cadb591eef1 Fix bug that was causing the solver to not find certain matches
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
92 } else: {
1cadb591eef1 Fix bug that was causing the solver to not find certain matches
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
93 if: _hasFirst? {
1cadb591eef1 Fix bug that was causing the solver to not find certain matches
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
94 res append: _first
1cadb591eef1 Fix bug that was causing the solver to not find certain matches
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
95 }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
96 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
97 res
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
98 }
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
99 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
100 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
101 _arr <- #[]
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
102 #{
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
103 append <- :tree {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
104 _arr append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
105 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
106 length <- { _arr length }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
107 constantProgs <- { #[] }
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
108 printwithIndent <- :indent {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
109 print: indent . "No more values for these:\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
110 indent <- indent . " "
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
111 foreach: _arr :idx val {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
112 print: indent . (string: val) . "\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
113 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
114 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
115 print <- {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
116 printwithIndent: ""
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
117 }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
118 findMatches:at <- :outputs :startIdx {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
119 _arr
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
120 }
32
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
121 }
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
122 }
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
123 }
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
124 #{
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
125 classify <- :prog trees numTests {
50
f4399a22a704 Fix crash from calling srand during module initialization
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
126 (os srand: (os time))
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
127 testvals <- #[]
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
128 i <- 0
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
129 while: {i < numTests} do: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
130 i <- i + 1
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
131 testvals append: (uint64: (os rand64))
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
132 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
133 root <- _classifNode: testvals prog 0 false
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
134 foreach: trees :idx tree {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
135 root append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
136 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
137 root
32
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
138 }
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
139
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
140 solve:withAuth:andInfo:andProg <- :progId :authKey :info :prog {
49
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
141 statusCode <- 429
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
142 resp <- false
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
143 start <- 0
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
144 end <- 0
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
145 while: { statusCode = 429} do: {
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
146 start <- os time
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
147 resp <- (requests evalId: progId (info allInputs)) sendWithKey: authKey
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
148 end <- os time
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
149 if: (resp status) = "ok" {
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
150 statusCode <- 200
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
151 if: (end - start) < 4 {
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
152 os sleep: (4 - (end - start))
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
153 }
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
154 } else: {
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
155 statusCode <- resp httpCode
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
156 if: statusCode = 429 {
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
157 print: "API is pissed, waiting 20 seconds...\n"
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
158 os sleep: 20
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
159 }
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
160 }
48
855c05c9cae1 Updated myproblems.json. Some solver fixes
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
161 }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
162 if: (resp status) = "ok" {
48
855c05c9cae1 Updated myproblems.json. Some solver fixes
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
163 print: "Start: " . (string: start) . ", End: " . (string: start) . "Duration: " . (string: end - start) . "\n"
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
164 matches <- info findMatches: (resp outputs) at: 0
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
165 noSuccess <- true
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
166 cur <- 0
40
1cadb591eef1 Fix bug that was causing the solver to not find certain matches
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
167 if: (matches length) = 0 {
1cadb591eef1 Fix bug that was causing the solver to not find certain matches
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
168 print: "No matches? :(\n"
1cadb591eef1 Fix bug that was causing the solver to not find certain matches
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
169 print: info
1cadb591eef1 Fix bug that was causing the solver to not find certain matches
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
170 }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
171 while: { noSuccess && cur < (matches length) } do: {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
172 prog root!: (matches get: cur)
44
e795f7179456 Print some timestamps of request times in solver
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
173 gstart <- os time
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
174 gresp <- (requests guess: progId (string: prog)) sendWithKey: authKey
44
e795f7179456 Print some timestamps of request times in solver
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
175 gend <- os time
48
855c05c9cae1 Updated myproblems.json. Some solver fixes
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
176 print: "Start: " . (string: gstart) . ", End: " . (string: gend) . "Duration: " . (string: gend - gstart) . "\n"
855c05c9cae1 Updated myproblems.json. Some solver fixes
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
177 if: (gend - gstart) < 4 {
855c05c9cae1 Updated myproblems.json. Some solver fixes
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
178 os sleep: (4 - (gend - gstart))
855c05c9cae1 Updated myproblems.json. Some solver fixes
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
179 }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
180 if: (gresp status) = "win" {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
181 noSuccess <- false
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
182 } else: {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
183 if: (gresp status) = "mismatch" {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
184 failInput <- (gresp values) get: 0
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
185 failOutput <- (gresp values) get: 1
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
186 filtered <- #[]
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
187 foreach: matches :idx tree {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
188 prog root!: tree
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
189 if: (prog run: failInput) = failOutput {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
190 filtered append: tree
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
191 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
192 }
50
f4399a22a704 Fix crash from calling srand during module initialization
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
193 print: "Mismatch: went from " . (matches length) . " to " . (filtered length) . "\n"
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
194 matches <- filtered
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
195 if: (matches length) = 0 {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
196 print: "None of our programs actually matched 0x" . (hex: failOutput) ." with input 0x" . (hex: failInput) ." :(\n"
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
197 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
198 } else: {
49
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
199 if: (gresp httpCode) = 429 {
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
200 print: "API is pissed, waiting 20 seconds...\n"
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
201 os sleep: 20
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
202 } else: {
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
203 print: "Got message: " . (gresp message) . ", moving on\n"
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
204 cur <- cur + 1
8409af16d6e5 Sleep for 20 seconds when we receive a 429 response
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
205 }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
206 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
207 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
208 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
209 } else: {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
210 print: resp
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
211 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
212 }
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
213
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
214 main <- :args {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
215 size <- 3
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
216 if: (args length) > 1 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
217 size <- int32: (args get: 1)
32
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
218 }
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
219 prog <- bv program
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
220 if: size >= 2 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
221 numTests <- 0
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
222 if: (args length) > 2 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
223 numTests <- int32: (args get: 2)
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
224 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
225 if: numTests <= 0 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
226 numTests <- 16
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
227 }
56
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
228 trees <- #[]
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
229
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
230 if: (args length) > 3 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
231 ops <- (args get: 3) splitOn: ","
56
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
232 if: size < 10 {
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
233 trees <- prog filterTrees: (prog allOfSize: size) ops
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
234 } else: {
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
235 print: "Generating programs for operators: " . (ops fold: "" with: :acc el { acc . el }) . "\n"
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
236 trees <- prog allOfSize: size withOps: ops
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
237 print: "Generated " . (string: (trees length)) . " programs\n"
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
238 trees <- prog 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: 50
diff changeset
239 }
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
240 } else: {
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
241 trees <- (prog allOfSize: size)
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
242 }
56
f864792a1b17 Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
Mike Pavone <pavone@retrodev.com>
parents: 50
diff changeset
243 print: "Running classifier on " . (string: (trees length)) . " programs\n"
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
244 info <- classify: prog trees numTests
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
245 if: (args length) > 5 {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
246 progId <- (args get: 4)
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
247 authKey <- (args get: 5)
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
248
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
249 solve: progId withAuth: authKey andInfo: info andProg: prog
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
250 } else: {
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
251 print: info
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
252 }
32
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
253 }
38
cde3f5943cd4 Solver works!
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
254 0
32
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
255 }
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
256 }
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
257 }