Advent JS 2021 - Dias 16 a 20

Día 16: “Descrifrando los números…"

Dificultad: Fácil

Para este día la única dificultad era encontrar el algoritmo que resuelve este problema. Como se puede ver en la mayoría de mis soluciones soy bastante fan de usar reduce lo máximo posible ya que nos permite resolver sin variables intermedias y con funciones puras.

Día 17: “La locura de envias paquetes en esta época”

Dificultad: Difícil

Pese a ser clasificado como difícil a mi personalmente me pareció de los más sencillos y esto pese a que hace tiempo hubiera sido imposible de resolver para mi.

La clave estaba en la recursion ya que permite en muy pocas líneas resolver un problema que por recursión podría ser un calvario.

function countPackages(carriers, carrierID) {
  const [_, items, team] = carriers.find((c) => c[0] === carrierID);
  const extra = team.reduce((acc, c) => acc + countPackages(carriers, c), 0);
  return items + extra;
}

Día 18: “El sistema operativo de Santa Claus”

Dificultad: Fácil

Ejercicio sencillo para usar mapas que nos permitan mantener el número de ítems repetidos por cada tipo y usar este valor para luego renombrarlos (nuevamente haciendo uso de reduce).

Día 19: “¿Qué deberíamos aprender en Platzi?"

Dificultad: Normal

Un dia mas para practicar la recursión para poder resolver el problema, en esta ocasión necesitábamos obtener un pareja de números cuya suma sea la mayor posible sin sobrepasar un valor máximo.

function learn(time, courses) {
  let candidates = null;
  let max = 0;
  for (let i = 0; i < courses.length; i++) {
    for (let j = i + 1; j < courses.length; j++) {
      const total = courses[i] + courses[j];
      if (total === time) return [i, j];
      if (courses[i] + courses[j] < time && max < total) {
        max = total;
        candidates = [i, j];
      }
    }
  }
  return candidates;
}

Día 20: “¿Una carta de pangramas? ¡QUÉ!"

Dificultad: Fácil

Un pangrama una palabra que usa todas las letras posibles del alfabeto.

Este es uno de los ejercicios tipicos que todos hemos hecho alguna vez cuando estamos empezando a programar. Como ya te puedes imaginar hay mil manera de resolverlo, en mi caso opte por hacer uso de la clase Set que nos permite eliminar duplicados apartir de un array de tal forma que podamos validar que el numero de letras sea exactamente igual al numero de letras en el alfabeto.

 const newLetter = letter
    .toLowerCase()
    .replace(/[áä]/g, 'a')
    .replace(/[éë]/g, 'e')
    .replace(/[íï]/g, 'i')
    .replace(/[óö]/g, 'o')
    .replace(/[úü]/g, 'u')
  return new Set(newLetter.match(/[a-zñ]/g)).size > 26;

…Continua aquí