{"ScriptPreparationCode":"\u0022use strict\u0022;\r\nfunction compareCountMaps(a, b) {\r\n for (const [val, count] of a) {\r\n if (b.get(val) !== count) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nwindow.orderInsensitiveArrayCompare = function(a, b, projector) {\r\n if (a === b) {\r\n return true;\r\n }\r\n const len = a.length;\r\n if (len !== b.length) {\r\n return false;\r\n }\r\n if (projector != null) {\r\n const mappedA = new Map();\r\n const mappedB = new Map();\r\n for (let i = 0; i \u003C len; i\u002B\u002B) {\r\n const valA = projector(a[i]);\r\n mappedA.set(valA, (mappedA.get(valA) || 0) \u002B 1);\r\n const valB = projector(b[i]);\r\n mappedB.set(valB, (mappedB.get(valB) || 0) \u002B 1);\r\n }\r\n return compareCountMaps(mappedA, mappedB);\r\n }\r\n else {\r\n const mappedA = new Map();\r\n const mappedB = new Map();\r\n for (let i = 0; i \u003C len; i\u002B\u002B) {\r\n const valA = a[i];\r\n mappedA.set(valA, (mappedA.get(valA) || 0) \u002B 1);\r\n const valB = b[i];\r\n mappedB.set(valB, (mappedB.get(valB) || 0) \u002B 1);\r\n }\r\n return compareCountMaps(mappedA, mappedB);\r\n }\r\n}\r\n\r\nwindow.loopAdd = function(a, b, projector) {\r\n if (a === b) {\r\n return true;\r\n }\r\n const aLength = a.length;\r\n if (aLength !== b.length) {\r\n return false;\r\n }\r\n if (projector == null) {\r\n const s = new Set(b);\r\n for (let i = 0; i \u003C aLength; i\u002B\u002B) {\r\n if (!s.has(a[i])) {\r\n return false;\r\n }\r\n }\r\n }\r\n else {\r\n const s = new Set();\r\n for (let i = 0; i \u003C aLength; i\u002B\u002B) {\r\n s.add(projector(b[i]));\r\n }\r\n const mapped = a.map(projector);\r\n for (let i = 0; i \u003C aLength; i\u002B\u002B) {\r\n if (!s.has(mapped[i])) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n\r\nwindow.data = [];\r\nfor (let i = 0; i \u003C 1000000; i\u002B\u002B) {\r\n window.data.push(String.fromCharCode(65 \u002B (i % 26)))\r\n}","TestCases":[{"Name":"10 (basic)","Code":"orderInsensitiveArrayCompare(data.slice(0,10), data.slice(0, 10));","IsDeferred":false},{"Name":"1000 (basic)","Code":"orderInsensitiveArrayCompare(data.slice(0,1000), data.slice(0, 1000));","IsDeferred":false},{"Name":"1000000 (basic)","Code":"orderInsensitiveArrayCompare(data.slice(), data.slice());","IsDeferred":false},{"Name":"10 (project)","Code":"orderInsensitiveArrayCompare(data.slice(0,10), data.slice(0, 10), a=\u003Ea.toLowerCase());","IsDeferred":false},{"Name":"1000 (project)","Code":"orderInsensitiveArrayCompare(data.slice(0,1000), data.slice(0, 1000), a=\u003Ea.toLowerCase());","IsDeferred":false},{"Name":"1000000 (project)","Code":"orderInsensitiveArrayCompare(data.slice(), data.slice(), a=\u003Ea.toLowerCase());","IsDeferred":false},{"Name":"loopAdd 10 (basic)","Code":"loopAdd(data.slice(0,10), data.slice(0, 10));","IsDeferred":false},{"Name":"loopAdd 1000 (basic)","Code":"loopAdd(data.slice(0,1000), data.slice(0, 1000));","IsDeferred":false},{"Name":"loopAdd 1000000 (basic)","Code":"loopAdd(data.slice(), data.slice());","IsDeferred":false},{"Name":"loopAdd 10 (project)","Code":"loopAdd(data.slice(0,10), data.slice(0, 10), a=\u003Ea.toLowerCase());","IsDeferred":false},{"Name":"loopAdd 1000 (project)","Code":"loopAdd(data.slice(0,1000), data.slice(0, 1000), a=\u003Ea.toLowerCase());","IsDeferred":false},{"Name":"loopAdd 1000000 (project)","Code":"loopAdd(data.slice(), data.slice(), a=\u003Ea.toLowerCase());","IsDeferred":false}]}