背景
JS 算法和数据结构项目
回文检查器
function palindrome(str) {
const str1 = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
let left = 0;
let right = str1.length - 1;
while (left < right && str1[left] === str1[right]) {
left++;
right--;
}
return str1[left] === str1[right];
}
palindrome("eye");
罗马数字转换器
function convertToRoman(num) {
var roman = {"M" :1000, "CM":900, "D":500, "CD":400, "C":100, "XC":90, "L":50, "XL":40, "X":10, "IX":9, "V":5, "IV":4, "I":1};
var str = "";
for (var i of Object.keys(roman) ) {
var q = Math.floor(num / roman[i]);
num -= q * roman[i];
str += i.repeat(q);
}
return str;
}
convertToRoman(36);
凯撒密码
function rot13(str) {
let left = 'A'.charCodeAt();
let right = 'Z'.charCodeAt();
return str.replace(/[A-Z]/g, match => {
let code = match.charCodeAt() - 13;
if (code < left) {
code = match.charCodeAt() + 13;
}
return String.fromCharCode(code)
});
}
rot13("SERR PBQR PNZC");
电话号码检查器
function telephoneCheck(str) {
let rex1 = /^(1\s?)?\d{3}([-\s]?)\d{3}\2\d{4}$/,
rex2 = /^(1\s?)?\(\d{3}\)\s?\d{3}[-\s]?\d{4}$/;
if (rex1.test(str)) {
return true;
}
else {
return rex2.test(str) ? true : false
}
}
telephoneCheck("555-555-5555");
计算找零
function checkCashRegister(price, cash, cid) {
const denomination = [10000, 2000, 1000, 500, 100, 25, 10, 5, 1,];
function transaction(price, cash, cid) {
let changeNeeded = (cash - price) * 100;
let moneyProvided = [
["ONE HUNDRED", 0],
["TWENTY", 0],
["TEN", 0],
["FIVE", 0],
["ONE", 0],
["QUARTER", 0],
["DIME", 0],
["NICKEL", 0],
["PENNY", 0],
];
let availCash = [...cid].reverse().map(el => [el[0], el[1] * 100]);
let sumOfCash = availCash.reduce((a, b) => (a + b[1]),0) / 100;
if (sumOfCash === changeNeeded / 100) {
return {status: "CLOSED", change: [...cid]};
}
else for (let i = 0; i < availCash.length; i++) {
while (denomination[i] <= changeNeeded && availCash[i][1] > 0) {
moneyProvided[i][1] += denomination[i];
changeNeeded -= denomination[i];
availCash[i][1] -= denomination[i];
}
};
let change = moneyProvided
.map(el => [el[0], el[1] / 100])
.filter(el => el[1] !== 0);
let changeTotal = change.reduce((a, b) => (a + b[1]),0);
if (changeTotal < changeNeeded) {
return {status: "INSUFFICIENT_FUNDS", change: []};
}
return {status: "OPEN", change};
}
let answer = transaction(price, cash, cid);
return answer;
}
checkCashRegister(19.5, 20, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);