{"ScriptPreparationCode":"window.zigzag = (n, init, shift, push)=\u003E{\r\n let seed = 12345;\r\n let size = 0;\r\n let last = -1;\r\n\r\n for (let i = 0; i \u003C n; i\u002B\u002B) {\r\n if (size \u003E 0 \u0026\u0026 (seed \u0026 20480) == 0) { // 2^12\u002B2^14=20480\r\n last = shift(init);\r\n size--;\r\n } else {\r\n push(init,seed);\r\n size\u002B\u002B;\r\n }\r\n seed = (seed * 1664525 \u002B 1013904223) \u0026 2147483647;\r\n }\r\n if (last !== 1508974062) alert(\u0022Assertion Failed!\u0022);\r\n}\r\n\r\n// 2 Stack\r\nwindow.stack_shift = x=\u003E{\r\n if (x[0].length == 0){\r\n x[0] = x[1];\r\n x[1] = [];\r\n x[0].reverse();\r\n }\r\n return x[0].pop();\r\n}\r\n\r\nwindow.stack_push = (x,v)=\u003E{\r\n x[1].push(v);\r\n}\r\n\r\n// Ring Buffer\r\nwindow.ring_shift = (a) =\u003E {\r\n const res = a.data[a.head];\r\n a.head = (a.head \u002B 1) % a.data.length;\r\n return res;\r\n}\r\n\r\n\r\nwindow.ring_push = (a,v)=\u003E{\r\n a.data[a.tail] = v;\r\n a.tail = (a.tail \u002B 1) % a.data.length;\r\n}\r\n\r\nwindow.ring_init = (r) =\u003E {return {data: new Array(r), head:0, tail: 0}};\r\n\r\nwindow.int32array_init = (r) =\u003E {return {data: new Int32Array(r), head:0, tail: 0}};\r\n\r\n\r\nwindow.n = 100000;","TestCases":[{"Name":"Array","Code":"zigzag(n, [], a=\u003Ea.shift(), (a,v)=\u003Ea.push(v))","IsDeferred":false},{"Name":"Queue with 2 Stacks","Code":"zigzag(n, [[],[]], stack_shift, stack_push)","IsDeferred":false},{"Name":"Ring Buffer","Code":"zigzag(n, ring_init(n), ring_shift, ring_push)","IsDeferred":false},{"Name":"Ring Buffer (Int32Array)","Code":"zigzag(n, int32array_init(n), ring_shift, ring_push)","IsDeferred":false},{"Name":"(FYI) Rust \u002B wasm","Code":"last = window.wasm_zigzag(n);\r\nif (last !== 1508974062) alert(\u0022Assertion Failed!\u0022);","IsDeferred":false}]}