Молодец, что по памяти константу сделал. Хотелось бы увидеть генетический алгоритм решения Коммивояжера, хотя можно и не только генетическим, а какой-нибудь другой
Сергей, спасибо за ролики. А можно решить задачу Ханойские башни с произвольным количеством дисков? Желательно в конце посчитать количество ходов для решения. Очень понравились ваши ролики с функциями debounce и throttle. В них видно, насколько Javascript не похож на обычные языки программирования.
Благодарю за решение! Сама идея понятна, Но вот код почему-то не совсем корректно работает - надо дебажить 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]]
Помогите пожалуйста, не понимаю почему у меня массив матрикс меняет свое значение при итерации, когда я сделал копию и все изменения провожу только массивом резалт const setZeroes = function(matrix) { result = [...matrix]; for(let m=0; m
Смотри матрица это массив массивов. Когда ты сделал копию через спред, ты создал новый массив внутри которого вставились ссылки на те же самые массивы строк что и были. Получается изменяя значения в новом массиве ты меняешь исходный. Один из способов скопировать такую матрицу JSON.parse(JSON.stringify(martix))
Друг, давай присылай полное работающее СВОЕ решение, и чтоб оно прошло все тесты, а не рассказывай мне, где в моем решении какую строчку по твоему мнению мне нужно заменить.
Что - то я не пойму. row - это же ряд, а col - колонка. значит row по логике должен быть row = marix[0].length, a column = matrix.length. А в примере на видео наоборот. что-то я запутался
Ты наверное имеешь в виду, где мы создаем переменные с количеством строк и столбцов? Смотри, у нас матрица это массив массивов => массив строчек, в которых есть ячейки. Значит matrix.length это количество строк. А matrix[0].length это количество ячеек в первой строке что = количество столбцов.
Сильно рад что мне попался ваш канал)) Вы очень крутой, не прекращайте пилить видики!)
Класс! Рад, что понравилось! Благодарю за поддержку)
Заказывайте новые видео)
Спасибо Вам большое, что экономите наше время и даете такое понимание кода. Очень крутое решение делать засечки по краям)
Рад, что было полезно)
Спасибо Сергей за ваше время и силы!
И Вам спасибо за поддержку)
Молодец, что по памяти константу сделал. Хотелось бы увидеть генетический алгоритм решения Коммивояжера, хотя можно и не только генетическим, а какой-нибудь другой
Сергей, спасибо за ролики. А можно решить задачу Ханойские башни с произвольным количеством дисков? Желательно в конце посчитать количество ходов для решения. Очень понравились ваши ролики с функциями debounce и throttle. В них видно, насколько Javascript не похож на обычные языки программирования.
Классная идея! Добавил в список видео на будущее!
.. Как сделать функцию, которая представляет объект любой вложенности как в консоли?
Огромное( зато свое=)) 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
}
Благодарю за решение! Сама идея понятна, Но вот код почему-то не совсем корректно работает - надо дебажить
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]]
Супер
Помогите пожалуйста, не понимаю почему у меня массив матрикс меняет свое значение при итерации, когда я сделал копию и все изменения провожу только массивом резалт
const setZeroes = function(matrix) {
result = [...matrix];
for(let m=0; m
Смотри матрица это массив массивов. Когда ты сделал копию через спред, ты создал новый массив внутри которого вставились ссылки на те же самые массивы строк что и были. Получается изменяя значения в новом массиве ты меняешь исходный. Один из способов скопировать такую матрицу JSON.parse(JSON.stringify(martix))
@@frontendscience спасибо большое!
👍👍👍👍👍
Дякую
То же самое и для этой проверки: if(isCol)matrix[i][0] = 0; Ее вставляем после 21й строчки
То же самое здесь ;)
Cереж, можно ж было вместо еще одного цикла внизу просто после 27й строки написать так: if (matrix[0][0] === 0) matrix[0][j] = 0;
Друг, давай присылай полное работающее СВОЕ решение, и чтоб оно прошло все тесты, а не рассказывай мне, где в моем решении какую строчку по твоему мнению мне нужно заменить.
Все супер!. просто фоновая музыка мешает
Что - то я не пойму. row - это же ряд, а col - колонка. значит row по логике должен быть row = marix[0].length, a column = matrix.length. А в примере на видео наоборот. что-то я запутался
Ты наверное имеешь в виду, где мы создаем переменные с количеством строк и столбцов? Смотри, у нас матрица это массив массивов => массив строчек, в которых есть ячейки. Значит matrix.length это количество строк. А matrix[0].length это количество ячеек в первой строке что = количество столбцов.
@@frontendscience Спасибо, буду разбираться
Не знаю, насколько моё решение оптимально по ресурсам, но оно такое:
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;
}
У меня как-то так получилось решить.
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))
Многовато логики. Дай мне это решение через месяцок я, пожалуй и не вспомню что к чему) Но для тренировки алгоритмов, пожалуй, полезно)
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
}
Отличный вариант с map вышел. Благодарю, что поделились. Он компактнее чем вариант из видео - единственное сложность по памяти O(n*m) выходит
Спасибо, вот мое решение:
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];
}
}
}
Правда, я не уверена, какое здесь О
Видать не полностью скопировался код. Явно не хватает скобочек закрывающихся да и возврата результата конечного не хватает