Last active
December 25, 2021 17:35
-
-
Save juanjmerono/b5a5ceaf0ec131e2d97a623e3765e023 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ****************** | |
// DAY 01 | |
// ****************** | |
export default function contarOvejas(ovejas) { | |
// aquí tu magia | |
return ovejas.filter(ov => | |
ov.name.toLowerCase().indexOf('n')>=0 | |
&& | |
ov.name.toLowerCase().indexOf('a')>=0 | |
&& | |
ov.color === 'rojo' | |
? | |
ov:null | |
); | |
} | |
// ****************** | |
// DAY 02 | |
// ****************** | |
export default function listGifts(letter) { | |
let ob = {}; | |
letter.split(' ') | |
.filter(i=>!i.startsWith('_') && i.length).forEach(j=> | |
ob[j.trim()] = (ob[j.trim()] || 0) + 1 | |
); | |
return ob; | |
} | |
// ****************** | |
// DAY 03 | |
// ****************** | |
export default function isValid(letter) { | |
return letter | |
.split(' ') | |
.filter(k => | |
(k.indexOf("(") !== -1 || k.indexOf(")") !== -1) | |
&& !/^\([^\(\)]+\)$/.test(k)) | |
.length==0; | |
} | |
// ****************** | |
// DAY 04 | |
// ****************** | |
export default function createXmasTree(height) { | |
let width = (2*height)-1; | |
let tree = Array(height+2).fill(0).map((_,j)=>{ | |
let i = j >= height ? 0 : j; | |
let fillChars = '_'.repeat((width - (2*(i+1) - 1))/2); | |
let line = fillChars + '*'.repeat((2*(i+1))-1) + fillChars; | |
return j >= height ? line.replace('*','#') : line; | |
}).reduce((k,p) => k + '\n' + p); | |
return tree; | |
} | |
// ****************** | |
// DAY 05 | |
// ****************** | |
export default function daysToXmas(date) { | |
return Math.ceil((new Date('Dec 25, 2021') - date)/(24*60*60*1000)); | |
} | |
// ****************** | |
// DAY 06 | |
// ****************** | |
export default function sumPairs(n, r) { | |
let d = n.map((i,j)=> | |
j<n.length // Ignore last number | |
&& | |
n.findIndex(l=>l===i)===j // Ignore if you check number before | |
? | |
[i,n.slice(j+1).find(p=>r-i===p)] // i,other => i + other == r | |
:null) //Otherwise null | |
.filter(k=>k&&k[1]); // Ignore items without result | |
return d.length?d[0]:null; // Return null for empty arrays | |
} | |
// ****************** | |
// DAY 07 | |
// ****************** | |
export default function contains(store, product) { | |
return Object.values(store) | |
.map(k => (typeof k === 'object') ? | |
contains(k, product) : k === product) | |
.indexOf(true) >= 0; | |
} | |
// ****************** | |
// DAY 08 | |
// ****************** | |
export default function maxProfit(prices) { | |
return prices | |
.map((i,j)=> j<prices.length-1?(prices[j+1]-i):-1) | |
.reverse() | |
.reduce((a,b)=>a+b>=-1?((a===-1 && a+b>-1)?a+b+1:a+b):Math.max(a,b)); | |
} | |
// ****************** | |
// DAY 09 | |
// ****************** | |
export default function groupBy(collection, it) { | |
return collection.reduce((p,c)=>{ | |
let grp = (it instanceof Function)?it(c):c[it]; | |
p[grp] = p[grp] || []; | |
p[grp].push(c); | |
return p; | |
},{}); | |
} | |
// ****************** | |
// DAY 10 | |
// ****************** | |
export default function getCoins(change) { | |
let coins = [50,20,10,5,2,1]; | |
return coins | |
.reduce((p,c)=>{ | |
let t = Math.floor(p[0]/c); | |
p[0] = p[0] - c*t; | |
p.push(t>0?t:0); | |
return p; | |
},[change]).slice(1).reverse(); | |
} | |
// ****************** | |
// DAY 11 | |
// ****************** | |
export default function shouldBuyFidelity(times) { | |
let normal = 12 * times; | |
let fidelidad = (p,t) => { | |
let discount = p*0.75; | |
return t==0?250:discount+fidelidad(discount,t-1); | |
}; | |
return fidelidad(12,times) < normal; | |
} | |
// ****************** | |
// DAY 12 | |
// ****************** | |
export default function getMinJump(obstacles) { | |
let sol = 0, jump = 0; | |
do { | |
sol = obstacles.reduce((n,m)=>m%n!==0?n:0,jump++); | |
} while (sol === 0); | |
return sol; | |
} | |
// ****************** | |
// DAY 13 | |
// ****************** | |
export default function wrapGifts(gifts) { | |
let r = gifts.reduce((p,c)=> { | |
p.push('*'+c+'*'); | |
return p; | |
},gifts.length>0?['*'.repeat(gifts[0].length+2)]:[]); | |
r[0]?r.push(r[0]):0; | |
return r; | |
} | |
// ****************** | |
// DAY 14 | |
// ****************** | |
export default function missingReindeer(ids) { | |
return ids.reduce((p,c)=>p-c,ids.length*(ids.length+1)/2); | |
} | |
// ****************** | |
// DAY 15 | |
// ****************** | |
export default function checkSledJump(heights) { | |
let r = heights | |
.map((a,i)=>i>0?heights[i-1]<a:null) | |
.reduce((p,c)=>{ | |
if (c!==null && p.at(-1)!==c) p.push(c); | |
return p; | |
},[]); | |
return r.length==2 && r[0]; | |
} | |
// ****************** | |
// DAY 16 | |
// ****************** | |
export default function decodeNumber(symbols) { | |
let t = { '.': 1, ',': 5, ':': 10, ';': 50, '!': 100}; | |
let g = Array.from(symbols); | |
return g | |
.map((z,i)=> i < g.length ? t[g[i+1]] > t[z] ? -t[z] : t[z] : t[z]) | |
.reduce((p,c)=> p+c); | |
} | |
// ****************** | |
// DAY 17 | |
// ****************** | |
export default function countPackages(carriers, carrierID) { | |
let initialCarrier = carriers.find(k=>k[0]===carrierID); | |
return initialCarrier[2] | |
.reduce((p,c)=> p + countPackages(carriers, c), initialCarrier[1]); | |
} | |
// ****************** | |
// DAY 18 | |
// ****************** | |
export default function fixFiles(files) { | |
return files.reduce((p,c)=>{ | |
let n = p.filter(k=>k===c || k.replace(/\([0-9]+\)/,"")===c).length; | |
p.push(n===0?c:c+'('+n+')'); | |
return p; | |
},[]); | |
} | |
// ****************** | |
// DAY 19 | |
// ****************** | |
export default function learn(time, courses) { | |
return courses.reduce((p,c,i)=> { | |
let a = courses.map((k,j)=>i<j && k+c<=time?k+c:-1); | |
let m = Math.max(...a); | |
if (p.value<m) { | |
p.value = m; | |
p.position = [i,a.findIndex(v=>v===m)]; | |
} | |
return p; | |
},{value:-1, position:null}).position; | |
} | |
// ****************** | |
// DAY 20 | |
// ****************** | |
export default function pangram(letter) { | |
return Array | |
.from(letter | |
.normalize('NFD') | |
.replace(/[\u0300-\u036f]/g, "") | |
.toLowerCase()) | |
.reduce((p,c)=>{ | |
p.indexOf(c)>=0?p.splice(p.indexOf(c),1):0; | |
return p; | |
},Array.from('abdefghijklmnopqrstuvwxyz')).length === 0 | |
&& letter.toLowerCase().indexOf('ñ')>=0 ; | |
} | |
// ****************** | |
// DAY 21 | |
// ****************** | |
export default function canCarry(capacity, trip) { | |
return trip.reduce((p,c)=>{ | |
return p[1]>c[1] ? | |
[p[0] + c[0], Math.min(p[1],c[2])] | |
:[Math.max(p[0],c[0]),Math.min(p[1],c[2])]; | |
},[0,Number.MAX_VALUE])[0] <= capacity; | |
} | |
// ****************** | |
// DAY 22 | |
// ****************** | |
export default function countDecorations(bigTree) { | |
return bigTree!=null ? | |
bigTree.value | |
+ countDecorations(bigTree.left) | |
+ countDecorations(bigTree.right) | |
: 0; | |
} | |
// ****************** | |
// DAY 23 | |
// ****************** | |
export default function canReconfigure(from, to) { | |
let r = Array.from(from).reduce((p,c,i)=>{ | |
let toChar = to.charAt(i); | |
p.valid = p.valid | |
&& (!p.mapa[c] || p.mapa[c] === toChar) | |
&& (!p.inverso[toChar] || p.inverso[toChar] === c); | |
p.mapa[c] = toChar; | |
p.inverso[toChar] = c; | |
return p; | |
},{mapa:[],inverso:[],valid:true}); | |
return r.valid | |
} | |
// ****************** | |
// DAY 24 | |
// ****************** | |
export default function checkIsSameTree(treeA, treeB) { | |
if (treeA !== null && treeB !== null) { | |
return treeA.value === treeB.value | |
&& checkIsSameTree(treeA.left, treeB.left) | |
&& checkIsSameTree(treeA.right, treeB.right); | |
} else return true; | |
} | |
// ****************** | |
// DAY 25 | |
// ****************** | |
export default function canMouseEat(direction, game) { | |
let eatAt = function(pos,dir) { | |
return game[pos[0]][pos[1]] === '*' ? dir : ''; | |
} | |
let mouseEat = function(pos) { | |
return [ | |
eatAt([pos[0]>0?pos[0]-1:pos[0], pos[1]],'up'), | |
eatAt([pos[0]<game.length-1?pos[0]+1:pos[0], pos[1]], 'down'), | |
eatAt([pos[0], pos[1]>0?pos[1]-1:pos[1]], 'left'), | |
eatAt([pos[0], pos[1]<game[0].length-1?pos[1]+1:pos[1]],'right') | |
]; | |
}; | |
return game.reduce((p,c,j)=>{ | |
let x = c.reduce((a,b,i)=>{ | |
return (b==='m') ? [i]:a; | |
},[]); | |
return x.length > 0 ? mouseEat([j,x[0]]) : p; | |
},[]).indexOf(direction)>=0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment