Квадраты с тремя сторонами


Адвент кода 2016 День 3

Часть 1

Три суммы и три сравнения

Мне нужно определить, какие трехсторонние фигуры являются правильными треугольниками.

Доказательство правильного треугольника, согласно инструкциям:

сумма любых двух сторон должна быть больше, чем оставшаяся сторона.

Это кажется лучшим — возможно, единственным? — подход:

 |
 |   
 |  
A|    B
 |    
 |_____
    C

A + B > C?
A + C > B?
B + C > A?
Войти в полноэкранный режим Выйти из полноэкранного режима

Мой алгоритм на JavaScript:

input.reduce((valids, triangle) => {
  let [A,B,C] = [...triangle.matchAll(/d+/g)].map(el => +el[0])
  return valids += (
    A + B > C && 
    A + C > B &&
    B + C > A
  ) ? 1 : 0
}, 0)
Войти в полноэкранный режим Выход из полноэкранного режима

Он сгенерировал правильный ответ для части 1!

Часть 2

Столбцы вместо строк

Забавный поворот, который потребует вложенных циклов for вместо одного reduce().

Мой алгоритм в виде псевдокода:

Extract the digits from each line
  Generate a 3-element array in place of the string

Set valid count as 0

For each 3-element array except the last two, skipping two each time
  For each element in the array
    Generate a 3-element array containing the numbers in the same position as the element in the array...from the current and next two arrays
    Increment valid count by 1 only if each pair of side lengths is greater than the non-included side

Return valid count
Вход в полноэкранный режим Выход из полноэкранного режима

Мой алгоритм на JavaScript:

let sides = input.map(
  line => [...line.matchAll(/d+/g)].map(el => +el[0])
)
let valids = 0
for (let row = 0; row < sides.length - 2; row += 3) {
  for (let col = 0; col < 3; col++) {
    let [A,B,C] = sides.slice(row, row + 3).map(el => el[col])
    valids += (
      A + B > C && 
      A + C > B &&
      B + C > A
    ) ? 1 : 0
  }
}
return valids
Войти в полноэкранный режим Выход из полноэкранного режима

Он сгенерировал правильный ответ для части 2!

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

  • Я решил обе части!
  • Я использовал свое растущее знакомство с regex, reduce() и несколькими техниками работы с массивами!
  • За исключением 11-го дня, я продолжаю серию из 2 звезд с 22-го дня!

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