js高级脚本算法
来源:互联网 发布:log4j linux 绝对路径 编辑:程序博客网 时间:2024/06/07 07:26
1.判断电话号码算法挑战
function telephoneCheck(str) {// Good luck! var matchStr = /^(((1(\s|))|)\([1-9]{3}\)(\s|-|)[1-9]{3}(\s|-|)[1-9]{4})$/; var matchStr2 = /^(((1(\s)|)|)[1-9]{3}(\s|-|)[1-9]{3}(\s|-|)[1-9]{4})$/; return (str.match(matchStr) != null||str.match(matchStr2)!=null);}
2集合交集算法挑战
集合交集算法挑战function sym(args) { var arr=[]; var a=arguments[0]; var len=arguments.length; for(var i=1;i<len;i++){ var b=arguments[i]; arr=a.filter(function(item){ return b.indexOf(item)<0; }); var d=b.filter(function(item){ return a.indexOf(item)<0; }); arr=arr.concat(d); a=arr; } arr=unique(arr);return arr;}function unique (arr) { return Array.from(new Set(arr))}
3收银系统算法挑战
function checkCashRegister(price, cash, cid) { // 刚刚好 if(price==cash){ return "No Need Back"; } // 付款不足 if (price > cash){ return "Need More Money"; } var base=100;//金额基数 var change=(cash-price)*base; //找零 //定义一个函数,用来求零钱和。 var getTotalMoney=function(arr){ var totalMoney=0; arr.reduce(function (preV, currV, currIndex, array){ totalMoney+=base*(preV[1]+currV[1]); return currV; });//叠代算法:求零钱之和。 return totalMoney; } //余额不足,没法找了 var remain = getTotalMoney(cid); if (remain==change){//如果零钱数等于应找数额,返回closed return "Closed"; }else if(remain < change){//没钱找了 return "Insufficient Funds"; }; // 对应:1角-5角-1元-5元-10元-20元-50元-100元(以元为单位的基础上乘以面值基数:base这里为100) var dollar= [1, 5, 10, 25, 100, 500, 1000, 2000, 10000]; // TODO var pay={};//保存的key:dollar中面值索引,value:要找的此面值的个数 var currLast=0;// 当前面值所剩余额 var currMoney=0;//当前金钱面额(dollar中对应的值) for (var i=dollar.length-1;i>=0;i--){//由大到小循环 //当前面值剩余金额 currLast=cid[i][1]*base; if (currLast<=0) { continue;//当前面值的金额剩余0,跳过 } //当前金额面值 currMoney=dollar[i]; // 在当前面值下取钱必须同时满足两个条件: // 1. 找零必须大于当前面值,比如找零51元,才可以从50里面取钱。 // 2. 剩余的当前面值的总额足够,比如找4元,但我只有3张1元,就不符合取钱条件 if(change>currMoney){//如果当前金额面值小于应找钱数 if(change<currLast){ // 找零小于当前面值剩余金额:比如找钱51元,当前50面值总额余额还有150元。 pay[i]=Math.floor(change/currMoney);//取最大张数 change-=currMoney*pay[i];//取完之后从应找余额中减去(张数x面值) }else{ // 找零大于当前面值剩余金额,比如找零51元,我50元面额总值只有50元 // 则将所有剩余金额找出 pay[i]=Math.floor(currLast/currMoney); change-=currLast;//就直接减去当前面值剩余所有金额 } } }//循环结束之后得到一个pay对象,里面包括了面值和对应应找的钱。 console.log(pay) var res=[]; // 组织最后需要找零的钱,作为最终返回的数组。 var keys=Object.keys(pay);//找到pay对象 var idx=0; var total=0;//应找零钱(pay)的总额 for (var j=0; j<keys.length; j++) { // 需要找零的面值索引:比如100,50,20,10...等等 idx=parseInt([keys[j]]); //计算该面值最后找出的零钱(公式:面值x需要找出数量 / 金钱面值基数) cid[idx][1]=dollar[idx]*pay[keys[j]]/base; res.unshift(cid[idx]);//把结果添加到数组的开头。符合由面值大到小的规律。 total += dollar[idx]*pay[keys[j]]; // 顺便计算下这里计算的结果应该和最开始需要找零的金额一致: // 面值x需要找出数量——返回到total结果中 } // 找到最后,所有能找的面值加起来还不够 // 这里与最开始不同,这里是过滤掉了所有找不开的面值 // 比如:要找0.05元,但是目前剩余一张0.01和1元的面值,依旧判定为找不开 // 而最开始的是所有余额加起来都不够找 if (total<change) { return "Insufficient Funds"; } console.log(res) return res;}
4库存更新算法挑战
function updateInventory(arr1, arr2) {// All inventory must be accounted for or you're fired!var arr1key = arr1.map(function(v){ return v[1]; }); arr2.forEach(function(v){ if (arr1key.indexOf(v[1]) === -1) { arr1.push(v); } else { arr1[arr1key.indexOf(v[1])][0] += v[0]; } }); return arr1.sort(function(a,b){ return a[1].charCodeAt(0) - b[1].charCodeAt(0); });}
5日期改写算法挑战
function makeFriendlyDates(arr) { //获得目前的年份 var yearnow=(new Date()).getFullYear(); //把传入的参数放入字符串数组,创建Date类型也可以 var date1=arr[0].split("-"); var date2=arr[1].split("-"); //月份的英文表示 var months=["January","February","March","April","May","June","July","August","September","October","November","December"]; //初始化几个后面用到的数组 var date1str=""; var date2str=""; var datearr=[]; //给日期加后缀的函数 function friendlydate(str){ var str2num=Number(str); switch(str2num){ case 1: str2num+="st"; break; case 2: str2num+="nd"; break; case 3: str2num+="rd"; break; default: str2num+="th"; } return str2num; } //date1的字符串表示大部分情况下都是需要年月日的。date2的如果不是在同年同月,大部分情况下都是需要月日的 date1str=months[date1[1]-1]+" "+friendlydate(date1[2])+", "+date1[0]; if(date1[1]===date2[1]&&date1[0]===date2[0]){ date2str=friendlydate(date2[2]); }else{ date2str=months[date2[1]-1]+" "+friendlydate(date2[2]); } //如果大于一年,date2加上年份;如果小于一年,而且date1的日期是今年,那么去掉date1的年份。 if((date2[0]-date1[0]>1)||((date2[0]-date1[0]===1)&&(date2[1]-date1[1]>0))||((date2[0]-date1[0]===1)&&(date2[1]-date1[1]===0)&&date2[2]-date1[2]>=0)){ date2str+=", "+date2[0]; }else if(date1[0]==yearnow){ date1str=date1str.slice(0,-6); } //把两个日期放在同一个数组里输出(如果是同年同月同日,代码里的date2str无用,所以代码是可以改善的)。 datearr[datearr.length]=date1str; if(date1.toString()!==date2.toString()){ datearr[datearr.length]=date2str; } return datearr;}
6类及对象构建算法挑战
var Person = function(firstAndLast) { var firstAndLastarr=firstAndLast.split(" "), firstName=firstAndLastarr[0], lastName=firstAndLastarr[1]; this.getFirstName=function(){ return firstName; }; this.getLastName=function(){ return lastName; }; this.getFullName=function(){ firstAndLastarr[0]=firstName; firstAndLastarr[1]=lastName; return firstAndLastarr.join(" "); }; this.setFirstName=function(first){ firstName=first; }; this.setLastName=function(last){ lastName=last; }; this.setFullName=function(firstAndLast){ firstAndLastarr=firstAndLast.split(" "); firstName=firstAndLastarr[0]; lastName=firstAndLastarr[1]; };};
7轨道周期算法挑战
function orbitalPeriod(arr) {var GM = 398600.4418;var earthRadius = 6367.4447;for(var i=0;i<arr.length;i++){ var R=arr[i].avgAlt+earthRadius; var T=R*2*Math.PI*Math.sqrt((R/GM)); delete arr[i].avgAlt; arr[i].orbitalPeriod=Math.round(T); } return arr;}
8数据组合求值算法挑战
function pairwise(arr, arg) { var l=arr.length; res=0; for(var i=0;i<l;i++){ for(var j=i+1;j<l;j++){ if(arr[i]+arr[j]===arg){ res=res+i+j; arr[i]="false"; arr[j]="false"; } } } return res;}
阅读全文
0 0
- js高级脚本算法
- js高级脚本算法
- js 高级算法
- js初级脚本算法
- js中级脚本算法
- js初级脚本算法
- js初级脚本算法
- js中级脚本算法
- JS高级程序设计14-表单脚本
- JS高级程序设计16-HTML5脚本编程
- js高级程序设计笔记11--HTML5脚本编程
- JS高级
- js高级
- JS高级。
- js高级
- js高级
- 高级js
- js 高级
- 【Webpack】3.多入口设置与 html-webpack-pugin 插件详解
- 前端知识体系及一些细碎的叨叨叨
- Android样式开发之你应该学会的layer-list!
- Python中datetime.timedelta的应用
- maven
- js高级脚本算法
- 快速幂取模算法详解
- Android第一次触摸屏幕没有产生事件
- 一句话让你了解NIO和IO的异同
- 《剑指 Offer》学习(1)—— 5_替换空格
- hbase优化策略
- Win10+Ubuntu17.04双系统安装
- mysql 新用户无法登录
- 在Windows环境下使用MySQL:自动定时备份