天天看点

FCC编程题笔记(3)

Where do I belong

数组排序并找出元素索引

我身在何处?

先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。

举例:where([1,2,3,4], 1.5) 应该返回 1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1。

同理,where([20,3,5], 19) 应该返回 2。因为数组会先排序为 [3,5,20],19插入到数组[3,5,20]后变成[3,5,19,20],而19对应的索引值就是2。

function where(arr, num) {
  // 请把你的代码写在这里
  arr.push(num);
  arr.sort();
  var arr1=[];
  arr1=arguments[0];
  arr1.sort(function(a,b){
    return a-b;
  });
  if(num>arr1[arr1.length-1])
    return arr1.length;
  for(var i=0;i<arr1.length;i++)
    {
      if(arr1[i]>=num){
          return i;
        }
    }

}

where([40, 60], 50);
           

Caesars Cipher

凯撒密码

(让上帝的归上帝,凯撒的归凯撒)

下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。

移位密码也就是密码中的字母会按照指定的数量来做移位。

一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。

写一个ROT13函数,实现输入加密字符串,输出解密字符串。

所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。

function rot13(str) { // LBH QVQ VG!
  // 请把你的代码写在这里
   var newarr=[];
  for(var i=0;i<str.length;i++){
     if(str.charCodeAt(i)<65||str.charCodeAt(i)>90){
       newarr.push(str.charAt(i));
     }else if(str.charCodeAt(i)>77){
       newarr.push(String.fromCharCode(str.charCodeAt(i)-13));
     }else{
       newarr.push(String.fromCharCode(str.charCodeAt(i)+13));
     }
   }
   return newarr.join("");
// return str;
}

rot13("SERR PBQR PNZC");  // 你可以修改这一行来测试你的代码
           

Diff Two Arrays

比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。换言之,返回两个数组的差异。

arr1=arr1.concat(arr2);
  var tmp = [];
  for(var i in arr1){
      //该元素在tmp内部不存在才允许追加
      if(tmp.indexOf(arr1[i])==-1){
          tmp.push(arr1[i]);
            }
        }
newArr=arr1.filter(function(ele,index,array){
    for(var j in tmp){
      if(tmp.indexOf(tmp[i])==-1){
        newArr=tmp.slice(i,i+1);
      }
    }
 });
 return newArr;