[{"data":1,"prerenderedAt":982},["ShallowReactive",2],{"$fSdZ-WEH6Gdun2scQfbO1BG03qFQT5xX8bmqS7epP7pk":3,"$f-KhKwB8J0md5Q3U1oyqNCQbHxVpirjaanlJWCGo_ht4":96,"$fkVWEWXZHbLy86BhC78gDVDJ_00TY4k_DsdZD3Mz6ZO0":99,"$fqGwjmVbyPxmA5lnsLz9nF3m-ncS8WzLIlTsTA85cuZA":104,"$fVMSX_HWVzVkzv-u5ATHiOgClblPaIGZfXUn_Cq8LKn4":449,"$fw0tI3d-iV2W3zZtbRjyPNNRSgXGobrmwsMU7a1fynls":670,"mdc--hzevb3-key":690,"mdc--mbxdl-key":735,"mdc--l1bxpq-key":757,"mdc--eocukj-key":771,"mdc-x4lvj-key":793,"mdc-japl4t-key":808,"mdc--pfaalk-key":822,"mdc-1ur5d7-key":958},{"content":4,"livecodingContent":55,"type":83,"pageMeta":84},[5,9,13,17,20,24,27,31,34,38,42,45,49,52],{"id":6,"value":7,"isTypeH1":8},"1980","Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4614","Теория: что проверяется и почему так","theory-what-is-checked-and-why",{"id":14,"value":15,"anchor":16,"isTypeH3":8},"4649","Что значит «слова из одинаковых букв»","what-it-means-same-letters",{"id":18,"value":19,"isTypeParagraph":8},"10613","Под «одинаковыми буквами» обычно понимается совпадение не только множества букв, но и количества каждой буквы. Например, «ток» и «кот» подходят, потому что буквы к, о, т встречаются по одному разу в каждом слове.\n\nВажная деталь: если в одном слове буква встречается дважды, а в другом один раз, такие слова не считаются состоящими из одинаковых букв (результат должен быть `false`).",{"id":21,"value":22,"anchor":23,"isTypeH3":8},"4650","Идея канонической формы (подписи)","idea-of-canonical-signature",{"id":25,"value":26,"isTypeParagraph":8},"10614","Сравнивать слова посимвольно напрямую неудобно, потому что порядок букв может отличаться. Поэтому вводится «подпись» — преобразование, которое одинаково для всех анаграмм.\n\nВ варианте с сортировкой подпись строится так: слово → список символов → сортировка → строка. У анаграмм отсортированные строки совпадают, потому что одинаковые символы после сортировки оказываются в одном и том же порядке.",{"id":28,"value":29,"anchor":30,"isTypeH3":8},"4651","Нормализация и регистр: зачем это нужно","normalization-and-case-why-needed",{"id":32,"value":33,"isTypeParagraph":8},"10615","Приведение к нижнему регистру делает сравнение нечувствительным к регистру: «Кот» и «ток» начинают рассматриваться как одинаковые по буквам.\n\nНормализация `normalize(\"NFC\")` помогает в случаях Юникода, когда внешне одинаковые символы могут быть закодированы разными последовательностями кодовых точек. В простых русских словах это встречается реже, но при копировании текста из разных источников (или при наличии диакритики) может проявиться.",{"id":35,"description":36,"titleAlert":37,"isTypeAlertInfo":8},"709","`normalize()` является стандартным методом строк в JavaScript и в современных средах разработки применяется для унификации представления Юникод-символов перед сравнением.",null,{"id":39,"value":40,"anchor":41,"isTypeH3":8},"4652","Почему частотная карта иногда лучше сортировки","4-why-frequency-map-can-be-better",{"id":43,"value":44,"isTypeParagraph":8},"10616","Сортировка внутри каждого слова обычно требует больше работы, чем простой проход по символам и подсчёт. Частотная карта напрямую хранит смысл задачи: «какая буква сколько раз встречается».\n\nПри больших строках частотный подход часто оказывается эффективнее, потому что выполняется один линейный проход по символам, а затем сравнение небольших структур данных.",{"id":46,"value":47,"anchor":48,"isTypeH2":8},"4615","Схема и таблица","scheme-and-table",{"id":50,"value":51,"isTypeParagraph":8},"10617","Схема идеи «подписи слова» (вариант с сортировкой):\n\n```\n[\"кот\", \"ток\", \"окт\"]\n   │\n   ├─ \"кот\" → normalize+lower → [\"к\",\"о\",\"т\"] → sort → \"кот\"\n   ├─ \"ток\" → normalize+lower → [\"т\",\"о\",\"к\"] → sort → \"кот\"\n   └─ \"окт\" → normalize+lower → [\"о\",\"к\",\"т\"] → sort → \"кот\"\n                     │\n             все подписи равны → true\n```\n\nТаблица выбора подхода:\n\n| Критерий | Сортировка (Вариант A) | Частотная карта (Вариант B) |\n|---|---|---|\n| Простота реализации | Высокая (короткий код) | Средняя (нужно сравнение `Map`) |\n| Смысловая ясность «буква → количество» | Косвенно | Прямо |\n| Оценка сложности на слово длины m | Приблизительно O(m log m) из-за сортировки | Приблизительно O(m) на подсчёт + сравнение по ключам |\n| Когда выбирать | Учебные задачи, короткие слова | Длинные строки, упор на эффективность |\n",{"id":53,"value":54,"isTypeParagraph":8},"10618","Кратко: для проверки одинаковости букв во всех словах массива достаточно привести каждое слово к одной форме: либо отсортировать его символы и сравнить получившиеся строки, либо построить частотную карту символов и сравнить карты; дополнительные шаги вроде `toLowerCase()` и `normalize(\"NFC\")` повышают стабильность сравнения на реальных входных данных.",{"id":56,"functionTestData":57,"functionName":79,"functionTemplateCode":80,"solution":81,"description":82},"421",[58,64,69,74],[59,8],[60],[61,62,63],"кот","ток","окт",[65,8],[66],[67,68],"кабан","банка",[70,73],[71],[67,68,72],"октава",false,[75,73],[76],[61,77,78],"мышь","есть","isLetterMatch","function isLetterMatch(arr) {\n   // ваш код здесь\n}","**Вариант A** (проще): подпись слова через сортировку букв\n\nИдея: каждое слово превращается в каноническую форму (например, все буквы в нижний регистр, затем сортировка), после чего достаточно сравнить эти формы.\n\n```\nfunction buildSignatureSort(word) {\n  // Приведение к строке и базовая нормализация ввода\n  // NFC удобно применять для унификации представления символов Юникода\n  const normalized = String(word).normalize(\"NFC\").toLowerCase();\n\n  // Array.from корректнее обходит строку по символам Юникода, чем split(\"\")\n  return Array.from(normalized).sort().join(\"\");\n}\n\nfunction isLetterMatch(words) {\n  if (!Array.isArray(words)) return false;\n  if (words.length \u003C= 1) return true;\n\n  // В учебном варианте удобно считать вход некорректным, если есть нестроковые элементы\n  if (!words.every((w) => typeof w === \"string\")) return false;\n\n  const base = buildSignatureSort(words[0]);\n  return words.every((w) => buildSignatureSort(w) === base);\n}\n```\n\n**Вариант B** (эффективнее на длинных словах): частотная карта букв\n\nИдея: для каждого слова строится карта «буква → сколько раз встретилась», затем карты сравниваются.\n\n```\nfunction buildFreqMap(word) {\n  const normalized = String(word).normalize(\"NFC\").toLowerCase();\n  const map = new Map();\n\n  for (const ch of Array.from(normalized)) {\n    map.set(ch, (map.get(ch) || 0) + 1);\n  }\n  return map;\n}\n\nfunction isSameFreqMap(a, b) {\n  if (a.size !== b.size) return false;\n  for (const [key, count] of a) {\n    if (b.get(key) !== count) return false;\n  }\n  return true;\n}\n\nfunction isLetterMatch(words) {\n  if (!Array.isArray(words)) return false;\n  if (words.length \u003C= 1) return true;\n  if (!words.every((w) => typeof w === \"string\")) return false;\n\n  const base = buildFreqMap(words[0]);\n  return words.every((w) => isSameFreqMap(buildFreqMap(w), base));\n}\n```\n","Дан массив:\n\n```\nconst arr = ['kot', 'tok', 'okt']\n```\n\nНеобходимо написать функцию, которая определяет, состоят ли слова в массиве из одинаковых букв\n\nПримеры:\n\n```\nisLetterMatch([\"кот\", \"ток\", \"окт\"]) === true\nisLetterMatch([\"кабан\", \"банка\"]) === true\nisLetterMatch([\"кабан\",\"банка\",\"октава\"]) === false\nisLetterMatch([\"кот\",\"мышь\",\"есть\"]) === false\n```","livecoding",{"title":85,"description":86,"ogTitle":87,"ogDescription":88,"ogImageUrl":89,"canonical":37,"ogLocale":90,"ogSiteName":91,"ogImageType":92,"ogImageWidth":93,"ogImageHeight":94,"ogType":95,"ogUrl":37},"Необходимо определить, состоят ли они из одних и тех же букв","Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв: isLetterMatch(['кот', 'ток', 'окт']) === true","Есть слова в массиве, необходимо определить, составлены ли слова массива из одинаковых букв","Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв('кот', 'ток', 'окт')","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","website",{"siteName":97,"siteUrl":98},"GOOD WEB JOB!","https://goodwebjob.ru",[100],{"label":101,"slug":102,"to":103},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":105,"navigationSublist":113},[106,109],{"path":103,"isActive":73,"name":107,"icon":108,"isNavbarMobileDisabled":8},"С чего начать?","material-symbols:visibility-outline-rounded",{"path":110,"isActive":8,"name":111,"icon":112,"isNavbarMobileDisabled":73},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[114,123,150,162,168,308,332,341,347,410,431,437],{"title":115,"list":116,"isOpened":73},"Bash",[117,120],{"name":118,"path":119,"isActive":73},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":121,"path":122,"isActive":73},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":124,"list":125,"isOpened":73},"CSS",[126,129,132,135,138,141,144,147],{"name":127,"path":128,"isActive":73},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":130,"path":131,"isActive":73},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":133,"path":134,"isActive":73},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":136,"path":137,"isActive":73},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":139,"path":140,"isActive":73},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":142,"path":143,"isActive":73},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":145,"path":146,"isActive":73},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":148,"path":149,"isActive":73},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":151,"list":152,"isOpened":73},"Git",[153,156,159],{"name":154,"path":155,"isActive":73},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":157,"path":158,"isActive":73},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":160,"path":161,"isActive":73},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":163,"list":164,"isOpened":73},"HTML",[165],{"name":166,"path":167,"isActive":73},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":169,"list":170,"isOpened":73},"JavaScript",[171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,275,278,281,284,287,290,293,296,299,302,305],{"name":172,"path":173,"isActive":73},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":175,"path":176,"isActive":73},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":178,"path":179,"isActive":73},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":181,"path":182,"isActive":73},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":184,"path":185,"isActive":73},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":187,"path":188,"isActive":73},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":190,"path":191,"isActive":73},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":193,"path":194,"isActive":73},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":196,"path":197,"isActive":73},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":199,"path":200,"isActive":73},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":202,"path":203,"isActive":73},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":205,"path":206,"isActive":73},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":208,"path":209,"isActive":73},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":211,"path":212,"isActive":73},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":214,"path":215,"isActive":73},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":217,"path":218,"isActive":73},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":220,"path":221,"isActive":73},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":223,"path":224,"isActive":73},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":226,"path":227,"isActive":73},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":229,"path":230,"isActive":73},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":232,"path":233,"isActive":73},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":235,"path":236,"isActive":73},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":238,"path":239,"isActive":73},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":241,"path":242,"isActive":73},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":244,"path":245,"isActive":73},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":247,"path":248,"isActive":73},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":250,"path":251,"isActive":73},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":253,"path":254,"isActive":73},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":256,"path":257,"isActive":73},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":259,"path":260,"isActive":73},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":262,"path":263,"isActive":73},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":265,"path":266,"isActive":73},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":268,"path":269,"isActive":73},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":271,"path":272,"isActive":73},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":7,"path":274,"isActive":73},"/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":276,"path":277,"isActive":73},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":279,"path":280,"isActive":73}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":282,"path":283,"isActive":73},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":285,"path":286,"isActive":73},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":288,"path":289,"isActive":73},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":291,"path":292,"isActive":73},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":294,"path":295,"isActive":73},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":297,"path":298,"isActive":73},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":300,"path":301,"isActive":73},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":303,"path":304,"isActive":73},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":306,"path":307,"isActive":73},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":309,"list":310,"isOpened":73},"React",[311,314,317,320,323,326,329],{"name":312,"path":313,"isActive":73},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":315,"path":316,"isActive":73},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":318,"path":319,"isActive":73},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":321,"path":322,"isActive":73},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":324,"path":325,"isActive":73},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":327,"path":328,"isActive":73},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":330,"path":331,"isActive":73},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":333,"list":334,"isOpened":73},"Алгоритмы",[335,338],{"name":336,"path":337,"isActive":73},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":339,"path":340,"isActive":73},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":342,"list":343,"isOpened":73},"Дебаггинг",[344],{"name":345,"path":346,"isActive":73},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":348,"list":349,"isOpened":73},"Компьютерные сети",[350,353,356,359,362,365,368,371,374,377,380,383,386,389,392,395,398,401,404,407],{"name":351,"path":352,"isActive":73},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":354,"path":355,"isActive":73},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":357,"path":358,"isActive":73},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":360,"path":361,"isActive":73},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":363,"path":364,"isActive":73},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":366,"path":367,"isActive":73},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":369,"path":370,"isActive":73},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":372,"path":373,"isActive":73},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":375,"path":376,"isActive":73},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":378,"path":379,"isActive":73},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":381,"path":382,"isActive":73},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":384,"path":385,"isActive":73},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":387,"path":388,"isActive":73},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":390,"path":391,"isActive":73},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":393,"path":394,"isActive":73},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":396,"path":397,"isActive":73},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":399,"path":400,"isActive":73},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":402,"path":403,"isActive":73},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":405,"path":406,"isActive":73},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":408,"path":409,"isActive":73},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":411,"list":412,"isOpened":73},"Отрисовка в браузере",[413,416,419,422,425,428],{"name":414,"path":415,"isActive":73},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":417,"path":418,"isActive":73},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":420,"path":421,"isActive":73},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":423,"path":424,"isActive":73},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":426,"path":427,"isActive":73},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":429,"path":430,"isActive":73},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":432,"list":433,"isOpened":73},"Ревью кода",[434],{"name":435,"path":436,"isActive":73},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":438,"list":439,"isOpened":73},"Теория вероятности",[440,443,446],{"name":441,"path":442,"isActive":73},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":444,"path":445,"isActive":73},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":447,"path":448,"isActive":73},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"slugs":450},[451,454,456,458,460,463,466,468,470,472,474,476,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,660,662,664,666,668],{"name":452,"value":453},"Теоретические задания","theoretical-tasks",{"name":208,"value":455},"what-this-code-will-return-typeof-function",{"name":107,"value":457},"where-to-begin",{"name":175,"value":459},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":461,"value":462},"Backend","backend",{"name":464,"value":465},"Frontend","frontend",{"name":172,"value":467},"prototype-what-logical-values-will-be-received-in-console-log",{"name":288,"value":469},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":279,"value":471},"find-non-repeating-numbers-in-an-array",{"name":253,"value":473},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":259,"value":475},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":477,"value":478},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":265,"value":480},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":181,"value":482},"what-value-will-the-console-output-with-object-property",{"name":184,"value":484},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":256,"value":486},"returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":285,"value":488},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":291,"value":490},"determines-whether-a-word-is-a-palindrome",{"name":271,"value":492},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":297,"value":494},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":262,"value":496},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":268,"value":498},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":7,"value":500},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":306,"value":502},"the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":276,"value":504},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":282,"value":506},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":187,"value":508},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":190,"value":510},"there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":202,"value":512},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":205,"value":514},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":303,"value":516},"unifying-values-in-an-array",{"name":294,"value":518},"flattening-the-array",{"name":193,"value":520},"what-will-the-book-get-upper-name-method-return",{"name":300,"value":522},"string-compression",{"name":199,"value":524},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":211,"value":526},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":351,"value":528},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":357,"value":530},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":360,"value":532},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":363,"value":534},"key-differences-between-tcp-and-udp",{"name":366,"value":536},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":369,"value":538},"what-is-http-and-what-does-it-consist-of",{"name":372,"value":540},"what-are-http-headers-and-why-do-we-need-them",{"name":375,"value":542},"what-are-http-parameters",{"name":378,"value":544},"where-is-the-html-code-located-in-the-http-response-structure",{"name":166,"value":546},"what-is-html",{"name":381,"value":548},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":384,"value":550},"the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":387,"value":552},"what-is-a-cookie",{"name":390,"value":554},"who-initiates-the-cookie-recording-in-the-browser",{"name":393,"value":556},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":558,"value":83},"Лайвкодинг",{"name":178,"value":560},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":399,"value":562},"is-everything-that-goes-through-https-secure",{"name":402,"value":564},"all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":405,"value":566},"there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":417,"value":568},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":414,"value":570},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":420,"value":572},"what-is-blocking-the-page-rendering-in-the-browser",{"name":423,"value":574},"what-is-dom-in-a-browser-what-is-cssom",{"name":426,"value":576},"what-are-nodes-in-the-dom",{"name":429,"value":578},"what-does-cssom-consist-of",{"name":127,"value":580},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":130,"value":582},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":133,"value":584},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":136,"value":586},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":139,"value":588},"there-is-an-html-code-will-font-weight-affect-span",{"name":142,"value":590},"what-are-the-differences-between-flexbox-and-grid",{"name":145,"value":592},"do-flexbox-and-grid-replace-each-other",{"name":148,"value":594},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":111,"value":596},"tasks",{"name":214,"value":598},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":217,"value":600},"what-is-this-in-javascript",{"name":220,"value":602},"what-is-an-event-loop-and-how-does-it-work",{"name":223,"value":604},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":226,"value":606},"what-does-the-typeof-operator-show-in-javascript",{"name":229,"value":608},"what-types-of-data-exist-in-javascript",{"name":232,"value":610},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":235,"value":612},"what-will-typeof-return-for-an-array",{"name":238,"value":614},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":241,"value":616},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":244,"value":618},"what-does-typeof-return-for-new-set-in-javascript",{"name":312,"value":620},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":318,"value":622},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":321,"value":624},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":324,"value":626},"there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":327,"value":628},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":345,"value":630},"how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":154,"value":632},"developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":157,"value":634},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":160,"value":636},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":435,"value":638},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":118,"value":640},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":121,"value":642},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":336,"value":644},"what-is-algorithmic-complexity",{"name":339,"value":646},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":247,"value":648},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":408,"value":650},"how-can-a-user-be-authorized-on-a-website",{"name":250,"value":652},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":441,"value":654},"there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":444,"value":656},"there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":447,"value":658},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":101,"value":102},{"name":396,"value":661},"is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":354,"value":663},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":196,"value":665},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":315,"value":667},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":330,"value":669},"what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"cooperation":671,"copyright":674,"reportError":675,"socialNetwork":677},{"link":672,"title":673},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":676,"link":672},"Сообщить об ошибке",{"label":678,"socialNetworkList":679},"Мы в соцсетях:",[680,683,686],{"icon":37,"link":681,"title":682},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":684,"link":672,"title":685},"ic:baseline-telegram","Telegram",{"icon":687,"link":688,"title":689},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":691,"body":692},{},{"type":693,"children":694},"root",[695,703,716,721,726],{"type":696,"tag":697,"props":698,"children":699},"element","p",{},[700],{"type":701,"value":702},"text","Дан массив:",{"type":696,"tag":704,"props":705,"children":709},"pre",{"className":706,"code":708,"language":701},[707],"language-text","const arr = ['kot', 'tok', 'okt']\n",[710],{"type":696,"tag":711,"props":712,"children":714},"code",{"__ignoreMap":713},"",[715],{"type":701,"value":708},{"type":696,"tag":697,"props":717,"children":718},{},[719],{"type":701,"value":720},"Необходимо написать функцию, которая определяет, состоят ли слова в массиве из одинаковых букв",{"type":696,"tag":697,"props":722,"children":723},{},[724],{"type":701,"value":725},"Примеры:",{"type":696,"tag":704,"props":727,"children":730},{"className":728,"code":729,"language":701},[707],"isLetterMatch([\"кот\", \"ток\", \"окт\"]) === true\nisLetterMatch([\"кабан\", \"банка\"]) === true\nisLetterMatch([\"кабан\",\"банка\",\"октава\"]) === false\nisLetterMatch([\"кот\",\"мышь\",\"есть\"]) === false\n",[731],{"type":696,"tag":711,"props":732,"children":733},{"__ignoreMap":713},[734],{"type":701,"value":729},{"data":736,"body":737},{},{"type":693,"children":738},[739,744],{"type":696,"tag":697,"props":740,"children":741},{},[742],{"type":701,"value":743},"Под «одинаковыми буквами» обычно понимается совпадение не только множества букв, но и количества каждой буквы. Например, «ток» и «кот» подходят, потому что буквы к, о, т встречаются по одному разу в каждом слове.",{"type":696,"tag":697,"props":745,"children":746},{},[747,749,755],{"type":701,"value":748},"Важная деталь: если в одном слове буква встречается дважды, а в другом один раз, такие слова не считаются состоящими из одинаковых букв (результат должен быть ",{"type":696,"tag":711,"props":750,"children":752},{"className":751},[],[753],{"type":701,"value":754},"false",{"type":701,"value":756},").",{"data":758,"body":759},{},{"type":693,"children":760},[761,766],{"type":696,"tag":697,"props":762,"children":763},{},[764],{"type":701,"value":765},"Сравнивать слова посимвольно напрямую неудобно, потому что порядок букв может отличаться. Поэтому вводится «подпись» — преобразование, которое одинаково для всех анаграмм.",{"type":696,"tag":697,"props":767,"children":768},{},[769],{"type":701,"value":770},"В варианте с сортировкой подпись строится так: слово → список символов → сортировка → строка. У анаграмм отсортированные строки совпадают, потому что одинаковые символы после сортировки оказываются в одном и том же порядке.",{"data":772,"body":773},{},{"type":693,"children":774},[775,780],{"type":696,"tag":697,"props":776,"children":777},{},[778],{"type":701,"value":779},"Приведение к нижнему регистру делает сравнение нечувствительным к регистру: «Кот» и «ток» начинают рассматриваться как одинаковые по буквам.",{"type":696,"tag":697,"props":781,"children":782},{},[783,785,791],{"type":701,"value":784},"Нормализация ",{"type":696,"tag":711,"props":786,"children":788},{"className":787},[],[789],{"type":701,"value":790},"normalize(\"NFC\")",{"type":701,"value":792}," помогает в случаях Юникода, когда внешне одинаковые символы могут быть закодированы разными последовательностями кодовых точек. В простых русских словах это встречается реже, но при копировании текста из разных источников (или при наличии диакритики) может проявиться.",{"data":794,"body":795},{},{"type":693,"children":796},[797],{"type":696,"tag":697,"props":798,"children":799},{},[800,806],{"type":696,"tag":711,"props":801,"children":803},{"className":802},[],[804],{"type":701,"value":805},"normalize()",{"type":701,"value":807}," является стандартным методом строк в JavaScript и в современных средах разработки применяется для унификации представления Юникод-символов перед сравнением.",{"data":809,"body":810},{},{"type":693,"children":811},[812,817],{"type":696,"tag":697,"props":813,"children":814},{},[815],{"type":701,"value":816},"Сортировка внутри каждого слова обычно требует больше работы, чем простой проход по символам и подсчёт. Частотная карта напрямую хранит смысл задачи: «какая буква сколько раз встречается».",{"type":696,"tag":697,"props":818,"children":819},{},[820],{"type":701,"value":821},"При больших строках частотный подход часто оказывается эффективнее, потому что выполняется один линейный проход по символам, а затем сравнение небольших структур данных.",{"data":823,"body":824},{},{"type":693,"children":825},[826,831,840,845],{"type":696,"tag":697,"props":827,"children":828},{},[829],{"type":701,"value":830},"Схема идеи «подписи слова» (вариант с сортировкой):",{"type":696,"tag":704,"props":832,"children":835},{"className":833,"code":834,"language":701},[707],"[\"кот\", \"ток\", \"окт\"]\n   │\n   ├─ \"кот\" → normalize+lower → [\"к\",\"о\",\"т\"] → sort → \"кот\"\n   ├─ \"ток\" → normalize+lower → [\"т\",\"о\",\"к\"] → sort → \"кот\"\n   └─ \"окт\" → normalize+lower → [\"о\",\"к\",\"т\"] → sort → \"кот\"\n                     │\n             все подписи равны → true\n",[836],{"type":696,"tag":711,"props":837,"children":838},{"__ignoreMap":713},[839],{"type":701,"value":834},{"type":696,"tag":697,"props":841,"children":842},{},[843],{"type":701,"value":844},"Таблица выбора подхода:",{"type":696,"tag":846,"props":847,"children":848},"table",{},[849,873],{"type":696,"tag":850,"props":851,"children":852},"thead",{},[853],{"type":696,"tag":854,"props":855,"children":856},"tr",{},[857,863,868],{"type":696,"tag":858,"props":859,"children":860},"th",{},[861],{"type":701,"value":862},"Критерий",{"type":696,"tag":858,"props":864,"children":865},{},[866],{"type":701,"value":867},"Сортировка (Вариант A)",{"type":696,"tag":858,"props":869,"children":870},{},[871],{"type":701,"value":872},"Частотная карта (Вариант B)",{"type":696,"tag":874,"props":875,"children":876},"tbody",{},[877,904,922,940],{"type":696,"tag":854,"props":878,"children":879},{},[880,886,891],{"type":696,"tag":881,"props":882,"children":883},"td",{},[884],{"type":701,"value":885},"Простота реализации",{"type":696,"tag":881,"props":887,"children":888},{},[889],{"type":701,"value":890},"Высокая (короткий код)",{"type":696,"tag":881,"props":892,"children":893},{},[894,896,902],{"type":701,"value":895},"Средняя (нужно сравнение ",{"type":696,"tag":711,"props":897,"children":899},{"className":898},[],[900],{"type":701,"value":901},"Map",{"type":701,"value":903},")",{"type":696,"tag":854,"props":905,"children":906},{},[907,912,917],{"type":696,"tag":881,"props":908,"children":909},{},[910],{"type":701,"value":911},"Смысловая ясность «буква → количество»",{"type":696,"tag":881,"props":913,"children":914},{},[915],{"type":701,"value":916},"Косвенно",{"type":696,"tag":881,"props":918,"children":919},{},[920],{"type":701,"value":921},"Прямо",{"type":696,"tag":854,"props":923,"children":924},{},[925,930,935],{"type":696,"tag":881,"props":926,"children":927},{},[928],{"type":701,"value":929},"Оценка сложности на слово длины m",{"type":696,"tag":881,"props":931,"children":932},{},[933],{"type":701,"value":934},"Приблизительно O(m log m) из-за сортировки",{"type":696,"tag":881,"props":936,"children":937},{},[938],{"type":701,"value":939},"Приблизительно O(m) на подсчёт + сравнение по ключам",{"type":696,"tag":854,"props":941,"children":942},{},[943,948,953],{"type":696,"tag":881,"props":944,"children":945},{},[946],{"type":701,"value":947},"Когда выбирать",{"type":696,"tag":881,"props":949,"children":950},{},[951],{"type":701,"value":952},"Учебные задачи, короткие слова",{"type":696,"tag":881,"props":954,"children":955},{},[956],{"type":701,"value":957},"Длинные строки, упор на эффективность",{"data":959,"body":960},{},{"type":693,"children":961},[962],{"type":696,"tag":697,"props":963,"children":964},{},[965,967,973,975,980],{"type":701,"value":966},"Кратко: для проверки одинаковости букв во всех словах массива достаточно привести каждое слово к одной форме: либо отсортировать его символы и сравнить получившиеся строки, либо построить частотную карту символов и сравнить карты; дополнительные шаги вроде ",{"type":696,"tag":711,"props":968,"children":970},{"className":969},[],[971],{"type":701,"value":972},"toLowerCase()",{"type":701,"value":974}," и ",{"type":696,"tag":711,"props":976,"children":978},{"className":977},[],[979],{"type":701,"value":790},{"type":701,"value":981}," повышают стабильность сравнения на реальных входных данных.",1775575822637]