1区间求值算法挑战
function sumAll(arr) {
if(arr[0]>arr[1]){
var m=arr[1];
arr[1]=arr[0];
arr[0]=m;
}
var sum=0;
for(var i=arr[0];i<=arr[1];i++){
sum+=i;
}
return sum;
}
2找出数组间差异算法挑战
function diff(arr1, arr2) {
var newArr = [];
var newArr2=[];
newArr=arr1.filter(function(item){
return arr2.indexOf(item)<0;
})
newArr2=arr2.filter(function(item){
return arr1.indexOf(item)<0;
})
newArr=newArr.concat(newArr2);
return newArr;
}
3.阿拉伯数字转罗马数字
function convert(num) {
var a=[["","I","II","III","IV","V","VI","VII","VIII","IX"],
["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"],
["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"],
["","M","MM","MMM"]];
var i=a[3][Math.floor(num/1000)];
var j=a[2][Math.floor(num%1000/100)];
var k=a[1][Math.floor(num%100/10)];
var l=a[0][num%10];
return i+j+k+l;
}
4对象搜索算法挑战
function where(collection, source) {
var arr = [];
// What's in a name?
var curr_key="";
for (var key in source) {
console.log(key); //获取key值
console.log(source[key]); //获取对应的value值
curr_key=key;
}
arr=collection.filter(function(item){
return item[curr_key]==source[curr_key];
})
return arr;
}
5.字符串查询替换算法挑战
function myReplace(str, before, after) {
var a=str.indexOf(before);
if(65<=str[a].charCodeAt()&&str[a].charCodeAt()<=90){
after=after[0].toUpperCase()+after.slice(1);
}
str=str.replace(before, after);
return str;
}
6.字符串移动插入算法挑战
function translate(str) {
str=str.toLowerCase();
var yy=['a','e','i','o','u'];
var num=0;
if(yy.indexOf(str[0])>=0){
str+='way';
}else{
for(var i=0;i<str.length;i++){
if(yy.indexOf(str[i])>=0){
num=i;
break;
}
}
/* if(num-1>0){
var str1=str.substr(0,num);
}else{
var str1=str[0];
}*/
var str1=str.substr(0,num);
var str2=str.substr(num);
str=str2+str1+'ay';
}
return str;
}
7.字符配对算法挑战
function pair(str) {
str=str.split("");
var aa=[];
for(var i=0;i<str.length;i++){
var bb=[];
switch (str[i]) {
case 'A':
bb.push("A");
bb.push("T");
// code
break;
case 'T':
bb.push("T");
bb.push("A");
break;
case 'C':
bb.push("C");
bb.push("G");
// code
break;
default:
bb.push("G");
bb.push("C");
}
aa.push(bb);
}
return aa;
}
8字符串查询补充算法挑战
function fearNotLetter(str) {
var flag=undefined;
for(var i=0;i<str.length-1;i++){
var num1=str.charCodeAt(i);
var num2=str.charCodeAt(i+1);
if(1!=num2-num1){
var codeNum=num1+1;
flag=String.fromCharCode(codeNum);
break;
}
}
return flag;
}
fearNotLetter("abce");
9.输入检查算法挑战
function boo(bool) {
// What is the new fad diet for ghost developers? The Boolean.
if(typeof bool==='boolean'){
return true;
}else{
return false;
}
}
boo(true);
10数组去重算法挑战
function unite(arr1, arr2, arr3) {
var len=arguments.length;
var itemdemo=arguments[0];
for(var i=1;i<len;i++){
arguments[i]=arguments[i].filter(function(item){
return itemdemo.indexOf(item)<0;
});
itemdemo=itemdemo.concat(arguments[i]);
}
return itemdemo;
}
11html符号转实体算法挑战
function convert(entity) {
// :)
var converHtmlEntities={
'&':'&',
'<':'<',
'>':'>',
'\"':'"',
'\'':''',
};
return entity.split('').map(function(entity){
return converHtmlEntities[entity] || entity;
}).join('');
}
convert("Dolce & Gabbana");
12字符串连接算法挑战
function spinalCase(str) {
// "It's such a fine line between stupid, and clever."
// --David St. Hubbins
str=str.replace(/_|\s+/g,"-");
str=str.replace(/(\B[A-Z])/g,"-$1");
//str=str.replace(/[A-Z]/g,'-');
str=str.toLowerCase();
return str;
}
spinalCase('thisIsSpinalTap');
13斐波纳契奇数求和算法挑战
function sumFibs(num) {
var sum=2;
var a = 1;
var b = 1;
var c = 0;
if(num==1){
return 0;
}else if(num==2){
return 2;
}else{
while(c<=num){
if(c%2!=0){
sum+=c;
}
c = a + b;
a = b;
b = c;
}
}
return sum;
}
14质素求和算法挑战
function isPrime(num){
// 不是数字或者数字小于2
if(typeof num !="number" || !Number.isInteger(num)){ // Number.isInterget 判断是否为整数
return false;
}
//2是质数
if(num == 2){
return true;
}else if(num % 2 == 0){ //排除偶数
return false;
}
//依次判断是否能被奇数整除,最大循环为数值的开方
var squareRoot = Math.sqrt(num);
//因为2已经验证过,所以从3开始;且已经排除偶数,所以每次加2
for(var i = 3; i <= squareRoot; i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
function sumPrimes(num) {
var counter = 0;
for(var i = 2; i <=num; i++){
if(isPrime(i)){
counter += i;
}
}
return counter;
}
15最小公倍数算法挑战
function smallestCommons(arr) {
arr=arr.sort();
var num=arr[0];
for(var i=arr[0]+1;i<=arr[1];i++){
num*=i/gcd(i,num);
}
return num;
}
function gcd(m,n){
if(m%n===0)return n;
return gcd(n,m%n);
}
16数组验证算法挑战
function find(arr, func) {
var num = 0;
var flag=false;
for(var i=0;i<arr.length;i++){
num=arr[i];
flag=func(num);
if(true==flag){
return num;
break;
}
}
return undefined;
}
17数组取值算法挑战
function drop(arr, func) {
// Drop them elements.
var flag=false;
var num=[];
for(var i=0;i<arr.length;i++){
flag=func(arr[i]);
if(true==flag){
num=arr.slice(i);
break;
}
}
return num;
}
18数组平铺算法挑战
function steamroller(arr) {
// I'm a steamroller, baby
for(var i=0;i<arr.length;i++){
if(true==Array.isArray(arr[i])){
steamroller(arr[i]) ;
}else{
new_arr.push(arr[i]);
}
}
return new_arr;
}
var new_arr=[];
steamroller([1, {}, [3, [[4]]]]);
方法二:
function steamroller(arr) {
// I'm a steamroller, baby
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
// 如果是数组,调用(递归)steamroller 将其扁平化
// 然后再 push 到 newArr 中
newArr.push.apply(newArr, steamroller(arr[i]));
} else {
// 不是数组直接 push 到 newArr 中
newArr.push(arr[i]);
}
}
return newArr;
}
19二进制转字符算法挑战
function binaryAgent(str) {
var arg = str.split(" ");
var temp, i;
var newArg = new Array();
for (i = 0; i < arg.length; i++) {
temp = String.fromCharCode(parseInt(arg[i], 2));
newArg.push(temp);
}
return newArg.join("");
}
20数组元素判断算法挑战
function every(collection, pre) {
// Is everyone being true?
for(var i=0;i<collection.length;i++){
var obj=collection[i];
if(!obj[pre]){
return false;
}
}
return true;
}
21函数迭代可选参数算法挑战
function add() {
var num=arguments.length;
var sum=0;
if(1==num&&"number"!=typeof(arguments[0])){
return undefined;
}else if(1==num&&"number"==typeof(arguments[0])){
var curr=arguments[0]
return function(y){
if("number"==typeof(y)){
return curr+y;
}
}
}else{
if(arguments[num-1])
for(var i=0;i<num;i++){
var obj=arguments[i];
if("number"!=typeof(obj)){
return undefined;
}else{
sum+=obj;
}
}
return sum;
}
}