{"ScriptPreparationCode":"var encounters = {\r\n Argos: {\r\n name: \u0022Argos\u0022,\r\n encounterNames: [\u0022Argos\u0022],\r\n },\r\n ValtanG1: {\r\n name: \u0022Valtan Gate 1\u0022,\r\n encounterNames: [\r\n \u0022Dark Mountain Predator\u0022,\r\n \u0022Destroyer Lucas\u0022,\r\n \u0022Leader Lugaru\u0022,\r\n ],\r\n },\r\n ValtanG2: {\r\n name: \u0022Valtan Gate 2\u0022,\r\n encounterNames: [\u0022Demon Beast Commander Valtan\u0022],\r\n },\r\n VykasG1: {\r\n name: \u0022Vykas Gate 1\u0022,\r\n encounterNames: [\u0022Incubus Morphe\u0022, \u0022Nightmarish Morphe\u0022],\r\n },\r\n VykasG2: {\r\n name: \u0022Vykas Gate 2\u0022,\r\n encounterNames: [\u0022Covetous Devourer Vykas\u0022],\r\n },\r\n VykasG3: {\r\n name: \u0022Vykas Gate 3\u0022,\r\n encounterNames: [\u0022Covetous Legion Commander Vykas\u0022],\r\n },\r\n KakulG1: {\r\n name: \u0022Kakul-Saydon Gate 1\u0022,\r\n encounterNames: [\u0022Saydon\u0022],\r\n },\r\n KakulG2: {\r\n name: \u0022Kakul-Saydon Gate 2\u0022,\r\n encounterNames: [\u0022Kakul\u0022],\r\n },\r\n KakulG3: {\r\n name: \u0022Kakul-Saydon Gate 3\u0022,\r\n encounterNames: [\u0022Kakul-Saydon\u0022],\r\n },\r\n BrelshazaG1: {\r\n name: \u0022Brelshaza Gate 1\u0022,\r\n encounterNames: [\u0022Gehenna Helkasirs\u0022],\r\n },\r\n BrelshazaG2: {\r\n name: \u0022Brelshaza Gate 2\u0022,\r\n encounterNames: [\u0022Prokel\u0027s Spiritual Echo\u0022, \u0022Prokel\u0022],\r\n },\r\n BrelshazaG3: {\r\n name: \u0022Brelshaza Gate 3\u0022,\r\n encounterNames: [\u0022Ashtarot\u0022],\r\n },\r\n BrelshazaG4: {\r\n name: \u0022Brelshaza Gate 4\u0022,\r\n encounterNames: [\u0022Primordial Nightmare\u0022],\r\n },\r\n BrelshazaG5: {\r\n name: \u0022Brelshaza Gate 5\u0022,\r\n encounterNames: [\u0022Brelshaza, Monarch of Nightmares\u0022],\r\n },\r\n BrelshazaG6: {\r\n name: \u0022Brelshaza Gate 6\u0022,\r\n encounterNames: [\u0022Phantom Legion Commander Brelshaza\u0022],\r\n },\r\n /* GUARDIANS BELOW */\r\n Achates: {\r\n name: \u0022Achates\u0022,\r\n encounterNames: [\u0022Achates\u0022, \u0022Achates\u002B\u0022],\r\n },\r\n Alberhastic: {\r\n name: \u0022Alberhastic\u0022,\r\n encounterNames: [\u0022Alberhastic\u0022, \u0022Alberhastic\u002B\u0022],\r\n },\r\n \u0022Armored Nacrasena\u0022: {\r\n name: \u0022Armored Nacrasena\u0022,\r\n encounterNames: [\u0022Armored Nacrasena\u0022, \u0022Armored Nacrasena\u002B\u0022],\r\n },\r\n Caliligos: {\r\n name: \u0022Caliligos\u0022,\r\n encounterNames: [\u0022Caliligos\u0022],\r\n },\r\n Calventus: {\r\n name: \u0022Calventus\u0022,\r\n encounterNames: [\u0022Calventus\u0022, \u0022Calventus\u002B\u0022],\r\n },\r\n Chromanium: {\r\n name: \u0022Chromanium\u0022,\r\n encounterNames: [\u0022Chromanium\u0022, \u0022Chromanium\u002B\u0022],\r\n },\r\n \u0022Dark Legoros\u0022: {\r\n name: \u0022Dark Legoros\u0022,\r\n encounterNames: [\u0022Dark Legoros\u0022, \u0022Dark Legoros\u002B\u0022],\r\n },\r\n Deskaluda: {\r\n name: \u0022Deskaluda\u0022,\r\n encounterNames: [\u0022Deskaluda\u0022, \u0022Deskaluda\u002B\u0022],\r\n },\r\n \u0022Flame Fox Yoho\u0022: {\r\n name: \u0022Flame Fox Yoho\u0022,\r\n encounterNames: [\u0022Flame Fox Yoho\u0022, \u0022Flame Fox Yoho\u002B\u0022],\r\n },\r\n \u0022Frost Helgaia\u0022: {\r\n name: \u0022Frost Helgaia\u0022,\r\n encounterNames: [\u0022Frost Helgaia\u0022, \u0022Frost Helgaia\u002B\u0022],\r\n },\r\n Helgaia: {\r\n name: \u0022Helgaia\u0022,\r\n encounterNames: [\u0022Helgaia\u0022, \u0022Helgaia\u002B\u0022],\r\n },\r\n \u0022Icy Legoros\u0022: {\r\n name: \u0022Icy Legoros\u0022,\r\n encounterNames: [\u0022Icy Legoros\u0022, \u0022Icy Legoros\u002B\u0022],\r\n },\r\n Igrexion: {\r\n name: \u0022Igrexion\u0022,\r\n encounterNames: [\u0022Igrexion\u0022, \u0022Igrexion\u002B\u0022],\r\n },\r\n \u0022Lava Chromanium\u0022: {\r\n name: \u0022Lava Chromanium\u0022,\r\n encounterNames: [\u0022Lava Chromanium\u0022, \u0022Lava Chromanium\u002B\u0022],\r\n },\r\n Levanos: {\r\n name: \u0022Levanos\u0022,\r\n encounterNames: [\u0022Levanos\u0022, \u0022Levanos\u002B\u0022],\r\n },\r\n Lumerus: {\r\n name: \u0022Lumerus\u0022,\r\n encounterNames: [\u0022Lumerus\u0022, \u0022Lumerus\u002B\u0022],\r\n },\r\n Nacrasena: {\r\n name: \u0022Nacrasena\u0022,\r\n encounterNames: [\u0022Nacrasena\u0022, \u0022Nacrasena\u002B\u0022],\r\n },\r\n \u0022Night Fox Yoho\u0022: {\r\n name: \u0022Night Fox Yoho\u0022,\r\n encounterNames: [\u0022Night Fox Yoho\u0022, \u0022Night Fox Yoho\u002B\u0022],\r\n },\r\n Tytalos: {\r\n name: \u0022Tytalos\u0022,\r\n encounterNames: [\u0022Tytalos\u0022, \u0022Tytalos\u002B\u0022],\r\n },\r\n Urnil: {\r\n name: \u0022Urnil\u0022,\r\n encounterNames: [\u0022Urnil\u0022, \u0022Ur\u0027nil\u0022, \u0022Urnil\u002B\u0022],\r\n },\r\n Velganos: {\r\n name: \u0022Velganos\u0022,\r\n encounterNames: [\u0022Velganos\u0022, \u0022Velganos\u002B\u0022],\r\n },\r\n Vertus: {\r\n name: \u0022Vertus\u0022,\r\n encounterNames: [\u0022Vertus\u0022, \u0022Vertus\u002B\u0022],\r\n },\r\n Kungelanium: {\r\n name: \u0022Kungelanium\u0022,\r\n encounterNames: [\u0022Kungelanium\u0022, \u0022Kungelanium\u002B\u0022],\r\n },\r\n};\r\n\r\n\r\nvar randomProperty = function(obj) {\r\n var keys = Object.keys(obj);\r\n return obj[keys[keys.length * Math.random() \u003C\u003C 0]];\r\n};\r\n\r\nconst lookingFor = randomProperty(encounters).encounterNames[0];\r\n\r\nvar encounterNames = new Set();\r\nfor (let obj of Object.values(encounters)) {\r\n for (let name of obj.encounterNames)\r\n encounterNames.add(name);\r\n}\r\n\r\nvar encNamesArray = Array.from(encounterNames);\r\n\r\nfunction makeid(length) {\r\n let result = \u0027\u0027;\r\n const characters = \u0027ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\u0027;\r\n const charactersLength = characters.length;\r\n let counter = 0;\r\n while (counter \u003C length) {\r\n result \u002B= characters.charAt(Math.floor(Math.random() * charactersLength));\r\n counter \u002B= 1;\r\n }\r\n return result;\r\n}\r\n\r\nfunction getRandomInt(max) {\r\n return Math.floor(Math.random() * max);\r\n}\r\n\r\nfunction getEncounter() {\r\n let encName = randomProperty(encounters).encounterNames[0];\r\n return {\r\n name: encName,\r\n lastUpdate: getRandomInt(499128134),\r\n };\r\n}\r\n\r\n\r\n// generate entities\r\n\r\nvar entities = {};\r\n\r\nfor (let i = 0; i \u003C 20; i\u002B\u002B) {\r\n let name = makeid(8);\r\n let obj = {\r\n name: name,\r\n lastUpdate: getRandomInt(499128134),\r\n };\r\n entities[name] = obj;\r\n}\r\n\r\nlet enc = getEncounter();\r\nentities[enc.name] = enc;\r\n\r\nfor (let i = 0; i \u003C 20; i\u002B\u002B) {\r\n let name = makeid(8);\r\n let obj = {\r\n name: name,\r\n lastUpdate: getRandomInt(499128134),\r\n };\r\n entities[name] = obj;\r\n}\r\n\r\nenc = getEncounter();\r\nentities[enc.name] = enc;\r\n\r\nfor (let i = 0; i \u003C 20; i\u002B\u002B) {\r\n let name = makeid(8);\r\n let obj = {\r\n name: name,\r\n lastUpdate: getRandomInt(499128134),\r\n };\r\n entities[name] = obj;\r\n}\r\n\r\nenc = getEncounter();\r\nentities[enc.name] = enc;\r\n\r\nfor (let i = 0; i \u003C 20; i\u002B\u002B) {\r\n let name = makeid(8);\r\n let obj = {\r\n name: name,\r\n lastUpdate: getRandomInt(499128134),\r\n };\r\n entities[name] = obj;\r\n}\r\n\r\nenc = getEncounter();\r\nentities[enc.name] = enc;\r\n\r\nfor (let i = 0; i \u003C 20; i\u002B\u002B) {\r\n let name = makeid(8);\r\n let obj = {\r\n name: name,\r\n lastUpdate: getRandomInt(499128134),\r\n };\r\n entities[name] = obj;\r\n}\r\n\r\nenc = getEncounter();\r\nentities[enc.name] = enc;","TestCases":[{"Name":"old","Code":"if (entities) {\r\n const vals = Object.values(entities);\r\n if (vals.length \u003E 0) {\r\n for (const entity of vals.sort(\r\n (a, b) =\u003E b.lastUpdate - a.lastUpdate\r\n )) {\r\n for (const encounter of Object.values(encounters)) {\r\n if (encounter.encounterNames.includes(entity.name)) {\r\n return;\r\n }\r\n }\r\n }\r\n } else {\r\n return;\r\n }\r\n}","IsDeferred":false},{"Name":"new filter first","Code":"if (entities) {\r\n const vals = Object.values(entities).filter((el) =\u003E encounterNames.has(el.name));\r\n if (vals.length \u003E 0) {\r\n vals.sort(\r\n (a, b) =\u003E b.lastUpdate - a.lastUpdate\r\n );\r\n let result = vals[0];\r\n return;\r\n } else {\r\n return;\r\n }\r\n}","IsDeferred":false},{"Name":"new sort first","Code":"if (entities) {\r\n const vals = Object.values(entities);\r\n vals.sort((a, b) =\u003E b.lastUpdate - a.lastUpdate);\r\n for (let val of vals) {\r\n if (encounterNames.has(val.name)) {\r\n let result = vals[0]\r\n return;\r\n }\r\n }\r\n} else {\r\n return;\r\n}","IsDeferred":false}]}