Open liushuangls opened 7 years ago
Diff Two Arrays
function diff(arr1, arr2) {
let newArr = [];
let a1, a2;
a1 = arr1.filter((e) => {
return arr2.indexOf(e) < 0;
});
a2 = arr2.filter((e) => {
return arr1.indexOf(e) < 0;
});
newArr.push(...a1);
newArr.push(...a2);
return newArr;
}
Roman Numeral Converter(将给定的数字转换成罗马数字。)
function convert(num) {
let Rnum = [];
const symbols = ['I', 'V', 'X', 'L', 'C', 'D', 'M'];
let numArr = ('' + num).split('').reverse();
numArr.forEach((e, i) => {
if (e <= 3) Rnum.push(symbols[i * 2].repeat(+e));
else if (e == 4) Rnum.push(symbols[i * 2] + symbols[i * 2 + 1]);
else if (e > 4 && e <= 8) Rnum.push(symbols[i * 2 + 1] + symbols[i * 2].repeat(+e - 5));
else if (e == 9) Rnum.push(symbols[i * 2] + symbols[i * 2 + 2]);
});
return Rnum.reverse().join('');
}
Sum All Odd Fibonacci Numbers
function sumFibs(num) {
let [a, b] = [0, 1];
let fib = [];
let total = 0;
while(b <= num) {
fib.push(b);
[a, b] = [b, a + b];
}
fib.forEach(e => {
if (e % 2 !== 0) total += e;
});
return total;
}
Sum All Primes
// 埃氏筛法
function sumPrimes(num) {
let primes = [2];
let cur = primes[0];
let total = 0;
for (let i = 3; i <= num; i += 2) {
primes.push(i);
}
while (cur <= num) {
total += cur;
primes = primes.filter(e => e % cur !== 0);
cur = primes[0];
}
return total;
}
Smallest Common Multiple
function smallestCommons(arr) {
let max = Math.max(...arr);
let min = Math.min(...arr);
let numArr = [];
let [multiple, noFind] = [max, true];
for (let i = min; i <= max; i++) {
numArr.push(i);
}
while (noFind) {
let find = true;
numArr.forEach(e => {
if (multiple % e !== 0) find = false;
});
if (find) noFind = false;
else multiple += max;
}
return multiple;
}
Steamroller(对嵌套的数组进行扁平化处理。)
function steamroller(arr) {
// I'm a steamroller, baby
let newArr = [];
function recurse(arr) {
for (let i = 0, len = arr.length; i < len; i++) {
if (!Array.isArray(arr[i])) {
newArr.push(arr[i]);
} else {
recurse(arr[i]);
}
}
}
recurse(arr);
return newArr;
}
Validate US Telephone Numbers
function telephoneCheck(str) {
str = str.replace(/\s/g, '');
while (true) {
let match = /\d+-\d+/g.exec(str);
if (!match) break;
str = str.replace(/\d+-\d+/g, match[0].split('-').join(''));
}
if (/\(\d+\)/g.test(str)) {
str = str.replace(/[()]/g, '');
}
if (isNaN(Number(str))) return false;
if (str.length === 11 && str[0] != 1) return false;
if (str.length > 11 || str.length < 10) return false;
if (str.length === 10 && str[0] != 5) return false;
return true;
}
Exact Change
function checkCashRegister(price, cash, cid) {
const denominations = { "PENNY": 1, "NICKEL": 5, "DIME": 10, "QUARTER": 25, "ONE": 100, "FIVE": 500, "TEN": 1000, "TWENTY": 2000, "ONE HUNDRED": 10000 };
let change = cash * 100 - price * 100;
const register = cid.reverse().map(el => [el[0], el[1]*100]);
const registerTotal = register.reduce((sum, elem) => sum + elem[1], 0);
if (change > registerTotal ) return "Insufficient Funds";
if (change === registerTotal ) return "Closed";
let partial;
let changeArr = register.reduce((acc, elem) => {
partial = Math.min(elem[1], Math.floor(change/ denominations[elem[0]]) * denominations[elem[0]]);
if ( partial > 0 ) {
change -= partial;
acc.push([elem[0], partial / 100]);
} return acc;
}, []);
if (change > 0 ) return "Insufficient Funds";
return changeArr;
}
basic
Check for Palindromes
Repeat a string repeat a string
Truncate a string
Mutations