Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var a;
- var g;
- var _g = depth => (g = (n = 0, p = 0.1666) => (a = Math.random()) >= (1 - p) || n >= depth ? { type : 'num', value: Math.floor(Math.random() * 100 - 50) } :
- (s => { switch (s) {
- case 0: return { type: 'plus', value: [g(n+1), g(n+1)] };
- case 1: return { type: 'minus', value: [g(n+1), g(n+1)] };
- case 2: return { type: 'mult', value: [g(n+1), g(n+1)] };
- case 3: return { type: 'divide', value: [g(n+1), g(n+1)] };
- case 4: return { type: 'max', value: Array.from(Array(Math.floor(Math.random() * 5)).keys()).map(() => g(n+1)) };
- }})(Math.floor(a / ((1 - p) / 5))));
- var f = g => [
- (function toString(e) {
- switch (e.type) {
- case 'num': return `NUM (${e.value})`;
- case 'plus': return `PLUS (${toString(e.value[0])}, ${toString(e.value[1])})`;
- case 'minus': return `MINUS (${toString(e.value[0])}, ${toString(e.value[1])})`;
- case 'mult': return `MULT (${toString(e.value[0])}, ${toString(e.value[1])})`;
- case 'divide': return `DIVIDE (${toString(e.value[0])}, ${toString(e.value[1])})`;
- case 'max': return `MAX [${e.value.map(v => toString(v)).join('; ')}]`
- }
- })(g),
- (function eval(e) {
- switch (e.type) {
- case 'num': return e.value;
- case 'plus': return eval(e.value[0]) + eval(e.value[1]);
- case 'minus': return eval(e.value[0]) - eval(e.value[1]);
- case 'mult': return eval(e.value[0]) * eval(e.value[1]);
- case 'divide': var l = eval(e.value[1]); if (l === 0) throw Error('division by zero');
- var answer = eval(e.value[0]) / eval(e.value[1])
- return answer > 0 ? Math.floor(answer) : Math.ceil(answer);
- case 'max': return e.value.length ? Math.max(... e.value.map(v => eval(v))) : 0
- }
- })(g),
- g
- ];
- function generate(depth = 5) {
- var i;
- do {
- try {
- i = f(_g(depth)());
- } catch (err) {
- i = null;
- }
- } while (i === null);
- return i;
- }
- Array.from(Array(10).keys()).map(() => generate(1)).map(([e, a]) => `EVAL (${e}, "${e}", ${a})`).join('\n; ');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement