freeCodeCamp 旅途10 - 算法实战

项目实战:回文检查器

function palindrome(str) {
  return str.replace(/[\W_]/g, '').toLowerCase() ===
             str.replace(/[\W_]/g, '').toLowerCase().split('').reverse().join('');
}
palindrome("eye");

function palindrome(str) {
    let front = 0
    let back = str.length - 1
    while (back > front) {
        if (str[front].match(/[\W_]/)) {
            front++
            continue
        }
        if (str[back].match(/[\W_]/)) {
            back--
            continue
        }
        if (str[front].toLowerCase() !== str[back].toLowerCase()) return false
        front++
        back--
    }
    return true
}

项目实战:罗马数字转换器

var convertToRoman = function(num) {
  var decimalValue = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ];
  var romanNumeral = [ 'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I' ];
  var romanized = '';
  for (var index = 0; index < decimalValue.length; index++) {
    while (decimalValue[index] <= num) {
      romanized += romanNumeral[index];
      num -= decimalValue[index];
    }
  }
  return romanized;
}
convertToRoman(36);

项目实战:凯撒密码

function rot13(str) {
    return str.split('')
    .map.call(str, function(char) {
        let x = char.charCodeAt(0);
        if (x < 65 || x > 90) {
          return String.fromCharCode(x); 
        }
        else if (x < 78) {
          return String.fromCharCode(x + 13);
        }
        return String.fromCharCode(x - 13);
    }).join('');  
  // return str.replace(/[A-Z]/g, L => String.fromCharCode((L.charCodeAt(0) % 26) + 65));
}
rot13("SERR PBQR PNZC");

项目实战:电话号码验证器

function telephoneCheck(str) {
  // Good luck!
  let regex = /^(1\s?)?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\s\-]?\d{4}$/;
  return regex.test(str);
}
telephoneCheck("555-555-5555");

项目实战:收银机

var denom = [
  { name: 'ONE HUNDRED', val: 100.00},
  { name: 'TWENTY', val: 20.00},
  { name: 'TEN', val: 10.00},
  { name: 'FIVE', val: 5.00},
  { name: 'ONE', val: 1.00},
  { name: 'QUARTER', val: 0.25},
  { name: 'DIME', val: 0.10},
  { name: 'NICKEL', val: 0.05},
  { name: 'PENNY', val: 0.01}
];
function checkCashRegister(price, cash, cid) {
  var output = { status: null, change: [] };
  var change = cash - price;
  var register = cid.reduce(function(acc, curr) {
    acc.total += curr[1];
    acc[curr[0]] = curr[1];
    return acc;
  }, { total: 0 });
  if (register.total === change) {
    output.status = 'CLOSED';
    output.change = cid;
    return output;
  }
  if (register.total < change) {
    output.status = 'INSUFFICIENT_FUNDS';
    return output;
  }
  var change_arr = denom.reduce(function(acc, curr) {
    var value = 0;
    while (register[curr.name] > 0 && change >= curr.val) {
      change -= curr.val;
      register[curr.name] -= curr.val;
      value += curr.val;
      change = Math.round(change * 100) / 100;
    }
    if (value > 0) {
        acc.push([ curr.name, value ]);
    }
    return acc; 
  }, []);
  if (change_arr.length < 1 || change > 0) {
    output.status = 'INSUFFICIENT_FUNDS';
    return output;
  }
  output.status = 'OPEN';
  output.change = change_arr;
  return output;
}
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]]);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 很多时候我们总是喜欢被那些所谓的大人说的话洗脑,觉得他们说的都好有道理,应该要听进去的。但事实是,听完...
    Joanna叔阅读 1,796评论 0 1
  • 吾今近而立之年,一无所成,二无所获,唯有一点看透,人生无常,光阴寸减,生死事大,其他事小。感恩一切所遇到的人和事,...
    溪月念一阅读 803评论 0 0
  • 2018-07-10 姓名:陶金 公司:深圳保民利信息科技有限公司 【日精进打卡第101天】 【知-学习】 1、《...
    陶金保民利阅读 1,400评论 0 0
  • 转自:没有尾巴的鱼 本来想等看完村上的《我的职业是小说家》再来写写看完本书的一些想法。但是想想有些事不能托,尤其是...
    遗世何无常阅读 3,935评论 0 1
  • 你的眼眸中,映衬着天空的色彩。 你微笑的那一刻,天与地之间的一切,仿佛都消失了,除了你我。那一刻,很想让这一幕定格...
    时间轮回中的七月之雨阅读 1,499评论 0 0

友情链接更多精彩内容