其他分享
首页 > 其他分享> > 2022/6/3学习记录

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