Skip to content

Instantly share code, notes, and snippets.

@juanjmerono
Last active December 25, 2021 17:35
Show Gist options
  • Save juanjmerono/b5a5ceaf0ec131e2d97a623e3765e023 to your computer and use it in GitHub Desktop.
Save juanjmerono/b5a5ceaf0ec131e2d97a623e3765e023 to your computer and use it in GitHub Desktop.
// ******************
// 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