{"ScriptPreparationCode":"function generateFunction () {\r\n\r\n let body = \u0022x\u0022;\r\n\r\n body \u002B= (Math.random () \u003E 0.5) ? \u0022*\u0022 : \u0022\u002B\u0022;\r\n \r\n body \u002B= Math.floor (1 \u002B Math.random () * 100);\r\n\r\n \r\n if (Math.random () \u003E 0.75)\r\n body = \u0022Math.min (\u0022 \u002B body \u002B \u0022,\u0022 \u002B Math.floor (1 \u002B Math.random () * 100) \u002B \u0022)\u0022;\r\n\r\n const parameters = [\u0022x\u0022];\r\n const expression = \u0022return \u0022 \u002B body \u002B \u0022;\u0022\r\n const fun = new Function (\u0022x\u0022, expression);\r\n fun.expression = expression\r\n fun.parameters = parameters;\r\n return fun;\r\n}\r\n\r\nconst compose = (f, g) =\u003E x =\u003E g(f(x));\r\n\r\nconst funs = [generateFunction ()];\r\nlet funComposed = funs[0];\r\nlet expression = funComposed.expression;\r\n\r\nconst len = 20;\r\nfor (let i = 1 ; i \u003C len ; i\u002B\u002B) {\r\n\r\n const nfun = generateFunction ();\r\n expression = nfun.expression.replace (\u0022return \u0022, \u0022x = \u0022) \u002B expression;\r\n console.log (\u0022i\u0022, i, nfun);\r\n funs.push (nfun);\r\n funComposed = compose (nfun, funComposed);\r\n}\r\n\r\nconst funMerged = new Function (\u0022x\u0022, expression);","TestCases":[{"Name":"array","Code":"let result = Math.floor (Math.random () * 100);\r\nfor (let i = funs.length - 1 ; i \u003E= 0 ; i--)\r\n\tresult = funs[i] (result);","IsDeferred":false},{"Name":"compose","Code":"let result = Math.floor (Math.random () * 100);\r\nresult = funComposed (result);","IsDeferred":false},{"Name":"merge","Code":"let result = Math.floor (Math.random () * 100);\r\nresult = funMerged (result);","IsDeferred":false}]}