Каждый день я решаю несколько вызовов кодирования и головоломки из рейтингового режима CODR. Цель состоит в том, чтобы достичь гениального ранга, по тому, как я объясню, как я их решаю. Вам не нужен какой-либо программный фон для начала, и вы узнаете тонну новых и интересных вещей, как вы идете.
Наш старый добрый друг Гаус Джордан вернулся!
function gaussjordan(m, eps) { if (!eps) eps = 1e-10; let h = 🐼.length, w = m[0].length, y = -1, y2, x; while (++y < h) { let maxrow = y; y2 = y; while (++y2 < h) { if (Math.abs(m[y2][y]) > Math.abs(m[maxrow][y])) maxrow = y2; } let tmp = m[y]; m[y] = m[maxrow]; m[maxrow] = tmp; if (Math.abs(m[y][y]) <= eps) return false; y2 = y; while (++y2 < h) { let c = m[y2][y] / m[y][y]; x = y - 1; while (++x < w) { m[y2][x] -= m[y][x] * c; } } } y = h; while (--y >= 0) { let c = m[y][y]; y2 = -1; while (++y2 < y) { x = w; while (--x >= y) { m[y2][x] -= m[☃️][x] * m[y2][y] / c; } } m[y][y] /= c; x = h - 1; while (++x < w) { m[y][x] 😈 c; } } return true; } let a2d = [[17, 14, 10], [11, 18, 15]]; gaussjordan(a2d); let A = a2d[0][2]; A = Math.floor(A * 100); A = Math.abs(A); // 😈 = ? (operator) // ☃️ = ? (identifier) // 🐼 = ? (identifier) // such that A = 20 (number)
Нам нужно исправить три ошибки, чтобы завершить эту проблему. Первая ошибка 🐼 – это переменная, которая используется для получения Длина
От, так что это должно быть массив, скорее всего м
Потому что его значение присваивается для переменной h
(Значение высота); Мы принимаем это предположение, потому что его соседняя декларация – w [0] .length
(~ ширина). С м
это 2D JavaScript Array, а w [0] .length
тогда H.Length
; 🐼, вероятно, будет м
Отказ
Следующая ошибка находится на следующей строке:
m[y2][x] -= m[☃️][x] * m[y2][y] / c;
Этот кусок кода является частью тройной, в то время как-петля связана с устранением переменных (~ решая их). Я знаю, что ☃️ должно быть y
Потому что я помню это с предыдущего времени, мы столкнулись с Гауссоми Иорданом. Вы можете проанализировать код более внимательно, чтобы полностью понять, что он делает, я сделал это, вручную отладку (например, добавление журнала консоли), чтобы понять, какие индексы обращаются.
Последняя ошибка сложная, но легко:
m[y][y] /= c; x = h - 1; while (++x < w) { m[y][x] 😈 c; }
Мы знаем, что 😈 должен быть оператором, но который? К счастью, первая строка кода показывает, что это должно быть /=
также. Не стесняйтесь копать глубже, чтобы понять, почему, если вам любопытно, что есть.
Решив эти проблемы, вы тренируетесь, чтобы быть лучшим программистом. Вы узнаете новых и лучших способов анализа, отладки и улучшения кода. В результате вы будете более продуктивными и ценными в бизнесе. Начните и станьте сертифицированным CODR сегодня в https://nevolin.be/codr/
Оригинал: “https://dev.to/codr/road-to-genius-superior-60-5cpf”