Skip to content

Instantly share code, notes, and snippets.

@Angelfire
Last active December 7, 2021 19:11
Show Gist options
  • Save Angelfire/4ad480c0453f3af3fda21acc0e4941b8 to your computer and use it in GitHub Desktop.
Save Angelfire/4ad480c0453f3af3fda21acc0e4941b8 to your computer and use it in GitHub Desktop.
AdventJS

AdventJS

¡Cada día un nuevo reto! Arranca el 1 de diciembre y hasta el 25 de diciembre, todos los días, un reto nuevo para que lo soluciones con JavaScript. ¡Compite con tus amigos!

  • Día 1: Contando ovejas para dormir
  • Día 2: ¡Ayuda al elfo a listar los regalos!
  • Día 3: El Grinch quiere fastidiar la Navidad
  • Día 4: ¡Es hora de poner la navidad en casa!
  • Día 5: Contando los días para los regalos
  • Día 6: Rematando los exámenes finales
  • Día 7: Buscando en el almacén
// Mi amigo Dani está trabajando en una tienda y con la llegada de las navidades tiene el almacén hecho un desastre y
// no encuentra nada.
// Vamos a crear una función contains que recibe dos parámetros: un objeto que define el almacén y el producto que buscamos.
// La función debe devolver un booleano que indique si se encuentra el string como valor en algún nivel del objeto.
// Helper function to flat a JavaScript object using the pattern: parent_key_value
function flattenObj(obj, parent, res = {}){
for(let key in obj){
let propName = parent ? parent + '_' + key : key
if(typeof obj[key] === 'object'){
flattenObj(obj[key], propName, res)
} else {
res[propName] = obj[key];
}
}
return res;
}
function contains(store, product) {
const plainObj = flattenObj(store)
const arraObjVal = Object.values(plainObj)
if (arraObjVal.includes(product)) return true
return false
}
// const almacen = {
// 'estanteria1': {
// 'cajon1': {
// 'producto1': 'coca-cola',
// 'producto2': 'fanta',
// 'producto3': 'sprite'
// }
// },
// 'estanteria2': {
// 'cajon1': 'vacio',
// 'cajon2': {
// 'producto1': 'pantalones',
// 'producto2': 'camiseta' // <- ¡Está aquí!
// }
// }
// }
// Considera una lista/array de ovejas. Cada oveja tiene un nombre y un color.
// Haz una función que devuelva una lista con todas las ovejas que sean de color rojo y
// que su nombre contenga las letras n y a, sin importar el orden, las mayúsculas o espacios.
function contarOvejas(ove) {
return ove
.filter(ov => ov.color === 'rojo')
.filter(ov => ov.name.match(/(na)/i))
}
// const ovejas = [
// { name: 'Noa', color: 'azul' },
// { name: 'Euge', color: 'rojo' },
// { name: 'Navidad', color: 'rojo' },
// { name: 'Ki Na Ma', color: 'rojo'},
// { name: 'Ki Ma Ma', color: 'rojo' }
// ]
function createXmasTree(height) {
// ¡Y no olvides también poner los turrones!
return ''
}
// Con la emoción, ya estamos empezando a contar los días del calendario hasta el 25 de diciembre 📆.
// Para ayudar a esto, vamos a crear una función que pasándole una instancia de Date nos diga el número de días que faltan.
function daysToXmas(date) {
const xmasDate = new Date('Dec 25, 2021')
date.setHours(0, 0, 0, 0)
return (xmasDate.getTime() - date.getTime()) / (1000 * 60 * 60 * 24)
}
// const date1 = new Date('Dec 1, 2021')
// daysToXmas(date1) // 24
// const date2 = new Date('Dec 24, 2021 00:00:01')
// daysToXmas(date2) // 1
// const date3 = new Date('Dec 24, 2021 23:59:59')
// daysToXmas(date3) // 1
// const date4 = new Date("December 20, 2021 03:24:00")
// daysToXmas(date4) // 5
// const date5 = new Date('Dec 26, 2021')
// daysToXmas(date1) // -1
// const date6 = new Date('Dec 31, 2021')
// daysToXmas(date2) // -6
// const date7 = new Date('Jan 1, 2022 00:00:01')
function isValid(letter) {
// ¡No dejes que el Grinch gane!
return true
}
// Te ha llegado una carta ✉️ con todos los regalos que debes preparar. El tema es que es una cadena de texto
// y es muy difícil de leer 😱. ¡Menos mal que han puesto cada regalo separado por espacio! (aunque ten cuidado,
// porque al ser niños, igual han colado más espacios de la cuenta)
// Encima nos hemos dado cuenta que algunas palabras vienen con un _ delante de la palabra, por ejemplo _playstation,
// que significa que está tachado y no se tiene que contar.
// Transforma el texto a un objeto que contenga el nombre de cada regalo y las veces que aparece.
function listGifts(letter) {
const arrayGifts = letter.split(' ')
const count = {}
const filterUndesired = arrayGifts
.filter(gift => /^(?!_)/.test(gift))
.filter(gift => gift)
for (const num of filterUndesired) {
count[num] = count[num] ? count[num] + 1 : 1
}
return count
}
// const carta = "bici coche balón _playstation bici coche peluche";
// Antes de poder disfrutar de la navidad... nos toca terminar de rematar los exámenes finales.
// ¡Y toca un poco de matemáticas! 😱
// A una función se le pasan dos parámetros: un Array con números y el resultado que se espera.
// La función debe devolver los dos valores del Array que sumen el resultado esperado. Como a veces pueden haber más de dos
// valores que sumen, se devolverá el primero empezando por la izquierda que encuentre otro par,
// sin importar lo lejos que esté a la derecha.
// Si no se encuentra, se devuelve null.
// El resultado tiene que ser un array con dos números.
// Using brute force
function sumPairs(numbers, result) {
for (let i = 0; i < (numbers.length - 1); i++) {
for (let j = (i + 1); j < numbers.length; j++) {
if (numbers[i] + numbers[j] === result) {
return [numbers[i], numbers[j]]
}
}
}
return null
}
// sumPairs([3, 5, 7, 2], 10) // [3, 7]
// sumPairs([-3, -2, 7, -5], 10) // null
// sumPairs([2, 2, 3, 1], 4) // [2, 2]
// sumPairs([6, 7, 1, 2], 8) // [6, 2]
// sumPairs([0, 2, 2, 3, -1, 1, 5], 6) // [1, 5]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment