2022/6/3学习记录
作者:互联网
JS算法题
罗马数字转换器
把传入的数字转为罗马数字。 转换后的罗马数字字母必须都是大写Solution:
function convertToRoman(num) {
var lookup = {
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},
roman = '',
i;
for (i in lookup){
while (num >= lookup[i]) {
roman += i;
num -= lookup[i];
}
}
return roman;
}
凯撒密码
凯撒密码( Caesar cipher)是最简单且最广为人知的密码(ciphers),也被称为移位密码(shift cipher)。 在移位密码中,明文中的字母通过按照一个固定数目进行偏移后被替换成新的字母。ROT13 是一个被广泛使用的加密技术,明文中的所有字母都被移动 13 位。 也就是, A ↔ N,B ↔ O 等等。
编写一个函数,它将 ROT13 编码的字符串作为输入并返回解码字符串。
所有解码后的字母都必须为字母大写。 请不要解码非字母的字符(例如,空格、标点符号),但你需要在结果中保留它们。
Solution:
function rot13(str) {
var newstr = [];
for(var i =0 ;i<str.length;++i){
if(str.charCodeAt(i)<65||str.charCodeAt(i)>90){
newstr.push(str[i]);
}else if(str.charCodeAt(i)<=77){
newstr.push(String.fromCharCode(str.charCodeAt(i)+13));
}else{
newstr.push(String.fromCharCode(str.charCodeAt(i)-13));
}
}
return newstr.join('');
}
电话号码检查器
如果传入的字符串是一个有效的美国电话号码格式,则返回 true。只要是有效的美国电话号码的格式,用户可以按照他们的方式填写表单中的电话号码。 以下是一些正确的例子(其他格式变形请参考以下例子):
555-555-5555
(555)555-5555
(555)555-5555
555 555 5555
5555555555
1 555 555 5555
在这个挑战中,参数可能是 800-692-7753 或者 8oo-six427676;laskdjf 的号码。 你的任务是根据上面不同的格式组合,判断它是否为有效的电话号码。 其中,地区码(电话号码中的前三位)是必须的。 如果提供国家代码,则国家代码只能为 1。 如果传入的参数是有效的美国电话号码就返回 true,否则返回 false。
Solution:
function telephoneCheck(str) {
let testRegex=/^(1?)[\s\-]?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\s\-]?\d{4}$/;
return testRegex.test(str);
}
计算找零
请编写一个用于收银机的函数 checkCashRegister():它的第一个参数为售价 price、第二个参数为支付金额 cash、第三个参数为收银机內的金额 cid。cid 是包含货币面值的二维数组。
函数 checkCashRegister() 应返回含有 status 属性和 change 属性的对象。
如果收银机內的金额少于应找回的零钱数,或者你无法返回确切的数目时,返回 {status: "INSUFFICIENT_FUNDS", change: []}。
如果收银机內的金额恰好等于应找回的零钱数,返回 {status: "CLOSED", change: [...]},其中 change 的属性值就是收银机內的金额。
否则,返回 {status: "OPEN", change: [...]},其中 change 键值是应找回的零钱数,并将找零的面值由高到低排序。
货币单位 Unit 面值
Penny 0.01 美元(PENNY)
Nickel 0.05 美元(NICKEL)
Dime 0.1 美元(DIME)
Quarter 0.25 美元(QUARTER)
Dollar 1 美元(ONE)
Five Dollars 5 美元(五)
Ten Dollars 10 美元(TEN)
Twenty Dollars 20 美元(TWENTY)
One-hundred Dollars 100美元(ONE HUNDRED)
下面的抽屉里现金数组示例:
[
["PENNY", 1.01],
["NICKEL", 2.05],
["DIME", 3.1],
["QUARTER", 4.25],
["ONE", 90],
["FIVE", 55],
["TEN", 20],
["TWENTY", 60],
["ONE HUNDRED", 100]
]
Solution:
function checkCashRegister(price, cash, cid) {
var obj = {};
var num = 0;
var odd = cash -price;
var arr = [];
var figure = [100, 20, 10, 5, 1, 0.25, 0.1, 0.05, 0.01];
var a = 0;
for(let i = 0; i < cid.length; i++){
var s = cid[i][0];
obj[s] = cid[i][1];
num += cid[i][1];
}
if(odd === num){
return {status: "CLOSED", change: cid};
}
for(var j = 0; j < Object.keys(obj).length; j++){
var name = Object.keys(obj)[8 - j];
change();
if(a > 0){
arr.push([name, figure[j] * a]);
a = 0;
}
}
function change(){
if(odd >= figure[j] && obj[name] >= figure[j]){
odd = odd - figure[j];
odd = Math.round(odd * 10000) / 10000;
obj[name] = obj[name] - figure[j];
obj[name] = Math.round(obj[name]);
a++;
change();
}
}
if(odd === 0){
return {status: "OPEN", change: arr};
}
else if(odd > 0){
return {status: "INSUFFICIENT_FUNDS", change: []};
}
}
标签:obj,记录,555,cid,学习,2022,var,odd,change 来源: https://www.cnblogs.com/patricklee7/p/16339775.html