Intermediate Algorithm Scripting FreeCodeCamp中级算法
来源:互联网 发布:韩寒新作品2018 知乎 编辑:程序博客网 时间:2024/06/05 08:49
Intermediate Algorithm Scripting
1. Sum All Numbers in a Range
function sumAll(arr) { var maxVal = Math.max(arr[0], arr[1]); var minVal = Math.min(arr[0], arr[1]); var arrC = []; for (var i = minVal; i <= maxVal; i++) { arrC.push(i); } return arrC.reduce(function (preVal, currentVal) { return preVal + currentVal; }, 0);}
2. Diff Two Arrays 取两个数组中不相同的元素
/*
* 比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。换言之,返回两个数组的差异。
* */
function diff(arr1, arr2) { var newArr = []; for (var i = 0; i < arr1.length; i++) { var isHave = arr2.indexOf(arr1[i]); if (isHave < 0) { newArr.push(arr1[i]); } } for (var j = 0; j < arr2.length; j++) { var isHave2 = arr1.indexOf(arr2[j]); if (isHave2 < 0) { newArr.push(arr2[j]); } } return newArr;}
3.Roman Numeral Converter 将给定的数字转换成罗马数字,有局限性
function convert(num) { var nums = [1000,900,500,400,100,90,50,40,10,9,5,4,1]; var romans =["m","cm","d","cd","c","xc","l","xl","x","ix","v","iv","i"]; var str = ''; nums.forEach(function(item,index,array){ while(num >= item){ str += romans[index]; num -= item; } }); return str.toUpperCase();}
4.whrer are you
/*
* 写一个 function,它遍历一个对象数组(第一个参数)
* 并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组。
* 如果返回的数组中包含 source 对象的属性-值对,
* 那么此对象的每一个属性-值对都必须存在于 collection 的对象中
* */
function where(collection, source) { var arr = []; // 属性数组 var keysArr = Object.keys(source); return collection.filter(function (val) { // 判断是否包含对应的属性 return keysArr.every(function (key) { return (val.hasOwnProperty(key) && val[key] === source[key]); }); });}
5. Search and Replace
function myReplace(str, before, after) { // 首字母是不是大写 if (before[0] === before[0].toUpperCase()) { after = after[0].toUpperCase() + after.slice(1); } return str.replace(before, after);}
6.Pig Latin 把指定的字符串翻译成 pig latin。 知道元音辅音就好算
function translate(str) { var myStr = ''; var regex = /[aeiou]/gi; if(str[0].match(regex)){ myStr = str + 'way'; } else { var index = str.indexOf(str.match(regex)[0]); myStr = str.substr(index) + str.substring(0,index) + 'ay'; } return myStr;}
7. DNA Pairing AT CG,有局限性,不够好
function pair(str) { // 分割字符串 // 每一个进行匹配 // 组成一个二维数组返回 var resultArr = []; str.split('').map(function (val) { var arr = []; if (val === "A") { arr.push("A"); arr.push("T"); } if (val === "T") { arr.push("T"); arr.push("A"); } if (val === "C") { arr.push("C"); arr.push("G"); } if (val === "G") { arr.push("G"); arr.push("C"); } resultArr.push(arr); }); return resultArr;}
8. Missing letters 分割字符串,
// 分割 转码 ,拿到第一个和最后一个, 组成一个数组, 判断原本分割后的缺失的码,function fearNotLetter(str) { // 转码 var arr = str.split('').map(function (val) { return val.charCodeAt(0); }); var wordArr = []; // 获得连续字母 for (var i = str.charCodeAt(0); i < str.charCodeAt(str.length - 1); i++) { wordArr.push(i); } var resultArr = wordArr.filter(function (val) { return arr.every(function (tar) { return val !== tar; }); }); if (resultArr.length == 0) { return undefined; } // 转为字母 return resultArr.map(function (ch) { return String.fromCharCode(ch); }).join('');}
9. Boo who 检查一个值是否是基本布尔类型,并返回 true 或 false。
function boo(bool) { if (bool === true || bool === false) { return true; } return false;}
10. Sorted Union
// 方法一:function unite(arr1, arr2, arr3) { // 转化为数组 var args = Array.prototype.slice.call(arguments); // reduce 参数数组 return args.reduce(function (pre, cur) { // 遍历下一个数组,如果当前的数组没有该元素,就添加到当前数组中 for (var i = 0; i < cur.length; i++) { if (pre.indexOf(cur[i]) < 0) { pre.push(cur[i]); } } return pre; });}
11.Convert HTML Entities 这种写法有局限性
/*
* 将字符串中的字符 &、<、>、” (双引号), 以及 ’ (单引号)转换为它们对应的 HTML 实体。
* */
function convert(str) { var arr = ["&", "<", ">",'"', "'"]; var fuArr = ["&", "<", ">", """, "'"]; // 用正则表达式截取字符串中的字符 var reg = /[&<>"']/g; var ssArr = str.match(reg); if (ssArr) { for (var i = 0; i < ssArr.length; i++) { var index = arr.indexOf(ssArr[i]); str = str.replace(ssArr[i], fuArr[index]); } } return str;}
12. Spinal Tap Case
function spinalCase(str) { // 1. 正则表达式提取纯文本 str = str.replace('-', ' '); str = str.replace(/[\W\^_]/g, ' '); var arr = str.split(''); // 2. 根据大写分割为单词 var sss = ''; arr.map(function (val, index, arr) { var cindex = val.charCodeAt(0); if (cindex < 65 + 26) { // 如果是大写,在前面加个空格,用来分割 sss += " " + val; } else { sss += val; } }); // 3. 通过空格来进行分割 // 3. 删除两端的空格 sss = sss.trim(); var arr2 = sss.split(' '); // 4.转为小写 arr2 = arr2.map(function (val) { return val.toLowerCase(); }); arr2 = arr2.filter(function(val){ return val !== ""; }); // 4.拼接,返回 return arr2.join('-');}
13. Sum All Odd Fibonacci Numbers
/*
* 给一个正整数num,返回小于或等于num的斐波纳契奇数之和。
斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。
* */
function sumFibs(num) { // 小于3 结果是数字本身 if (num < 3) { return num; } var arr = [1, 1]; // 一直加,直到接近前后两个数字 for (var i = 2; i < Number.POSITIVE_INFINITY; i++) { arr[i] = arr[i - 2] + arr[i - 1]; if (arr[i - 1] >= num) { break; } } // 取下标,然后截取数组 var index = (num <= arr[arr.length - 1] && arr[arr.length - 2] <= num) ? arr.length -1 : arr.length - 2; // 过滤偶数 var resultArr = arr.splice(0, index).filter(function (val) { return (val % 2) === 1; }); // 相加 return resultArr.reduce(function (pre, current) { return pre + current; });}
14. Sum All Primes 求小于等于给定数值的质数之和。
/*
* 求小于等于给定数值的质数之和。
只有 1 和它本身两个约数的数叫质数。例如,2 是质数,因为它只能被 1 和 2 整除。1 不是质数,因为它只能被自身整除。
给定的数不一定是质数。
* */
function sumPrimes(num) { // 求出范围内的所有质数 var arr = []; if (num < 2) { return 0; } if (num === 2) { return 2; } for (var i = 2; i <= num; i++) { if (i === 2) { arr.push(2); } else { var isHave = false; for (var j = 2; j < i; j++){ // 如果能被整除,那就不是质数了 if ( i % j === 0) { isHave = true; break; } } if (!isHave) { arr.push(i); } } } // 求所有质数的和 reduce return arr.reduce(function (pre, cur) { return pre + cur; });}
15. Smallest Common Multiple 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。 拿出所有奇数中的质数
function smallestCommons(arr) { arr=arr.sort(function(a,b){ return a - b; }); var num=arr[0]; for(var i= arr[0]+1;i<=arr[1];i++){ num*=i/gcd(num,i); } return num; } function gcd(m,n){ if(m%n===0)return n; return gcd(n,m%n);}
16. Finders Keepers
function find(arr, func) { for(var i = 0; i < arr.length; i++){ var result = func(arr[i]); if (result === true) { return arr[i]; } }}
17 . Drop it
function drop(arr, func) { var resultArr = arr.filter(function(val){ var result = func(val); if (result) { return val; } }); // 拿到第一个元素 if(resultArr.length <= 0){ return []; } var index = arr.indexOf(resultArr[0]); return arr.splice(index);}
18.Steamroller
function steamroller(arr) { var resultArr = []; arr.map(function(val){ return my(val); }); return resultArr; function my(a) { if(Array.isArray(a)) { return a.map(function(b){ return my(b); }); } resultArr.push(a); }}
19. Binary Agents
/*
* 传入二进制字符串,翻译成英语句子并返回。
二进制字符串是以空格分隔的。
* */
function binaryAgent(str) { // 1. 分割二进制字符串 var arr = str.split(' '); // 2.转化为10进制 var numArr = arr.map(function (val) { return parseInt(val , 2); }); // 转化为 ASII码 把ASII码转为字符串连接起来 return numArr.map(function (tar) { return String.fromCharCode(tar); }).join('');}
20. Everything Be True
function every(collection, pre) { return collection.every(isHaveProperty); function isHaveProperty (element, index, arr) { return element.hasOwnProperty(pre) && element[pre] !== undefined && Boolean(element[pre]); }}
21.Arguments Optional
/*
* 创建一个计算两个参数之和的 function。如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果。
* */
function add() { if(typeof arguments[0] !== "number" || (arguments.length > 1 && typeof arguments[1] !== "number")){ return undefined; } if(arguments.length == 1){ var arg0 = arguments[0]; return function(num){ if(typeof num !== "number"){ return undefined; } return arg0 + num; }; }else{ return arguments[0] + arguments[1]; }}
阅读全文
1 0
- Intermediate Algorithm Scripting FreeCodeCamp中级算法
- Intermediate Algorithm Scripting (50 hours)中级算法脚本练习
- FreeCodeCamp高级算法Advance Algorithm Scripting
- [FreeCodeCamp-JavaScript]Intermediate Algorithm
- freeCodeCamp-Basic Algorithm Scripting
- freecodecamp advance algorithm scripting
- freeCodeCamp任务之Basic-Algorithm-Scripting
- FCC Basic Algorithm Scripting 基础算法集
- [FreeCodeCamp-JavaScript]Basic Algorithm
- [FreeCodeCamp-Javascript]Advanced Algorithm
- [初学Unity]Intermediate gameplay scripting
- Advanced Algorithm Scripting (50 hours)Javascript进阶算法练习
- codefreecamp-Basic Algorithm Scripting
- FCC-Basic Algorithm Scripting
- FreeCodeCamp初级算法
- FCC学习笔记-(五) Basic Algorithm Scripting
- FreeCodeCamp初级js算法题小结
- freecodecamp 算法部分刷题笔记
- POI对docx模板进行文字、图片替换
- Docker 简介
- ngrx/store
- POJ 2528 Mayor's posters
- python 3.6.0 scrapy框架安装方法及疑难解决
- Intermediate Algorithm Scripting FreeCodeCamp中级算法
- java 读取excel 文件 Unable to recognize OLE stream 错误
- TCP_NODELAY 和 TCP_CORK
- ARKit从入门到精通(11)-ARKit开发常见问题及解决方案
- 梯度爆炸与梯度消失
- Android Studio 新建文件自动加入SVN版本控制
- 单链表的数组实现(未完)
- HDU1358-kmp
- J2EE学习篇之--Spring技术详解