Ultima attività 1735630099

Revisione 37f11710d7eeeac892c48cfb660b40b59d02a317

derp.comp.js Raw Playground
1return function() {
2 let min = Math.min; var max = Math.max; var huge = Number.MAX_SAFE_INTEGER;
3 let self = { state: { strings: [], slots: {} } };
4
5
6 self.counters = {
7 "loop": 1,
8 }
9
10 function match(self, counters) {
11
12 console.log(Object.entries(counters).filter(([,v])=>v>0).map(([k,v]) => `${k} :: ${v}`).join('\n') );
13 console.log(self.state.strings);
14 console.log(self.state.slots);
15 if (counters["push string"] > 0) {
16 self.state.strings.push(self.string_constants[counters["push string"]-1]);
17 counters["push string"] = 0;
18 return true;
19 }
20
21 if (counters["dx"] > 0 && counters["-dx"] > 0) {
22 let acc = huge;
23 acc = min(acc, counters["dx"] || 0);
24 acc = min(acc, counters["-dx"] || 0);
25 counters["dx"] = max((counters["dx"] || 0) - acc, 0);
26 counters["-dx"] = max((counters["-dx"] || 0) - acc, 0);
27 return true;
28 }
29 if (counters["dy"] > 0 && counters["-dy"] > 0) {
30 let acc = huge;
31 acc = min(acc, counters["dy"] || 0);
32 acc = min(acc, counters["-dy"] || 0);
33 counters["dy"] = max((counters["dy"] || 0) - acc, 0);
34 counters["-dy"] = max((counters["-dy"] || 0) - acc, 0);
35 return true;
36 }
37 if (counters["get dy"] > 0 && counters["W pressed"] > 0) {
38 let acc = huge;
39 acc = min(acc, counters["get dy"] || 0);
40 acc = min(acc, counters["W pressed"] || 0);
41 counters["get dy"] = max((counters["get dy"] || 0) - acc, 0);
42 counters["W pressed"] = max((counters["W pressed"] || 0) - acc, 0);
43 counters["-dy"] = (counters["-dy"] || 0) + acc * 1;
44 counters["get dy"] = (counters["get dy"] || 0) + acc * 1;
45 return true;
46 }
47 if (counters["get dy"] > 0 && counters["S pressed"] > 0) {
48 let acc = huge;
49 acc = min(acc, counters["get dy"] || 0);
50 acc = min(acc, counters["S pressed"] || 0);
51 counters["get dy"] = max((counters["get dy"] || 0) - acc, 0);
52 counters["S pressed"] = max((counters["S pressed"] || 0) - acc, 0);
53 counters["dy"] = (counters["dy"] || 0) + acc * 1;
54 return true;
55 }
56 if (counters["get dx"] > 0 && counters["A pressed"] > 0) {
57 let acc = huge;
58 acc = min(acc, counters["get dx"] || 0);
59 acc = min(acc, counters["A pressed"] || 0);
60 counters["get dx"] = max((counters["get dx"] || 0) - acc, 0);
61 counters["A pressed"] = max((counters["A pressed"] || 0) - acc, 0);
62 counters["-dx"] = (counters["-dx"] || 0) + acc * 1;
63 counters["get dx"] = (counters["get dx"] || 0) + acc * 1;
64 return true;
65 }
66 if (counters["get dx"] > 0 && counters["D pressed"] > 0) {
67 let acc = huge;
68 acc = min(acc, counters["get dx"] || 0);
69 acc = min(acc, counters["D pressed"] || 0);
70 counters["get dx"] = max((counters["get dx"] || 0) - acc, 0);
71 counters["D pressed"] = max((counters["D pressed"] || 0) - acc, 0);
72 counters["dx"] = (counters["dx"] || 0) + acc * 1;
73 return true;
74 }
75 if (counters["loop"] > 0) {
76 let acc = counters["loop"] || 0;
77 counters["loop"] = max((counters["loop"] || 0) - acc, 0);
78 counters["input"] = (counters["input"] || 0) + acc * 1;
79 counters["player"] = (counters["player"] || 0) + acc * 1;
80 counters["enemies"] = (counters["enemies"] || 0) + acc * 1;
81 counters["cull"] = (counters["cull"] || 0) + acc * 1;
82 counters["re-loop"] = (counters["re-loop"] || 0) + acc * 1;
83 return true;
84 }
85 if (counters["input"] > 0) {
86 let acc = counters["input"] || 0;
87 counters["input"] = max((counters["input"] || 0) - acc, 0);
88 counters["poll"] = (counters["poll"] || 0) + acc * 1;
89 return true;
90 }
91 if (counters["player"] > 0) {
92 let acc = counters["player"] || 0;
93 counters["player"] = max((counters["player"] || 0) - acc, 0);
94 counters["get dx:max"] = (counters["get dx:max"] || 0) + acc * 1;
95 counters["get dy:max"] = (counters["get dy:max"] || 0) + acc * 1;
96 return true;
97 }
98 if (counters["update enemy"] > 0) {
99 let acc = counters["update enemy"] || 0;
100 counters["update enemy"] = max((counters["update enemy"] || 0) - acc, 0);
101 counters["track player"] = (counters["track player"] || 0) + acc * 1;
102 return true;
103 }
104 if (counters["enemies"] > 0 && counters["last enemy"] > 0) {
105 let acc = huge;
106 acc = min(acc, counters["enemies"] || 0);
107 acc = min(acc, counters["last enemy"] || 0);
108 counters["enemies"] = max((counters["enemies"] || 0) - acc, 0);
109 counters["last enemy"] = max((counters["last enemy"] || 0) - acc, 0);
110 return true;
111 }
112 if (counters["enemies"] > 0) {
113 let acc = counters["enemies"] || 0;
114 counters["enemies"] = max((counters["enemies"] || 0) - acc, 0);
115 counters["update enemy"] = (counters["update enemy"] || 0) + acc * 1;
116 counters["next enemy"] = (counters["next enemy"] || 0) + acc * 1;
117 return true;
118 }
119 if (counters["cull"] > 0) {
120 let acc = counters["cull"] || 0;
121 counters["cull"] = max((counters["cull"] || 0) - acc, 0);
122 counters["remove dead enemies"] = (counters["remove dead enemies"] || 0) + acc * 1;
123 return true;
124 }
125 if (counters["re-loop"] > 0) {
126 let acc = counters["re-loop"] || 0;
127 counters["re-loop"] = max((counters["re-loop"] || 0) - acc, 0);
128 counters["loop"] = (counters["loop"] || 0) + acc * 1;
129 return true;
130 }
131 if (counters["get dy"] > 0 && counters["W pressed"] > 0) {
132 let acc = huge;
133 acc = min(acc, counters["get dy"] || 0);
134 acc = min(acc, counters["W pressed"] || 0);
135 counters["get dy"] = max((counters["get dy"] || 0) - acc, 0);
136 counters["W pressed"] = max((counters["W pressed"] || 0) - acc, 0);
137 counters["-dy"] = (counters["-dy"] || 0) + acc * 1;
138 counters["get dy"] = (counters["get dy"] || 0) + acc * 1;
139 return true;
140 }
141 if (counters["get dy"] > 0 && counters["S pressed"] > 0) {
142 let acc = huge;
143 acc = min(acc, counters["get dy"] || 0);
144 acc = min(acc, counters["S pressed"] || 0);
145 counters["get dy"] = max((counters["get dy"] || 0) - acc, 0);
146 counters["S pressed"] = max((counters["S pressed"] || 0) - acc, 0);
147 counters["dy"] = (counters["dy"] || 0) + acc * 1;
148 return true;
149 }
150 if (counters["get dx"] > 0 && counters["A pressed"] > 0) {
151 let acc = huge;
152 acc = min(acc, counters["get dx"] || 0);
153 acc = min(acc, counters["A pressed"] || 0);
154 counters["get dx"] = max((counters["get dx"] || 0) - acc, 0);
155 counters["A pressed"] = max((counters["A pressed"] || 0) - acc, 0);
156 counters["-dx"] = (counters["-dx"] || 0) + acc * 1;
157 counters["get dx"] = (counters["get dx"] || 0) + acc * 1;
158 return true;
159 }
160 if (counters["get dx"] > 0 && counters["D pressed"] > 0) {
161 let acc = huge;
162 acc = min(acc, counters["get dx"] || 0);
163 acc = min(acc, counters["D pressed"] || 0);
164 counters["get dx"] = max((counters["get dx"] || 0) - acc, 0);
165 counters["D pressed"] = max((counters["D pressed"] || 0) - acc, 0);
166 counters["dx"] = (counters["dx"] || 0) + acc * 1;
167 return true;
168 }
169 if (counters["loop"] > 0) {
170 let acc = counters["loop"] || 0;
171 counters["loop"] = max((counters["loop"] || 0) - acc, 0);
172 counters["input"] = (counters["input"] || 0) + acc * 1;
173 counters["player"] = (counters["player"] || 0) + acc * 1;
174 counters["enemies"] = (counters["enemies"] || 0) + acc * 1;
175 counters["cull"] = (counters["cull"] || 0) + acc * 1;
176 counters["re-loop"] = (counters["re-loop"] || 0) + acc * 1;
177 return true;
178 }
179 if (counters["input"] > 0) {
180 let acc = counters["input"] || 0;
181 counters["input"] = max((counters["input"] || 0) - acc, 0);
182 counters["poll"] = (counters["poll"] || 0) + acc * 1;
183 return true;
184 }
185 if (counters["player"] > 0) {
186 let acc = counters["player"] || 0;
187 counters["player"] = max((counters["player"] || 0) - acc, 0);
188 counters["get dx:max"] = (counters["get dx:max"] || 0) + acc * 1;
189 counters["get dy:max"] = (counters["get dy:max"] || 0) + acc * 1;
190 return true;
191 }
192 if (counters["update enemy"] > 0) {
193 let acc = counters["update enemy"] || 0;
194 counters["update enemy"] = max((counters["update enemy"] || 0) - acc, 0);
195 counters["track player"] = (counters["track player"] || 0) + acc * 1;
196 return true;
197 }
198 if (counters["enemies"] > 0 && counters["last enemy"] > 0) {
199 let acc = huge;
200 acc = min(acc, counters["enemies"] || 0);
201 acc = min(acc, counters["last enemy"] || 0);
202 counters["enemies"] = max((counters["enemies"] || 0) - acc, 0);
203 counters["last enemy"] = max((counters["last enemy"] || 0) - acc, 0);
204 return true;
205 }
206 if (counters["enemies"] > 0) {
207 let acc = counters["enemies"] || 0;
208 counters["enemies"] = max((counters["enemies"] || 0) - acc, 0);
209 counters["update enemy"] = (counters["update enemy"] || 0) + acc * 1;
210 counters["next enemy"] = (counters["next enemy"] || 0) + acc * 1;
211 return true;
212 }
213 if (counters["cull"] > 0) {
214 let acc = counters["cull"] || 0;
215 counters["cull"] = max((counters["cull"] || 0) - acc, 0);
216 counters["remove dead enemies"] = (counters["remove dead enemies"] || 0) + acc * 1;
217 return true;
218 }
219 if (counters["re-loop"] > 0) {
220 let acc = counters["re-loop"] || 0;
221 counters["re-loop"] = max((counters["re-loop"] || 0) - acc, 0);
222 counters["loop"] = (counters["loop"] || 0) + acc * 1;
223 return true;
224 }
225 return false;
226}
227 self.run = function() {
228 let counters = self.counters;
229 while(match(self, counters)){};
230 };
231 self.log_state = function() {
232 return Object.entries(self.counters).map(([k, v]) => `${k} :: ${v}`).join('\n');
233 }; return self;
234};
derp.comp.tiny.js Raw Playground
1return function() {
2 let min = Math.min; var max = Math.max; var huge = Number.MAX_SAFE_INTEGER;
3 let self = { state: { strings: [], slots: {} } };
4
5
6 self._ = [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
7
8 function match(self, _) {
9
10 console.log(Object.entries(_).filter(([,v])=>v>0).map(([k,v]) => `${k} :: ${v}`).join('\n') );
11 console.log(self.state.strings);
12 console.log(self.state.slots);
13
14 if (_[0] > 0 && _[1] > 0) {
15 let acc = min(_[0],_[1])
16 _[0] = max(_[0] - acc, 0);
17 _[1] = max(_[1] - acc, 0);
18 return true;
19 }
20 if (_[2] > 0 && _[3] > 0) {
21 let acc = min(_[2],_[3])
22 _[2] = max(_[2] - acc, 0);
23 _[3] = max(_[3] - acc, 0);
24 return true;
25 }
26 if (_[4] > 0 && _[5] > 0) {
27 let acc = min(_[4],_[5])
28 _[4] = max(_[4] - acc, 0);
29 _[5] = max(_[5] - acc, 0);
30 _[3] += acc * 1;
31 _[4] += acc * 1;
32 return true;
33 }
34 if (_[4] > 0 && _[6] > 0) {
35 let acc = min(_[4],_[6])
36 _[4] = max(_[4] - acc, 0);
37 _[6] = max(_[6] - acc, 0);
38 _[2] += acc * 1;
39 return true;
40 }
41 if (_[7] > 0 && _[8] > 0) {
42 let acc = min(_[7],_[8])
43 _[7] = max(_[7] - acc, 0);
44 _[8] = max(_[8] - acc, 0);
45 _[1] += acc * 1;
46 _[7] += acc * 1;
47 return true;
48 }
49 if (_[7] > 0 && _[9] > 0) {
50 let acc = min(_[7],_[9])
51 _[7] = max(_[7] - acc, 0);
52 _[9] = max(_[9] - acc, 0);
53 _[0] += acc * 1;
54 return true;
55 }
56 if (_[10] > 0) {
57 let acc = _[10];
58 _[10] = max(_[10] - acc, 0);
59 _[11] += acc * 1;
60 _[12] += acc * 1;
61 _[13] += acc * 1;
62 _[14] += acc * 1;
63 _[15] += acc * 1;
64 return true;
65 }
66 if (_[11] > 0) {
67 let acc = _[11];
68 _[11] = max(_[11] - acc, 0);
69 _[16] += acc * 1;
70 return true;
71 }
72 if (_[12] > 0) {
73 let acc = _[12];
74 _[12] = max(_[12] - acc, 0);
75 _[17] += acc * 1;
76 _[18] += acc * 1;
77 return true;
78 }
79 if (_[19] > 0) {
80 let acc = _[19];
81 _[19] = max(_[19] - acc, 0);
82 _[20] += acc * 1;
83 return true;
84 }
85 if (_[13] > 0 && _[21] > 0) {
86 let acc = min(_[13],_[21])
87 _[13] = max(_[13] - acc, 0);
88 _[21] = max(_[21] - acc, 0);
89 return true;
90 }
91 if (_[13] > 0) {
92 let acc = _[13];
93 _[13] = max(_[13] - acc, 0);
94 _[19] += acc * 1;
95 _[22] += acc * 1;
96 return true;
97 }
98 if (_[14] > 0) {
99 let acc = _[14];
100 _[14] = max(_[14] - acc, 0);
101 _[23] += acc * 1;
102 return true;
103 }
104 if (_[15] > 0) {
105 let acc = _[15];
106 _[15] = max(_[15] - acc, 0);
107 _[10] += acc * 1;
108 return true;
109 }
110 if (_[4] > 0 && _[5] > 0) {
111 let acc = min(_[4],_[5])
112 _[4] = max(_[4] - acc, 0);
113 _[5] = max(_[5] - acc, 0);
114 _[3] += acc * 1;
115 _[4] += acc * 1;
116 return true;
117 }
118 if (_[4] > 0 && _[6] > 0) {
119 let acc = min(_[4],_[6])
120 _[4] = max(_[4] - acc, 0);
121 _[6] = max(_[6] - acc, 0);
122 _[2] += acc * 1;
123 return true;
124 }
125 if (_[7] > 0 && _[8] > 0) {
126 let acc = min(_[7],_[8])
127 _[7] = max(_[7] - acc, 0);
128 _[8] = max(_[8] - acc, 0);
129 _[1] += acc * 1;
130 _[7] += acc * 1;
131 return true;
132 }
133 if (_[7] > 0 && _[9] > 0) {
134 let acc = min(_[7],_[9])
135 _[7] = max(_[7] - acc, 0);
136 _[9] = max(_[9] - acc, 0);
137 _[0] += acc * 1;
138 return true;
139 }
140 if (_[10] > 0) {
141 let acc = _[10];
142 _[10] = max(_[10] - acc, 0);
143 _[11] += acc * 1;
144 _[12] += acc * 1;
145 _[13] += acc * 1;
146 _[14] += acc * 1;
147 _[15] += acc * 1;
148 return true;
149 }
150 if (_[11] > 0) {
151 let acc = _[11];
152 _[11] = max(_[11] - acc, 0);
153 _[16] += acc * 1;
154 return true;
155 }
156 if (_[12] > 0) {
157 let acc = _[12];
158 _[12] = max(_[12] - acc, 0);
159 _[17] += acc * 1;
160 _[18] += acc * 1;
161 return true;
162 }
163 if (_[19] > 0) {
164 let acc = _[19];
165 _[19] = max(_[19] - acc, 0);
166 _[20] += acc * 1;
167 return true;
168 }
169 if (_[13] > 0 && _[21] > 0) {
170 let acc = min(_[13],_[21])
171 _[13] = max(_[13] - acc, 0);
172 _[21] = max(_[21] - acc, 0);
173 return true;
174 }
175 if (_[13] > 0) {
176 let acc = _[13];
177 _[13] = max(_[13] - acc, 0);
178 _[19] += acc * 1;
179 _[22] += acc * 1;
180 return true;
181 }
182 if (_[14] > 0) {
183 let acc = _[14];
184 _[14] = max(_[14] - acc, 0);
185 _[23] += acc * 1;
186 return true;
187 }
188 if (_[15] > 0) {
189 let acc = _[15];
190 _[15] = max(_[15] - acc, 0);
191 _[10] += acc * 1;
192 return true;
193 }
194 return false;
195}
196 self.run = function() {
197 let _ = self._;
198 while(match(self, _)){};
199 };
200 self.log_state = function() {
201 return Object.entries(self._).map(([k, v]) => `${k} :: ${v}`).join('\n');
202 }; return self;
203};
derp.nv Raw Playground
1| dx, -dx |
2| dy, -dy |
3
4| get dy, W pressed | -dy, get dy
5| get dy, S pressed | dy
6| get dx, A pressed | -dx, get dx
7| get dx, D pressed | dx
8
9
10| loop | input, player, enemies, cull, re-loop
11| input | poll
12| player | get dx:max, get dy:max
13
14|| loop
15
16| update enemy | track player
17| enemies, last enemy |
18| enemies | update enemy, next enemy
19
20| cull | remove dead enemies
21| re-loop | loop
22
23| get dy, W pressed | -dy, get dy
24| get dy, S pressed | dy
25| get dx, A pressed | -dx, get dx
26| get dx, D pressed | dx
27
28
29| loop | input, player, enemies, cull, re-loop
30| input | poll
31| player | get dx:max, get dy:max
32
33| update enemy | track player
34| enemies, last enemy |
35| enemies | update enemy, next enemy
36
37| cull | remove dead enemies
38| re-loop | loop