{"ScriptPreparationCode":"const regions = [\r\n \u0022\u0441\u04D9\u043B\u0435\u043C\u0022, \u0022\u0440\u0430\u049B\u043C\u0435\u0442\u0022, \u0022\u043A\u0456\u0442\u0430\u043F\u0022, \u0022\u04AF\u0439\u0022, \u0022\u0441\u0443\u0022,\r\n \u0022\u043D\u0430\u043D\u0022, \u0022\u0431\u0430\u043B\u0430\u0022, \u0022\u0430\u043D\u0430\u0022, \u0022\u04D9\u043A\u0435\u0022, \u0022\u043A\u04AF\u043D\u0022,\r\n \u0022\u0430\u0439\u0022, \u0022\u0436\u044B\u043B\u0022, \u0022\u043A\u04E9\u043B\u0456\u043A\u0022, \u0022\u0436\u043E\u043B\u0022, \u0022\u0442\u0430\u0493\u0430\u043C\u0022,\r\n \u0022\u049B\u0430\u043B\u0430\u0022, \u0022\u0430\u0443\u044B\u043B\u0022, \u0022\u0430\u0434\u0430\u043C\u0022, \u0022\u049B\u043E\u043B\u0022, \u0022\u0431\u0430\u0441\u0022,\r\n \u0022\u043A\u04E9\u0437\u0022, \u0022\u049B\u04B1\u043B\u0430\u049B\u0022, \u0022\u043C\u0435\u043A\u0442\u0435\u043F\u0022, \u0022\u0436\u04B1\u043C\u044B\u0441\u0022, \u0022\u0434\u0435\u043D\u0441\u0430\u0443\u043B\u044B\u049B\u0022,\r\n \r\n \u0022merhaba\u0022, \u0022te\u015Fekk\u00FCr\u0022, \u0022kitap\u0022, \u0022ev\u0022, \u0022su\u0022,\r\n \u0022ekmek\u0022, \u0022\u00E7ocuk\u0022, \u0022anne\u0022, \u0022baba\u0022, \u0022g\u00FCn\u0022,\r\n \u0022ay\u0022, \u0022y\u0131l\u0022, \u0022araba\u0022, \u0022yol\u0022, \u0022yemek\u0022,\r\n \u0022\u015Fehir\u0022, \u0022k\u00F6y\u0022, \u0022insan\u0022, \u0022el\u0022, \u0022ba\u015F\u0022,\r\n \u0022g\u00F6z\u0022, \u0022kulak\u0022, \u0022okul\u0022, \u0022i\u015F\u0022, \u0022sa\u011Fl\u0131k\u0022,\r\n\r\n \u0022hello\u0022, \u0022thank\u0022, \u0022book\u0022, \u0022house\u0022, \u0022water\u0022,\r\n \u0022bread\u0022, \u0022child\u0022, \u0022mother\u0022, \u0022father\u0022, \u0022day\u0022,\r\n \u0022moon\u0022, \u0022year\u0022, \u0022car\u0022, \u0022road\u0022, \u0022food\u0022,\r\n \u0022city\u0022, \u0022village\u0022, \u0022person\u0022, \u0022hand\u0022, \u0022head\u0022,\r\n \u0022eye\u0022, \u0022ear\u0022, \u0022school\u0022, \u0022work\u0022, \u0022health\u0022,\r\n\r\n \u0022\u043F\u0440\u0438\u0432\u0435\u0442\u0022, \u0022\u0441\u043F\u0430\u0441\u0438\u0431\u043E\u0022, \u0022\u043A\u043D\u0438\u0433\u0430\u0022, \u0022\u0434\u043E\u043C\u0022, \u0022\u0432\u043E\u0434\u0430\u0022,\r\n \u0022\u0445\u043B\u0435\u0431\u0022, \u0022\u0440\u0435\u0431\u0451\u043D\u043E\u043A\u0022, \u0022\u043C\u0430\u043C\u0430\u0022, \u0022\u043F\u0430\u043F\u0430\u0022, \u0022\u0434\u0435\u043D\u044C\u0022,\r\n \u0022\u043B\u0443\u043D\u0430\u0022, \u0022\u0433\u043E\u0434\u0022, \u0022\u043C\u0430\u0448\u0438\u043D\u0430\u0022, \u0022\u0434\u043E\u0440\u043E\u0433\u0430\u0022, \u0022\u0435\u0434\u0430\u0022,\r\n \u0022\u0433\u043E\u0440\u043E\u0434\u0022, \u0022\u0434\u0435\u0440\u0435\u0432\u043D\u044F\u0022, \u0022\u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0022, \u0022\u0440\u0443\u043A\u0430\u0022, \u0022\u0433\u043E\u043B\u043E\u0432\u0430\u0022,\r\n \u0022\u0433\u043B\u0430\u0437\u0022, \u0022\u0443\u0445\u043E\u0022, \u0022\u0448\u043A\u043E\u043B\u0430\u0022, \u0022\u0440\u0430\u0431\u043E\u0442\u0430\u0022, \u0022\u0437\u0434\u043E\u0440\u043E\u0432\u044C\u0435\u0022\r\n]","TestCases":[{"Name":"native String.prototype.includes O(N\u002BM)","Code":"const CONVERTER = {\r\n // \u041A\u0430\u0437\u0430\u0445\u0441\u043A\u0438\u0439 \u0430\u043B\u0444\u0430\u0432\u0438\u0442\r\n \u049B: \u0027\u043A\u0027,\r\n \u0493: \u0027\u0433\u0027,\r\n \u04A3: \u0027\u043D\u0027,\r\n \u04AF: \u0027\u0443\u0027,\r\n \u04B1: \u0027\u0443\u0027,\r\n \u04BB: \u0027\u0445\u0027,\r\n \u04E9: \u0027\u043E\u0027,\r\n \u0456: \u0027i\u0027,\r\n // \u0422\u0443\u0440\u0435\u0446\u043A\u0438\u0439 \u0430\u043B\u0444\u0430\u0432\u0438\u0442\r\n \u0131: \u0027i\u0027,\r\n};\r\n\r\nconst converterPattern = Object.keys(CONVERTER)\r\n .map(ch =\u003E ch.replace(/[.*\u002B?^${}()|[\\]\\\\]/g, \u0027\\\\$\u0026\u0027)) // \u044D\u0441\u043A\u0435\u0439\u043F\u0438\u043C \u0434\u043B\u044F regexp\r\n .join(\u0027\u0027);\r\n\r\nconst NEEDS_TRANSLITERATION_REGEXP = new RegExp(\u0060[\\\\u0300-\\\\u036f${converterPattern ? converterPattern : \u0027\u0027}]\u0060, \u0027i\u0027);\r\n\r\nconst transliterateAndNormalize = (str) =\u003E {\r\n const normalizedStr = str.toLowerCase().normalize(\u0027NFD\u0027);\r\n if (!NEEDS_TRANSLITERATION_REGEXP.test(normalizedStr)) {\r\n return normalizedStr;\r\n }\r\n return normalizedStr\r\n .split(\u0027\u0027)\r\n .map(char =\u003E CONVERTER[char] ?? char)\r\n .filter(char =\u003E !char.match(/[\\u0300-\\u036f]/)) // \u0423\u0431\u0438\u0440\u0430\u0435\u043C \u0434\u0438\u0430\u043A\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0437\u043D\u0430\u043A\u0438\r\n .join(\u0027\u0027);\r\n};\r\n\r\n\r\nconst includesSubString = (haystack, needle) =\u003E {\r\n /** \u041F\u0440\u043E\u0441\u0442\u0435\u0439\u0448\u0438\u0435 \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u0438 */\r\n if (needle.length \u003E haystack.length) {\r\n return false;\r\n }\r\n if (haystack.toLowerCase().includes(needle.toLowerCase())) {\r\n return true;\r\n }\r\n\r\n const normalizedHaystack = transliterateAndNormalize(haystack);\r\n const normalizedNeedle = transliterateAndNormalize(needle);\r\n\r\n return normalizedHaystack.includes(normalizedNeedle);\r\n};\r\n\r\nfor (const region of regions) {\r\n includesSubString(region, \u0027turkey\u0027);\r\n}\r\n","IsDeferred":false},{"Name":"Intl.collator O(N*M)","Code":"\r\nconst collator = new Intl.Collator(undefined, { sensitivity: \u0027base\u0027 });\r\n\r\n function findSubstring(text, pattern) {\r\n const textLength = text.length;\r\n const patternLength = pattern.length;\r\n \r\n if (patternLength === 0) return 0;\r\n \r\n for (let i = 0; i \u003C= textLength - patternLength; i\u002B\u002B) {\r\n let found = true;\r\n \r\n for (let j = 0; j \u003C patternLength; j\u002B\u002B) {\r\n if (collator.compare(text[i \u002B j], pattern[j]) !== 0) {\r\n found = false;\r\n break;\r\n }\r\n }\r\n \r\n if (found) return i;\r\n }\r\n \r\n return -1;\r\n }\r\n\r\nfor (const region of regions) {\r\n findSubstring(region, \u0027turkey\u0027);\r\n}\r\n","IsDeferred":false}]}