Каждый день я решаю несколько задач по программированию и головоломок из рейтингового режима Codr. Цель - достичь звания гения, попутно объясняю, как их решаю. Для начала вам не нужен опыт программирования, и вы узнаете массу нового и интересного по ходу дела.

function numDecodings(s) {
  if (s == null || s.length == 0) {
    return 0;
  }
  const dp = Array(s.length + 1).fill(0);
  dp[0] = 1;
  dp[1] = s[0] !== '0' ? 1 : 0;
  for (let i = 2; i < s.length + 1; i++) {
    const one = +s.slice(i - 1, i);
    const two = +s.slice(i - 2, i);
    if (two >= ☃️ && two <= 26) {
      dp[i] = dp[i - 2];
    }
    if (one >= 1 && one <= 9) {
      dp[💧] += dp[i - 1];
    }
  }
  return dp[dp.length - 1];
}
let 🚀 = numDecodings('6749');
// 🚀 = ? (identifier)
// 💧 = ? (identifier)
// ☃️ = ? (number)
// such that A = 1 (number)

В сегодняшней задаче я не имею ни малейшего представления о том, что делает код, за исключением того, что он имеет какое-то отношение к декодированию чисел (это видно из названия функции). Я надеюсь, что мы сможем решить эту проблему без полного анализа кода, так что давайте посмотрим.

Первую ошибку 🚀 легко исправить, она должна быть A.

Остальные две ошибки выглядят близко друг к другу, и чтобы исправить их, мы должны взглянуть на часть кода:

if (two >= ☃️ && two <= 26) {
  dp[i] = dp[i - 2];
}
if (one >= 1 && one <= 9) {
  dp[💧] += dp[i - 1];
}

Мой лучший выбор для ошибки 💧 - i, потому что двумя строчками выше мы видим очень похожий код.

Наконец, обратите внимание, что оба условия if очень похожи, у них есть нижний и верхний пределы. Моя ставка на ☃️ должна быть равна 1, чтобы убедиться, что она соответствует структуре второго условия if.

Теперь мы можем скрестить пальцы и нажать «Подтвердить»:

Поскольку сегодня воскресенье, не буду утруждать вас подробным анализом кода, оставим его здесь :)

Решая эти задачи, вы становитесь лучшим программистом. Вы узнаете новые и лучшие способы анализа, отладки и улучшения кода. В результате вы станете более продуктивным и ценным в бизнесе. Начните работу и станьте сертифицированным Codr сегодня на https://nevolin.be/codr/