Инверсная капча


Advent of Code 2017 День 1

Часть 1

  1. Циклические списки с самого начала!
  2. Написание моего рабочего алгоритма

Циклические списки с самого начала!

  • Я знал, что эта тема повторялась в течение всего года.
  • Но я не знал, что она началась с первого дня.

Написание моего рабочего алгоритма

Набросок моего алгоритма

Split the input into an array of numbers
For each number
  Accumulate a sum, starting a 0
    If the next number (wrapping if necessary) is the same number
      Increment the sum by the number at the current index
    Otherwise, increment the sum by 0...leaving it unchanged
Вход в полноэкранный режим Выход из полноэкранного режима

reduce(), который использует все возможные параметры:

return input
  .split('')
  .map(Number)
  .reduce((acc, curr, index, RA) =>
    acc += RA[index] == RA[(index + 1) % RA.length]
        ? curr : 0
  , 0)
Вход в полноэкранный режим Выход из полноэкранного режима

Часть 2

Корректировка моего рабочего алгоритма

Вместо того чтобы проверять следующий индекс, я буду проверять индекс через половину списка.

Набросок моего алгоритма

Split the input into an array of numbers
For each number
  Accumulate a sum, starting a 0
    If the number half a list length away (wrapping if necessary) is the same number
      Increment the sum by the number at the current index
    Otherwise, increment the sum by 0...leaving it unchanged
Вход в полноэкранный режим Выход из полноэкранного режима

Небольшая корректировка числа, добавляемого к index, и вуаля!

return input
  .split('')
  .map(Number)
  .reduce((acc, curr, index, RA) =>
    acc += RA[index] == RA[(index + (RA.length / 2)) % RA.length]
        ? curr : 0
  , 0)
Вход в полноэкранный режим Выход из полноэкранного режима

Я сделал это!!!

  • Я решил обе части!
  • Используя один длинный оператор, состоящий из цепочки методов массива!
  • Где обе части отличаются только одним операндом!

Год в обзоре

Поскольку я работал в обратном порядке, сегодня я впервые увидел эту анимацию:

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

  • 21 день с двумя звездами! Новый личный рекорд!
  • 4 однозвездочных дня! Новый личный рекорд!
  • 0 беззвездных дней! Новый личный рекорд!
  • Построено 8 тренажеров! Ничья с 2018 годом по наименьшему количеству.
  • Тонны созданных GIF… многие из которых помогли мне решить головоломку!

Это был взрывной 2017 год!

Оцените статью
devanswers.ru
Добавить комментарий