[{"data":1,"prerenderedAt":1298},["ShallowReactive",2],{"$fiQN6Maga4iVeRsfZLkaUjYj49xnM09gq33y7S0VM3MY":3,"$f-KhKwB8J0md5Q3U1oyqNCQbHxVpirjaanlJWCGo_ht4":129,"$fkVWEWXZHbLy86BhC78gDVDJ_00TY4k_DsdZD3Mz6ZO0":132,"$fqGwjmVbyPxmA5lnsLz9nF3m-ncS8WzLIlTsTA85cuZA":137,"$fVMSX_HWVzVkzv-u5ATHiOgClblPaIGZfXUn_Cq8LKn4":483,"$fw0tI3d-iV2W3zZtbRjyPNNRSgXGobrmwsMU7a1fynls":704,"mdc--l0ia3c-key":724,"mdc--5h2z9m-key":785,"mdc--jve4m2-key":793,"mdc--t8cj7y-key":840,"mdc-llvvyh-key":879,"mdc-44qnzf-key":896,"mdc--kdy4ea-key":976,"mdc-tkkvcq-key":1043,"mdc-kb1qjz-key":1124,"mdc-u230v-key":1162,"mdc--ti4032-key":1192,"mdc-1yvqc1-key":1269},{"content":4,"livecodingContent":71,"type":118,"pageMeta":119},[5,9,13,16,20,23,27,30,34,37,41,44,48,51,55,58,61,65,68],{"id":6,"value":7,"isTypeH1":8},"1991","Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4634","Теория по задаче","theory-for-task",{"id":14,"value":15,"isTypeParagraph":8},"10676","Задача относится к классу «частичная сортировка с фиксацией позиций»: сортируются только элементы, удовлетворяющие условию (нечётные), а остальные (чётные) сохраняют исходные индексы. Решение удобно строить как «разделение → сортировка → сборка результата», потому что обычная сортировка всего массива нарушит требование «чётные остаются на своих местах».",{"id":17,"value":18,"anchor":19,"isTypeH3":8},"4686","Как определить чётность и нечётность","how-to-check-parity",{"id":21,"value":22,"isTypeParagraph":8},"10677","В JavaScript чаще всего применяется оператор остатка `%`:\n\n- Чётное число: `n % 2 === 0`.\n- Нечётное число: `n % 2 !== 0`.",{"id":24,"description":25,"titleAlert":26,"isTypeAlertInfo":8},"714","Оператор `%` в JavaScript является оператором остатка, а не математического модуля: результат сохраняет знак делимого. Например, `-3 % 2` даёт `-1`, и условие нечётности `n % 2 !== 0` по-прежнему корректно определяет нечётные числа (остаток не равен нулю).",null,{"id":28,"description":29,"titleAlert":26,"isTypeAlertWarning":8},"782","Если в массив могут попадать нецелые числа (например, `3.5`), то понятия «чётное/нечётное» теряют смысл. Для учебной задачи предполагаются целые числа.",{"id":31,"value":32,"anchor":33,"isTypeH3":8},"4687","Почему нельзя «просто отсортировать»","why-not-sort-whole-array",{"id":35,"value":36,"isTypeParagraph":8},"10678","У `Array.prototype.sort()` есть две особенности, которые важны:\n\n1) Без компаратора элементы сортируются как строки (лексикографически), что может дать неправильный порядок для чисел (например, `100` может оказаться «меньше» `2` при строковом сравнении).  \n2) `sort()` изменяет массив «на месте», то есть мутация может привести к тому, что исходные данные будут потеряны.\n\nОтсюда следует правило: для сортировки чисел необходимо передавать компаратор `(a, b) => a - b`, а при необходимости сохранять исходный массив — сортировать копию.\n\nПример корректной числовой сортировки (демонстрационный):\n```\nconst arr = [9, 1, 10, 2];\narr.sort((a, b) => a - b); // [1, 2, 9, 10]\n```\n",{"id":38,"value":39,"anchor":40,"isTypeH3":8},"4688","Базовый алгоритм «разделение → сортировка → сборка»","split-sort-merge",{"id":42,"value":43,"isTypeParagraph":8},"10679","Алгоритм удобно описывать так:\n\n1. Выделение: из исходного массива выбираются все нечётные элементы (например, через `filter` или циклом).\n2. Сортировка: полученный список нечётных сортируется по возрастанию числовым компаратором.\n3. Сборка: создаётся новый массив-результат, в котором:\n   - на позициях с чётными числами остаются исходные значения;\n   - на позициях с нечётными числами последовательно подставляются элементы из отсортированного списка.\n\nСхема потока данных (на примере):\n```\nисходный nums:    [1, 9, 4, 2, 3, 6, 7, 1, 5]\nнечётные odds:    [1, 9, 3, 7, 1, 5]\nотсорт. odds:     [1, 1, 3, 5, 7, 9]\nрезультат:        [1, 1, 4, 2, 3, 6, 5, 7, 9]\n```\n\nКлючевая идея: чётные значения вообще не перемещаются, изменяются только значения в тех индексах, где изначально стояли нечётные числа.\n\n",{"id":45,"value":46,"anchor":47,"isTypeH3":8},"4689","Почему `map()` удобно для сборки","why-map-is-good",{"id":49,"value":50,"isTypeParagraph":8},"10680","`map()` проходит массив по индексам слева направо и создаёт новый массив той же длины. Это позволяет на каждом шаге принимать решение: если текущий элемент нечётный, то подставляется следующее значение из отсортированного списка нечётных, иначе возвращается исходное чётное значение.\n\nМеханика указателя `i`:\n- `i` хранит «номер следующего нечётного числа» в отсортированном массиве `odds`.\n- Каждый раз при встрече нечётного элемента в исходном массиве берётся `odds[i]`, после чего `i` увеличивается на 1.\n\nФрагмент (демонстрационный):\n```\nlet i = 0;\nconst result = nums.map((n) => (n % 2 !== 0 ? odds[i++] : n));\n```",{"id":52,"value":53,"anchor":54,"isTypeH3":8},"4690","Сложность (время и память)","time-and-space-complexity",{"id":56,"value":57,"isTypeParagraph":8},"10681","Пусть `n` — длина массива, `k` — количество нечётных элементов:\n\n- Время: выделение нечётных — O(n), сортировка нечётных — O(k log k), сборка результата — O(n). Итог: O(n + k log k).\n- Память: список нечётных — O(k), новый массив результата — O(n) (если требуется вернуть новый массив).",{"id":59,"description":60,"titleAlert":26,"isTypeAlertInfo":8},"715","Если нечётных мало (`k` заметно меньше `n`), сортировка выполняется быстрее, чем сортировка всего массива длины `n`, потому что сортируется только подмножество.",{"id":62,"value":63,"anchor":64,"isTypeH3":8},"4691","Частые ошибки и как их избегать","common-mistakes",{"id":66,"value":67,"isTypeParagraph":8},"10682","- Ошибка: сортировка без компаратора `sort()` для чисел; исправление: обязательно задавать `(a, b) => a - b`.\n- Ошибка: вызов `sort()` на массиве, который нельзя менять; исправление: сортировать копию (`slice()`, `[...arr]`) или применять `toSorted()`.\n- Ошибка: подмена нечётных чисел без сохранения порядка обхода; исправление: подставлять нечётные строго по порядку индексов слева направо (подходит `map()` или цикл по исходному массиву).\n- Ошибка: попытка «переставлять элементы местами» в исходном массиве; исправление: не перемещать чётные вообще, а только заменять значения в нечётных позициях.",{"id":69,"value":70,"isTypeParagraph":8},"10683","Кратко: в задаче необходимо сортировать только нечётные элементы, сохраняя чётные на исходных индексах, поэтому решение строится как: сбор нечётных → числовая сортировка `(a, b) => a - b` → последовательная подстановка обратно в нечётные позиции. Важно помнить, что `sort()` мутирует массив, поэтому при сохранении исходных данных требуется сортировать копию или использовать `toSorted()`.\n",{"id":72,"functionTestData":73,"functionName":114,"functionTemplateCode":115,"solution":116,"description":117},"432",[74,86,90,100,105],[75,85],[76],[77,78,79,80,81,82,83,77,84],1,9,4,2,3,6,7,5,[77,77,79,80,81,82,84,83,78],[87,89],[88],[77,79,81,83,78,84,80,77,82],[77,79,77,81,84,83,80,78,82],[91,99],[92],[84,81,82,93,94,95,96,97,98],234,67,63,212,24,11,[81,84,82,93,98,95,96,97,94],[101,104],[102],[77,80,81,79,84,82,83,103,78],8,[77,80,81,79,84,82,83,103,78],[106,113],[107],[108,109,98,110,80,111,81,112,79],10,356,258,978,15,[108,109,81,110,80,111,98,112,79],"sortOddNums","function sortOddNums(nums) {\n    // ваш код здесь\n}","**Вариант A**: `filter + toSorted + map` (без мутации входного массива)\nПреимущество: `toSorted()` возвращает новый массив и не изменяет исходный список нечётных чисел, что уменьшает риск побочных эффектов.\n\n```\nfunction sortOddNums(nums) {\n  const odds = nums\n    .filter((n) => n % 2 !== 0)\n    .toSorted((a, b) => a - b);\n\n  let i = 0;\n  return nums.map((n) => (n % 2 !== 0 ? odds[i++] : n));\n}\n```\n\n`toSorted()` поддерживается не во всех старых окружениях, поэтому при требованиях к совместимости может потребоваться вариант с копированием и `sort()`.\n\n**Вариант B**: копия + `sort()` (широкая совместимость, без мутации входного массива)\n\nПреимущество: работает в большем количестве окружений, потому что `sort()` существует давно.\n\n```\nfunction sortOddNums(nums) {\n  const odds = nums\n    .filter((n) => n % 2 !== 0)\n    .slice()\n    .sort((a, b) => a - b);\n\n  let i = 0;\n  return nums.map((n) => (n % 2 !== 0 ? odds[i++] : n));\n}\n```\n\n`Array.prototype.sort()` сортирует массив «на месте» (изменяет тот массив, на котором вызван), поэтому перед сортировкой необходимо создавать копию (например, через `slice()` или `[...arr]`).\n\n**Вариант C**: через индексы нечётных (максимально «прозрачная» логика)\n\nПреимущество: явно видно, какие позиции будут изменены, а какие сохранятся.\n\n```\nfunction sortOddNums(nums) {\n  const oddIndexes = [];\n  const odds = [];\n\n  for (let i = 0; i \u003C nums.length; i++) {\n    if (nums[i] % 2 !== 0) {\n      oddIndexes.push(i);\n      odds.push(nums[i]);\n    }\n  }\n\n  odds.sort((a, b) => a - b);\n\n  const result = nums.slice();\n  for (let j = 0; j \u003C oddIndexes.length; j++) {\n    result[oddIndexes[j]] = odds[j];\n  }\n\n  return result;\n}\n```","Дан массив:\n\n```\nconst nums = [1,9,4,2,3,6,7,1,5];\n```\n\nНеобходимо написать функцию ```sortOddNums```, которая принимает аргументом массив чисел и возвращает массив чисел, в котором нечётные числа отсортированы по возрастанию, а чётные оставлены на своих местах:\n\n```\nsortOddNums(nums) // [1,1,4,2,3,6,5,7,9];\n```\n\nПримеры:\n\n```\n[1,9,4,2,3,6,7,1,5] --> [1,1,4,2,3,6,5,7,9]\n[1,4,3,7,9,5,2,1,6] --> [1,4,1,3,5,7,2,9,6]\n[5,3,6,234,67,63,212,24,11] --> [3,5,6,234,11,63,212,24,67]\n[1,2,3,4,5,6,7,8,9] --> [1,2,3,4,5,6,7,8,9]\n[10,356,11,258,2,978,3,15,4] --> [10,356,3,258,2,978,11,15,4]\n```","livecoding",{"title":120,"description":7,"ogTitle":7,"ogDescription":121,"ogImageUrl":122,"canonical":26,"ogLocale":123,"ogSiteName":124,"ogImageType":125,"ogImageWidth":126,"ogImageHeight":127,"ogType":128,"ogUrl":26},"Нечётные числа должны отсортироваться по возрастанию","Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах: const nums = [1,9,4,2,3,6,7,1,5]; // [1,1,4,2,3,6,5,7,9]","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":130,"siteUrl":131},"GOOD WEB JOB!","https://goodwebjob.ru",[133],{"label":134,"slug":135,"to":136},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":138,"navigationSublist":147},[139,143],{"path":136,"isActive":140,"name":141,"icon":142,"isNavbarMobileDisabled":8},false,"С чего начать?","material-symbols:visibility-outline-rounded",{"path":144,"isActive":8,"name":145,"icon":146,"isNavbarMobileDisabled":140},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[148,157,184,196,202,342,366,375,381,444,465,471],{"title":149,"list":150,"isOpened":140},"Bash",[151,154],{"name":152,"path":153,"isActive":140},"Дан фрагмент 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":155,"path":156,"isActive":140},"Дан фрагмент 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":158,"list":159,"isOpened":140},"CSS",[160,163,166,169,172,175,178,181],{"name":161,"path":162,"isActive":140},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":164,"path":165,"isActive":140},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":167,"path":168,"isActive":140},"Есть шаблон вложенного 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":170,"path":171,"isActive":140},"Есть шаблон вложенного 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":173,"path":174,"isActive":140},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":176,"path":177,"isActive":140},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":179,"path":180,"isActive":140},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":182,"path":183,"isActive":140},"Есть 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":185,"list":186,"isOpened":140},"Git",[187,190,193],{"name":188,"path":189,"isActive":140},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/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":191,"path":192,"isActive":140},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":194,"path":195,"isActive":140},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":197,"list":198,"isOpened":140},"HTML",[199],{"name":200,"path":201,"isActive":140},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":203,"list":204,"isOpened":140},"JavaScript",[205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307,310,313,316,319,322,324,327,330,333,336,339],{"name":206,"path":207,"isActive":140},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":209,"path":210,"isActive":140},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":212,"path":213,"isActive":140},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":215,"path":216,"isActive":140},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":218,"path":219,"isActive":140},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":221,"path":222,"isActive":140},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":224,"path":225,"isActive":140},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение 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":227,"path":228,"isActive":140},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":230,"path":231,"isActive":140},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":233,"path":234,"isActive":140},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":236,"path":237,"isActive":140},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":239,"path":240,"isActive":140},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":242,"path":243,"isActive":140},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":245,"path":246,"isActive":140},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":248,"path":249,"isActive":140},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":251,"path":252,"isActive":140},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":254,"path":255,"isActive":140},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":257,"path":258,"isActive":140},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":260,"path":261,"isActive":140},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":263,"path":264,"isActive":140},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":266,"path":267,"isActive":140},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":269,"path":270,"isActive":140},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":272,"path":273,"isActive":140},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":275,"path":276,"isActive":140},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":278,"path":279,"isActive":140},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":281,"path":282,"isActive":140},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":284,"path":285,"isActive":140},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":287,"path":288,"isActive":140},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":290,"path":291,"isActive":140},"Вернуть массив от 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":293,"path":294,"isActive":140},"Дана строка: '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":296,"path":297,"isActive":140},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":299,"path":300,"isActive":140},"Для каждого вложенного объекта нужно добавить свойство 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":302,"path":303,"isActive":140},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":305,"path":306,"isActive":140},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":308,"path":309,"isActive":140},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":311,"path":312,"isActive":140},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":314,"path":315,"isActive":140}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":317,"path":318,"isActive":140},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":320,"path":321,"isActive":140},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":7,"path":323,"isActive":140},"/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":325,"path":326,"isActive":140},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":328,"path":329,"isActive":140},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":331,"path":332,"isActive":140},"Реализовать функцию, принимающую аргументы \"*\", \"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":334,"path":335,"isActive":140},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":337,"path":338,"isActive":140},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":340,"path":341,"isActive":140},"Числа от 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":343,"list":344,"isOpened":140},"React",[345,348,351,354,357,360,363],{"name":346,"path":347,"isActive":140},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":349,"path":350,"isActive":140},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":352,"path":353,"isActive":140},"Если убрать в 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":355,"path":356,"isActive":140},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":358,"path":359,"isActive":140},"Есть код, в котором список и кнопка. Что в реальном 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":361,"path":362,"isActive":140},"Зачем нужен 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":364,"path":365,"isActive":140},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/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":367,"list":368,"isOpened":140},"Алгоритмы",[369,372],{"name":370,"path":371,"isActive":140},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":373,"path":374,"isActive":140},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":376,"list":377,"isOpened":140},"Дебаггинг",[378],{"name":379,"path":380,"isActive":140},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/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":382,"list":383,"isOpened":140},"Компьютерные сети",[384,387,390,393,396,399,402,405,408,411,414,417,420,423,426,429,432,435,438,441],{"name":385,"path":386,"isActive":140},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":388,"path":389,"isActive":140},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":391,"path":392,"isActive":140},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":394,"path":395,"isActive":140},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":397,"path":398,"isActive":140},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":400,"path":401,"isActive":140},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":403,"path":404,"isActive":140},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":406,"path":407,"isActive":140},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":409,"path":410,"isActive":140},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":412,"path":413,"isActive":140},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":415,"path":416,"isActive":140},"Чем отличаются 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":418,"path":419,"isActive":140},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/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":421,"path":422,"isActive":140},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":424,"path":425,"isActive":140},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":427,"path":428,"isActive":140},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":430,"path":431,"isActive":140},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/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":433,"path":434,"isActive":140},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":436,"path":437,"isActive":140},"Все данные зашифрованы, используется 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":439,"path":440,"isActive":140},"Есть веб-приложение. Помимо 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":442,"path":443,"isActive":140},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":445,"list":446,"isOpened":140},"Отрисовка в браузере",[447,450,453,456,459,462],{"name":448,"path":449,"isActive":140},"Что происходит, когда 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":451,"path":452,"isActive":140},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":454,"path":455,"isActive":140},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":457,"path":458,"isActive":140},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":460,"path":461,"isActive":140},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":463,"path":464,"isActive":140},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":466,"list":467,"isOpened":140},"Ревью кода",[468],{"name":469,"path":470,"isActive":140},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":472,"list":473,"isOpened":140},"Теория вероятности",[474,477,480],{"name":475,"path":476,"isActive":140},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/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":478,"path":479,"isActive":140},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/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":481,"path":482,"isActive":140},"Как гарантированно найти лёгкую фальшивую монету среди 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":484},[485,488,490,492,494,497,500,502,504,506,508,510,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,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,691,693,694,696,698,700,702],{"name":486,"value":487},"Теоретические задания","theoretical-tasks",{"name":242,"value":489},"what-this-code-will-return-typeof-function",{"name":141,"value":491},"where-to-begin",{"name":209,"value":493},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":495,"value":496},"Backend","backend",{"name":498,"value":499},"Frontend","frontend",{"name":206,"value":501},"prototype-what-logical-values-will-be-received-in-console-log",{"name":7,"value":503},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":314,"value":505},"find-non-repeating-numbers-in-an-array",{"name":287,"value":507},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":293,"value":509},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":511,"value":512},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":299,"value":514},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":215,"value":516},"what-value-will-the-console-output-with-object-property",{"name":218,"value":518},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":290,"value":520},"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":320,"value":522},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":325,"value":524},"determines-whether-a-word-is-a-palindrome",{"name":305,"value":526},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":331,"value":528},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":296,"value":530},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":302,"value":532},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":308,"value":534},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":340,"value":536},"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":311,"value":538},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":317,"value":540},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":221,"value":542},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":224,"value":544},"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":236,"value":546},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":239,"value":548},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":337,"value":550},"unifying-values-in-an-array",{"name":328,"value":552},"flattening-the-array",{"name":227,"value":554},"what-will-the-book-get-upper-name-method-return",{"name":334,"value":556},"string-compression",{"name":233,"value":558},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":245,"value":560},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":385,"value":562},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":391,"value":564},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":394,"value":566},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":397,"value":568},"key-differences-between-tcp-and-udp",{"name":400,"value":570},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":403,"value":572},"what-is-http-and-what-does-it-consist-of",{"name":406,"value":574},"what-are-http-headers-and-why-do-we-need-them",{"name":409,"value":576},"what-are-http-parameters",{"name":412,"value":578},"where-is-the-html-code-located-in-the-http-response-structure",{"name":200,"value":580},"what-is-html",{"name":415,"value":582},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":418,"value":584},"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":421,"value":586},"what-is-a-cookie",{"name":424,"value":588},"who-initiates-the-cookie-recording-in-the-browser",{"name":427,"value":590},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":592,"value":118},"Лайвкодинг",{"name":212,"value":594},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":433,"value":596},"is-everything-that-goes-through-https-secure",{"name":436,"value":598},"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":439,"value":600},"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":451,"value":602},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":448,"value":604},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":454,"value":606},"what-is-blocking-the-page-rendering-in-the-browser",{"name":457,"value":608},"what-is-dom-in-a-browser-what-is-cssom",{"name":460,"value":610},"what-are-nodes-in-the-dom",{"name":463,"value":612},"what-does-cssom-consist-of",{"name":161,"value":614},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":164,"value":616},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":167,"value":618},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":170,"value":620},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":173,"value":622},"there-is-an-html-code-will-font-weight-affect-span",{"name":176,"value":624},"what-are-the-differences-between-flexbox-and-grid",{"name":179,"value":626},"do-flexbox-and-grid-replace-each-other",{"name":182,"value":628},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":145,"value":630},"tasks",{"name":248,"value":632},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":251,"value":634},"what-is-this-in-javascript",{"name":254,"value":636},"what-is-an-event-loop-and-how-does-it-work",{"name":257,"value":638},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":260,"value":640},"what-does-the-typeof-operator-show-in-javascript",{"name":263,"value":642},"what-types-of-data-exist-in-javascript",{"name":266,"value":644},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":269,"value":646},"what-will-typeof-return-for-an-array",{"name":272,"value":648},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":275,"value":650},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":278,"value":652},"what-does-typeof-return-for-new-set-in-javascript",{"name":346,"value":654},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":352,"value":656},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":355,"value":658},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":358,"value":660},"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":361,"value":662},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":379,"value":664},"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":188,"value":666},"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":191,"value":668},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":194,"value":670},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":469,"value":672},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":152,"value":674},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":155,"value":676},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":370,"value":678},"what-is-algorithmic-complexity",{"name":373,"value":680},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":281,"value":682},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":442,"value":684},"how-can-a-user-be-authorized-on-a-website",{"name":284,"value":686},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":475,"value":688},"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":478,"value":690},"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":481,"value":692},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":134,"value":135},{"name":430,"value":695},"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":388,"value":697},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":230,"value":699},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":349,"value":701},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":364,"value":703},"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":705,"copyright":708,"reportError":709,"socialNetwork":711},{"link":706,"title":707},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":710,"link":706},"Сообщить об ошибке",{"label":712,"socialNetworkList":713},"Мы в соцсетях:",[714,717,720],{"icon":26,"link":715,"title":716},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":718,"link":706,"title":719},"ic:baseline-telegram","Telegram",{"icon":721,"link":722,"title":723},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":725,"body":726},{},{"type":727,"children":728},"root",[729,737,750,762,771,776],{"type":730,"tag":731,"props":732,"children":733},"element","p",{},[734],{"type":735,"value":736},"text","Дан массив:",{"type":730,"tag":738,"props":739,"children":743},"pre",{"className":740,"code":742,"language":735},[741],"language-text","const nums = [1,9,4,2,3,6,7,1,5];\n",[744],{"type":730,"tag":745,"props":746,"children":748},"code",{"__ignoreMap":747},"",[749],{"type":735,"value":742},{"type":730,"tag":731,"props":751,"children":752},{},[753,755,760],{"type":735,"value":754},"Необходимо написать функцию ",{"type":730,"tag":745,"props":756,"children":758},{"className":757},[],[759],{"type":735,"value":114},{"type":735,"value":761},", которая принимает аргументом массив чисел и возвращает массив чисел, в котором нечётные числа отсортированы по возрастанию, а чётные оставлены на своих местах:",{"type":730,"tag":738,"props":763,"children":766},{"className":764,"code":765,"language":735},[741],"sortOddNums(nums) // [1,1,4,2,3,6,5,7,9];\n",[767],{"type":730,"tag":745,"props":768,"children":769},{"__ignoreMap":747},[770],{"type":735,"value":765},{"type":730,"tag":731,"props":772,"children":773},{},[774],{"type":735,"value":775},"Примеры:",{"type":730,"tag":738,"props":777,"children":780},{"className":778,"code":779,"language":735},[741],"[1,9,4,2,3,6,7,1,5] --> [1,1,4,2,3,6,5,7,9]\n[1,4,3,7,9,5,2,1,6] --> [1,4,1,3,5,7,2,9,6]\n[5,3,6,234,67,63,212,24,11] --> [3,5,6,234,11,63,212,24,67]\n[1,2,3,4,5,6,7,8,9] --> [1,2,3,4,5,6,7,8,9]\n[10,356,11,258,2,978,3,15,4] --> [10,356,3,258,2,978,11,15,4]\n",[781],{"type":730,"tag":745,"props":782,"children":783},{"__ignoreMap":747},[784],{"type":735,"value":779},{"data":786,"body":787},{},{"type":727,"children":788},[789],{"type":730,"tag":731,"props":790,"children":791},{},[792],{"type":735,"value":15},{"data":794,"body":795},{},{"type":727,"children":796},[797,810],{"type":730,"tag":731,"props":798,"children":799},{},[800,802,808],{"type":735,"value":801},"В JavaScript чаще всего применяется оператор остатка ",{"type":730,"tag":745,"props":803,"children":805},{"className":804},[],[806],{"type":735,"value":807},"%",{"type":735,"value":809},":",{"type":730,"tag":811,"props":812,"children":813},"ul",{},[814,828],{"type":730,"tag":815,"props":816,"children":817},"li",{},[818,820,826],{"type":735,"value":819},"Чётное число: ",{"type":730,"tag":745,"props":821,"children":823},{"className":822},[],[824],{"type":735,"value":825},"n % 2 === 0",{"type":735,"value":827},".",{"type":730,"tag":815,"props":829,"children":830},{},[831,833,839],{"type":735,"value":832},"Нечётное число: ",{"type":730,"tag":745,"props":834,"children":836},{"className":835},[],[837],{"type":735,"value":838},"n % 2 !== 0",{"type":735,"value":827},{"data":841,"body":842},{},{"type":727,"children":843},[844],{"type":730,"tag":731,"props":845,"children":846},{},[847,849,854,856,862,864,870,872,877],{"type":735,"value":848},"Оператор ",{"type":730,"tag":745,"props":850,"children":852},{"className":851},[],[853],{"type":735,"value":807},{"type":735,"value":855}," в JavaScript является оператором остатка, а не математического модуля: результат сохраняет знак делимого. Например, ",{"type":730,"tag":745,"props":857,"children":859},{"className":858},[],[860],{"type":735,"value":861},"-3 % 2",{"type":735,"value":863}," даёт ",{"type":730,"tag":745,"props":865,"children":867},{"className":866},[],[868],{"type":735,"value":869},"-1",{"type":735,"value":871},", и условие нечётности ",{"type":730,"tag":745,"props":873,"children":875},{"className":874},[],[876],{"type":735,"value":838},{"type":735,"value":878}," по-прежнему корректно определяет нечётные числа (остаток не равен нулю).",{"data":880,"body":881},{},{"type":727,"children":882},[883],{"type":730,"tag":731,"props":884,"children":885},{},[886,888,894],{"type":735,"value":887},"Если в массив могут попадать нецелые числа (например, ",{"type":730,"tag":745,"props":889,"children":891},{"className":890},[],[892],{"type":735,"value":893},"3.5",{"type":735,"value":895},"), то понятия «чётное/нечётное» теряют смысл. Для учебной задачи предполагаются целые числа.",{"data":897,"body":898},{},{"type":727,"children":899},[900,913,949,962,967],{"type":730,"tag":731,"props":901,"children":902},{},[903,905,911],{"type":735,"value":904},"У ",{"type":730,"tag":745,"props":906,"children":908},{"className":907},[],[909],{"type":735,"value":910},"Array.prototype.sort()",{"type":735,"value":912}," есть две особенности, которые важны:",{"type":730,"tag":914,"props":915,"children":916},"ol",{},[917,938],{"type":730,"tag":815,"props":918,"children":919},{},[920,922,928,930,936],{"type":735,"value":921},"Без компаратора элементы сортируются как строки (лексикографически), что может дать неправильный порядок для чисел (например, ",{"type":730,"tag":745,"props":923,"children":925},{"className":924},[],[926],{"type":735,"value":927},"100",{"type":735,"value":929}," может оказаться «меньше» ",{"type":730,"tag":745,"props":931,"children":933},{"className":932},[],[934],{"type":735,"value":935},"2",{"type":735,"value":937}," при строковом сравнении).",{"type":730,"tag":815,"props":939,"children":940},{},[941,947],{"type":730,"tag":745,"props":942,"children":944},{"className":943},[],[945],{"type":735,"value":946},"sort()",{"type":735,"value":948}," изменяет массив «на месте», то есть мутация может привести к тому, что исходные данные будут потеряны.",{"type":730,"tag":731,"props":950,"children":951},{},[952,954,960],{"type":735,"value":953},"Отсюда следует правило: для сортировки чисел необходимо передавать компаратор ",{"type":730,"tag":745,"props":955,"children":957},{"className":956},[],[958],{"type":735,"value":959},"(a, b) => a - b",{"type":735,"value":961},", а при необходимости сохранять исходный массив — сортировать копию.",{"type":730,"tag":731,"props":963,"children":964},{},[965],{"type":735,"value":966},"Пример корректной числовой сортировки (демонстрационный):",{"type":730,"tag":738,"props":968,"children":971},{"className":969,"code":970,"language":735},[741],"const arr = [9, 1, 10, 2];\narr.sort((a, b) => a - b); // [1, 2, 9, 10]\n",[972],{"type":730,"tag":745,"props":973,"children":974},{"__ignoreMap":747},[975],{"type":735,"value":970},{"data":977,"body":978},{},{"type":727,"children":979},[980,985,1024,1029,1038],{"type":730,"tag":731,"props":981,"children":982},{},[983],{"type":735,"value":984},"Алгоритм удобно описывать так:",{"type":730,"tag":914,"props":986,"children":987},{},[988,1001,1006],{"type":730,"tag":815,"props":989,"children":990},{},[991,993,999],{"type":735,"value":992},"Выделение: из исходного массива выбираются все нечётные элементы (например, через ",{"type":730,"tag":745,"props":994,"children":996},{"className":995},[],[997],{"type":735,"value":998},"filter",{"type":735,"value":1000}," или циклом).",{"type":730,"tag":815,"props":1002,"children":1003},{},[1004],{"type":735,"value":1005},"Сортировка: полученный список нечётных сортируется по возрастанию числовым компаратором.",{"type":730,"tag":815,"props":1007,"children":1008},{},[1009,1011],{"type":735,"value":1010},"Сборка: создаётся новый массив-результат, в котором:\n",{"type":730,"tag":811,"props":1012,"children":1013},{},[1014,1019],{"type":730,"tag":815,"props":1015,"children":1016},{},[1017],{"type":735,"value":1018},"на позициях с чётными числами остаются исходные значения;",{"type":730,"tag":815,"props":1020,"children":1021},{},[1022],{"type":735,"value":1023},"на позициях с нечётными числами последовательно подставляются элементы из отсортированного списка.",{"type":730,"tag":731,"props":1025,"children":1026},{},[1027],{"type":735,"value":1028},"Схема потока данных (на примере):",{"type":730,"tag":738,"props":1030,"children":1033},{"className":1031,"code":1032,"language":735},[741],"исходный nums:    [1, 9, 4, 2, 3, 6, 7, 1, 5]\nнечётные odds:    [1, 9, 3, 7, 1, 5]\nотсорт. odds:     [1, 1, 3, 5, 7, 9]\nрезультат:        [1, 1, 4, 2, 3, 6, 5, 7, 9]\n",[1034],{"type":730,"tag":745,"props":1035,"children":1036},{"__ignoreMap":747},[1037],{"type":735,"value":1032},{"type":730,"tag":731,"props":1039,"children":1040},{},[1041],{"type":735,"value":1042},"Ключевая идея: чётные значения вообще не перемещаются, изменяются только значения в тех индексах, где изначально стояли нечётные числа.",{"data":1044,"body":1045},{},{"type":727,"children":1046},[1047,1058,1070,1110,1115],{"type":730,"tag":731,"props":1048,"children":1049},{},[1050,1056],{"type":730,"tag":745,"props":1051,"children":1053},{"className":1052},[],[1054],{"type":735,"value":1055},"map()",{"type":735,"value":1057}," проходит массив по индексам слева направо и создаёт новый массив той же длины. Это позволяет на каждом шаге принимать решение: если текущий элемент нечётный, то подставляется следующее значение из отсортированного списка нечётных, иначе возвращается исходное чётное значение.",{"type":730,"tag":731,"props":1059,"children":1060},{},[1061,1063,1069],{"type":735,"value":1062},"Механика указателя ",{"type":730,"tag":745,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":735,"value":1068},"i",{"type":735,"value":809},{"type":730,"tag":811,"props":1071,"children":1072},{},[1073,1090],{"type":730,"tag":815,"props":1074,"children":1075},{},[1076,1081,1083,1089],{"type":730,"tag":745,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":735,"value":1068},{"type":735,"value":1082}," хранит «номер следующего нечётного числа» в отсортированном массиве ",{"type":730,"tag":745,"props":1084,"children":1086},{"className":1085},[],[1087],{"type":735,"value":1088},"odds",{"type":735,"value":827},{"type":730,"tag":815,"props":1091,"children":1092},{},[1093,1095,1101,1103,1108],{"type":735,"value":1094},"Каждый раз при встрече нечётного элемента в исходном массиве берётся ",{"type":730,"tag":745,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":735,"value":1100},"odds[i]",{"type":735,"value":1102},", после чего ",{"type":730,"tag":745,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":735,"value":1068},{"type":735,"value":1109}," увеличивается на 1.",{"type":730,"tag":731,"props":1111,"children":1112},{},[1113],{"type":735,"value":1114},"Фрагмент (демонстрационный):",{"type":730,"tag":738,"props":1116,"children":1119},{"className":1117,"code":1118,"language":735},[741],"let i = 0;\nconst result = nums.map((n) => (n % 2 !== 0 ? odds[i++] : n));\n",[1120],{"type":730,"tag":745,"props":1121,"children":1122},{"__ignoreMap":747},[1123],{"type":735,"value":1118},{"data":1125,"body":1126},{},{"type":727,"children":1127},[1128,1149],{"type":730,"tag":731,"props":1129,"children":1130},{},[1131,1133,1139,1141,1147],{"type":735,"value":1132},"Пусть ",{"type":730,"tag":745,"props":1134,"children":1136},{"className":1135},[],[1137],{"type":735,"value":1138},"n",{"type":735,"value":1140}," — длина массива, ",{"type":730,"tag":745,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":735,"value":1146},"k",{"type":735,"value":1148}," — количество нечётных элементов:",{"type":730,"tag":811,"props":1150,"children":1151},{},[1152,1157],{"type":730,"tag":815,"props":1153,"children":1154},{},[1155],{"type":735,"value":1156},"Время: выделение нечётных — O(n), сортировка нечётных — O(k log k), сборка результата — O(n). Итог: O(n + k log k).",{"type":730,"tag":815,"props":1158,"children":1159},{},[1160],{"type":735,"value":1161},"Память: список нечётных — O(k), новый массив результата — O(n) (если требуется вернуть новый массив).",{"data":1163,"body":1164},{},{"type":727,"children":1165},[1166],{"type":730,"tag":731,"props":1167,"children":1168},{},[1169,1171,1176,1178,1183,1185,1190],{"type":735,"value":1170},"Если нечётных мало (",{"type":730,"tag":745,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":735,"value":1146},{"type":735,"value":1177}," заметно меньше ",{"type":730,"tag":745,"props":1179,"children":1181},{"className":1180},[],[1182],{"type":735,"value":1138},{"type":735,"value":1184},"), сортировка выполняется быстрее, чем сортировка всего массива длины ",{"type":730,"tag":745,"props":1186,"children":1188},{"className":1187},[],[1189],{"type":735,"value":1138},{"type":735,"value":1191},", потому что сортируется только подмножество.",{"data":1193,"body":1194},{},{"type":727,"children":1195},[1196],{"type":730,"tag":811,"props":1197,"children":1198},{},[1199,1217,1252,1264],{"type":730,"tag":815,"props":1200,"children":1201},{},[1202,1204,1209,1211,1216],{"type":735,"value":1203},"Ошибка: сортировка без компаратора ",{"type":730,"tag":745,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":735,"value":946},{"type":735,"value":1210}," для чисел; исправление: обязательно задавать ",{"type":730,"tag":745,"props":1212,"children":1214},{"className":1213},[],[1215],{"type":735,"value":959},{"type":735,"value":827},{"type":730,"tag":815,"props":1218,"children":1219},{},[1220,1222,1227,1229,1235,1237,1243,1245,1251],{"type":735,"value":1221},"Ошибка: вызов ",{"type":730,"tag":745,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":735,"value":946},{"type":735,"value":1228}," на массиве, который нельзя менять; исправление: сортировать копию (",{"type":730,"tag":745,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":735,"value":1234},"slice()",{"type":735,"value":1236},", ",{"type":730,"tag":745,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":735,"value":1242},"[...arr]",{"type":735,"value":1244},") или применять ",{"type":730,"tag":745,"props":1246,"children":1248},{"className":1247},[],[1249],{"type":735,"value":1250},"toSorted()",{"type":735,"value":827},{"type":730,"tag":815,"props":1253,"children":1254},{},[1255,1257,1262],{"type":735,"value":1256},"Ошибка: подмена нечётных чисел без сохранения порядка обхода; исправление: подставлять нечётные строго по порядку индексов слева направо (подходит ",{"type":730,"tag":745,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":735,"value":1055},{"type":735,"value":1263}," или цикл по исходному массиву).",{"type":730,"tag":815,"props":1265,"children":1266},{},[1267],{"type":735,"value":1268},"Ошибка: попытка «переставлять элементы местами» в исходном массиве; исправление: не перемещать чётные вообще, а только заменять значения в нечётных позициях.",{"data":1270,"body":1271},{},{"type":727,"children":1272},[1273],{"type":730,"tag":731,"props":1274,"children":1275},{},[1276,1278,1283,1285,1290,1292,1297],{"type":735,"value":1277},"Кратко: в задаче необходимо сортировать только нечётные элементы, сохраняя чётные на исходных индексах, поэтому решение строится как: сбор нечётных → числовая сортировка ",{"type":730,"tag":745,"props":1279,"children":1281},{"className":1280},[],[1282],{"type":735,"value":959},{"type":735,"value":1284}," → последовательная подстановка обратно в нечётные позиции. Важно помнить, что ",{"type":730,"tag":745,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":735,"value":946},{"type":735,"value":1291}," мутирует массив, поэтому при сохранении исходных данных требуется сортировать копию или использовать ",{"type":730,"tag":745,"props":1293,"children":1295},{"className":1294},[],[1296],{"type":735,"value":1250},{"type":735,"value":827},1775575822702]