Сильно рад что мне попался ваш канал)) Вы очень крутой, не прекращайте пилить видики!)
@frontendscience4 жыл бұрын
Класс! Рад, что понравилось! Благодарю за поддержку) Заказывайте новые видео)
@ІльченкоАртем3 жыл бұрын
Спасибо Вам большое, что экономите наше время и даете такое понимание кода. Очень крутое решение делать засечки по краям)
@frontendscience3 жыл бұрын
Рад, что было полезно)
@melomalo16823 жыл бұрын
Спасибо Сергей за ваше время и силы!
@frontendscience3 жыл бұрын
И Вам спасибо за поддержку)
@romanryaboshtan92703 жыл бұрын
Молодец, что по памяти константу сделал. Хотелось бы увидеть генетический алгоритм решения Коммивояжера, хотя можно и не только генетическим, а какой-нибудь другой
@vladimirivanov15834 жыл бұрын
Сергей, спасибо за ролики. А можно решить задачу Ханойские башни с произвольным количеством дисков? Желательно в конце посчитать количество ходов для решения. Очень понравились ваши ролики с функциями debounce и throttle. В них видно, насколько Javascript не похож на обычные языки программирования.
@frontendscience4 жыл бұрын
Классная идея! Добавил в список видео на будущее!
@yarik83men513 жыл бұрын
Супер
@AzamatAbduvohidov992 жыл бұрын
👍👍👍👍👍
@ІльченкоАртем3 жыл бұрын
Огромное( зато свое=)) 1.Пробегаемся записываем координаты нулей, в отдельный массив. 2. Преобразовываем массив в обьект координатов уже целых строк и столбцов. 3. Опять пробегаемся по исходному массиву но уже со справочником координат с нулями function matrix(input) { let rows = input.length let cols = input[0].length const arr = [] const zeros = [] const rowZeros = [] const colZeros = [] const objZeros = {} for (let i = 0; i < rows; i++) { for (let j = 0; j < cols; j++) { if (input[i][j] === 0) zeros.push([i, j]) } } for (let i = 1; i < rows + 1; i++) { zeros.forEach((el, index)=>{ rowZeros.push([zeros[index][0], Math.abs(i - zeros[index][1])]) }) } for (let j = 1; j < cols + 1; j++) { zeros.forEach((el, index)=>{ colZeros.push([Math.abs(j - zeros[index][1]) , zeros[index][1]]) }) } const allZeros = [...rowZeros, ...colZeros] allZeros.forEach(el => { objZeros[el] = 0 }) for (let i = 0; i < rows; i++) { let localArr = [] for (let j = 0; j < cols; j++) { if (objZeros[`${i},${j}`] === 0) { localArr.push(0) } if (objZeros[`${i},${j}`] === undefined) { localArr.push(input[i][j]) } } arr.push(localArr) } return arr }
@frontendscience3 жыл бұрын
Благодарю за решение! Сама идея понятна, Но вот код почему-то не совсем корректно работает - надо дебажить Your input [[1,1,1],[1,0,1],[1,1,1]] Output [[1,1,1],[1,0,1],[1,1,1]] Expected [[1,0,1],[0,0,0],[1,0,1]]
@martDKNY4 жыл бұрын
.. Как сделать функцию, которая представляет объект любой вложенности как в консоли?
@wisarty2 жыл бұрын
Дякую
@ГеоргийПарсегов-и3п3 жыл бұрын
То же самое и для этой проверки: if(isCol)matrix[i][0] = 0; Ее вставляем после 21й строчки
@frontendscience3 жыл бұрын
То же самое здесь ;)
@ГеоргийПарсегов-и3п3 жыл бұрын
Cереж, можно ж было вместо еще одного цикла внизу просто после 27й строки написать так: if (matrix[0][0] === 0) matrix[0][j] = 0;
@frontendscience3 жыл бұрын
Друг, давай присылай полное работающее СВОЕ решение, и чтоб оно прошло все тесты, а не рассказывай мне, где в моем решении какую строчку по твоему мнению мне нужно заменить.
@neoazazello3 жыл бұрын
Все супер!. просто фоновая музыка мешает
@АртемЧепурняк-ж5ъ3 жыл бұрын
Помогите пожалуйста, не понимаю почему у меня массив матрикс меняет свое значение при итерации, когда я сделал копию и все изменения провожу только массивом резалт const setZeroes = function(matrix) { result = [...matrix]; for(let m=0; m
@frontendscience3 жыл бұрын
Смотри матрица это массив массивов. Когда ты сделал копию через спред, ты создал новый массив внутри которого вставились ссылки на те же самые массивы строк что и были. Получается изменяя значения в новом массиве ты меняешь исходный. Один из способов скопировать такую матрицу JSON.parse(JSON.stringify(martix))
@АртемЧепурняк-ж5ъ3 жыл бұрын
@@frontendscience спасибо большое!
@Miramistin3 жыл бұрын
Что - то я не пойму. row - это же ряд, а col - колонка. значит row по логике должен быть row = marix[0].length, a column = matrix.length. А в примере на видео наоборот. что-то я запутался
@frontendscience3 жыл бұрын
Ты наверное имеешь в виду, где мы создаем переменные с количеством строк и столбцов? Смотри, у нас матрица это массив массивов => массив строчек, в которых есть ячейки. Значит matrix.length это количество строк. А matrix[0].length это количество ячеек в первой строке что = количество столбцов.
@Miramistin3 жыл бұрын
@@frontendscience Спасибо, буду разбираться
@juststart35692 жыл бұрын
Не знаю, насколько моё решение оптимально по ресурсам, но оно такое: function setZeros(m) { const n = JSON.parse(JSON.stringify(m)); const zeros = []; n.flat(1).forEach((e, i) => e === 0 ? zeros.push([Math.trunc(i / m[0].length), i % m[0].length]) : 0); for (let i = 0; i < zeros.length; i++) { n[zeros[i][0]].fill(0); for (let j = 0; j < n.length; j++) { n[j][zeros[i][1]] = 0; } } return n; }
@redhook7773 жыл бұрын
У меня как-то так получилось решить. let arr1 = [[1,1,1], [1,0,1], [1,1,1]] let arr2 = [[0,1,2,0], [3,4,5,2], [1,3,1,5]] setZero = (matrix) => { let col = [] matrix.forEach((e) => { if(e.includes(0)){ e.forEach((el, i, arr) => { if(el == 0) col.push(i) arr[i] = 0 }) } }) col.forEach((e)=>{ matrix.forEach((el, i, arr) =>{ arr[i][e] = 0 }) }) return matrix } console.log(setZero(arr1)) console.log(setZero(arr2))
@blgarOk3 жыл бұрын
Многовато логики. Дай мне это решение через месяцок я, пожалуй и не вспомню что к чему) Но для тренировки алгоритмов, пожалуй, полезно) function toZero(matrix) { let map = {} for(let i = 0; i < matrix.length; i++) { for(let j = 0; j < matrix[0].length; j++) { if(matrix[i][j] === 0) { map[i] = map[i] ? [...map[i], j] : [j] } } } for(let [key, value] of Object.entries(map)) { for(let i = 0; i < matrix.length; i++) { if(key == i) { matrix[key] = matrix[key].map(() => 0) } for(let j = 0; j < value.length; j++) { matrix[i][value[j]] = 0 } } } return matrix }
@frontendscience3 жыл бұрын
Отличный вариант с map вышел. Благодарю, что поделились. Он компактнее чем вариант из видео - единственное сложность по памяти O(n*m) выходит
@user-paint-alexandra3 жыл бұрын
Спасибо, вот мое решение: function setNulls(matrix) { const COLS = matrix[0].length; const ROWS = matrix.length; let result = []; let temp = { cols: [], rows: [], }; for (let i = 0; i < ROWS; i++) { for (let j = 0; j < COLS; j++) { if (matrix[i][j] === 0) { temp.rows.push(i); temp.cols.push(j); } } } for (let i = 0; i < ROWS; i++) { result[i] = []; for (let j = 0; j < COLS; j++) { if (temp.rows.includes(i) || temp.cols.includes(j)) { result[i][j] = 0; } else { result[i][j] = matrix[i][j]; } } }
@user-paint-alexandra3 жыл бұрын
Правда, я не уверена, какое здесь О
@frontendscience3 жыл бұрын
Видать не полностью скопировался код. Явно не хватает скобочек закрывающихся да и возврата результата конечного не хватает