{"ScriptPreparationCode":"// ---- setup ----\r\nconst N = 100;\r\nconst catalogue = Array.from({ length: N }, (_, i) =\u003E i \u002B 1);\r\n\r\n// three licences in the realm carry rules\r\nconst rules = {\r\n 1: { type: \u0027block\u0027, licences: [40, 50] },\r\n 30: { type: \u0027block\u0027, licences: [2, 70] },\r\n 90: { type: \u0027block\u0027, licences: [18, 19] },\r\n};\r\nfor (const r of Object.values(rules)) r.set = new Set(r.licences);\r\n\r\n// 5 purchases \u002B 20 free licences; only ONE of the 25 carries a rule\r\nconst owned = [1, 101, 102, 103, 104,\r\n ...Array.from({ length: 20 }, (_, i) =\u003E 200 \u002B i)];\r\nconst ownedSet = new Set(owned);\r\n\r\n// built once at load\r\nconst blockedBy = {};\r\nfor (const [ownerId, rule] of Object.entries(rules))\r\n for (const t of rule.licences) (blockedBy[t] ??= []).push(Number(ownerId));\r\n\r\nconst licencesWithRules = new Set(Object.keys(rules).map(Number));","TestCases":[{"Name":"1","Code":"// case 1 \u2014 pre-PR\r\ncatalogue.filter(l =\u003E {\r\n const blockers = blockedBy[l];\r\n return !blockers || !blockers.some(b =\u003E ownedSet.has(b));\r\n});","IsDeferred":false},{"Name":"2","Code":"// case 2 \u2014 PR in flight ~100 \u00D7 25 = 2,500 iterations\r\ncatalogue.filter(l =\u003E\r\n owned.every(id =\u003E {\r\n const rule = rules[id];\r\n if (!rule) return true;\r\n return !rule.set.has(l);\r\n })\r\n);","IsDeferred":false},{"Name":"3","Code":"// case 3 \u2014 proposed ~25 \u002B 2 \u002B 100 = 127 iterations\r\nconst relevant = owned.filter(id =\u003E licencesWithRules.has(id));\r\nif (relevant.length === 0) return catalogue;\r\n\r\nconst offLimits = new Set();\r\nfor (const id of relevant)\r\n for (const t of rules[id].licences) offLimits.add(t);\r\n\r\ncatalogue.filter(l =\u003E !offLimits.has(l));","IsDeferred":false}],"UseTinyBench":false}