资讯专栏INFORMATION COLUMN

FreeCodeCamp中级算法题答案

leonardofed / 402人阅读

摘要:法一法二使用给定的参数对句子执行一次查找和替换,然后返回新句子。法一法二把指定的字符串翻译成。在每一个数组中将给定的字母作为第一个碱基返回。法一后项减去前项法二检查一个值是否是基本布尔类型,并返回或。基本布尔类型即和。

Diff Two Arrays

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

function diff(arr1, arr2) {
   var a1=arr1.filter(function(val){
        return arr2.indexOf(val)< 0;
   });
   var a2=arr2.filter(function(val){
       return arr1.indexOf(val)< 0;
   });
   return a1.concat(a2);
}

diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);
Roman Numeral Converter

将给定的数字转换成罗马数字。
所有返回的 罗马数字 都应该是大写形式。
可参考Here

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();
}
convert(36);
Where art thou

写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组。如果返回的数组中包含 source 对象的属性-值对,那么此对象的每一个属性-值对都必须存在于 collection 的对象中。

例如,如果第一个参数是 [{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }],第二个参数是 { last: "Capulet" },那么你必须从数组(第一个参数)返回其中的第三个对象,因为它包含了作为第二个参数传递的属性-值对。

//法一
function where(collection, source) {
  var keys =  Object.keys(source);
  return collection.filter(function(obj){
      return keys.every(function(item){
          return obj.hasOwnProperty(item) && obj[item] === source[item];
      });
  });
}
//法二
function where(collection, source) {
  var keys =  Object.keys(source);
  return collection.filter(function(obj){
      return keys.every(function(item){
          return obj.hasOwnProperty(item) && obj[item] === source[item];
      });
  });
}

where([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });
Search and Replace

使用给定的参数对句子执行一次查找和替换,然后返回新句子。第一个参数是将要对其执行查找和替换的句子。第二个参数是将被替换掉的单词(替换前的单词)。第三个参数用于替换第二个参数(替换后的单词)。
注意:替换时保持原单词的大小写。例如,如果你想用单词 "dog" 替换单词 "Book" ,你应该替换成 "Dog"。

//法一
function myReplace(str, before, after) {
    if(before[0] === before[0].toUpperCase()){
        after = after[0].toUpperCase() + after.slice(1);
    }
    str = str.replace(before,after);
    return str;
}


//法二
function myReplace(str, before, after) {
  var re = /^[A-Z]/;
  if(re.test(before.charAt(0))){
    after = after.charAt(0).toUpperCase() + after.slice(1);
  }
  str = str.replace(before,after);
  return str;
}
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
Pig Latin

把指定的字符串翻译成 pig latin。
Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay"。
如果单词以元音开始,你只需要在词尾添加 "way" 就可以了。

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;
}

translate("consonant");//onsonantcay
DNA Pairing

DNA 链缺少配对的碱基。依据每一个碱基,为其找到配对的碱基,然后将结果作为第二个数组返回。
Base pairs(碱基对) 是一对 AT 和 CG,为给定的字母匹配缺失的碱基。
在每一个数组中将给定的字母作为第一个碱基返回。
例如,对于输入的 GCG,相应地返回 [["G", "C"], ["C","G"],["G", "C"]]
字母和与之配对的字母在一个数组内,然后所有数组再被组织起来封装进一个数组。

function pair(str) {
  var arr = str.split("");
  var pair = "";
  return arr.map(function(item){
      switch(item){
          case "C":
              pair = "G";
            break;
          case "G":
              pair = "C";
            break;
        case "A":
            pair = "T";
            break;
        case "T":
            pair = "A";
             break;
      }
      return [item,pair];
  });
}

pair("GCG");
Missing letters

从传递进来的字母序列中找到缺失的字母并返回它。
如果所有字母都在序列中,返回 undefined。

法一:
    var arr = str.split("");
    for(var i = 0;i < arr.length;i++){
        var minus = arr[i+1].charCodeAt() - arr[i].charCodeAt();/后项减去前项/
        if( minus > 1){
            return String.fromCharCode(arr[i].charCodeAt()+1);
        }
    }
法二:
function fearNotLetter(str) {
    var compare = str.charCodeAt(0),missing;
    str.split("").map(function(item,index){
        if(str.charCodeAt(index) === compare){
            ++ compare;
        }else{
            missing = String.fromCharCode(compare);
        }
    });
    return missing;
}
fearNotLetter("abce");
Boo who

检查一个值是否是基本布尔类型,并返回 true 或 false。
基本布尔类型即 true 和 false。

function boo(bool) {
 return typeof bool === "boolean";
}

boo(true);
Sorted Union

写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。
例如:unite([1, 3, 2], [5, 2, 1, 4], [2, 1]) 应该返回 [1, 3, 2, 5, 4]。

function unite(arr1, arr2, arr3) {
  var args = Array.from(arguments);
  var arr = args.reduce(function(prev,cur){
    return prev.concat(cur);
  });
  return arr.filter(function(item,index,arr){
    return arr.indexOf(item) === index;  
  });
}
unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);
Convert HTML Entities

将字符串中的字符 &、<、>、" (双引号), 以及 " (单引号)转换为它们对应的 HTML 实体。

法一
function convert(str) {
  str = str.replace(/&/g,"&").replace(//g,">")
           .replace(/"/g,""").replace(/"/g,"'");
  return str;
}
convert("Dolce & Gabbana");
法二:
function convert(str) {
    var htmlEntities={
        "&":"&",
        "<":"<",
        ">":">",
        """:""",
        """:"'",
    };
    return str.split("").map(function(entity){
        return htmlEntities[entity] || entity;
    }).join("");
}
convert("Dolce & Gabbana");

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86705.html

相关文章

  • FreeCodeCamp 初级算法 - 翻转字符串

    摘要:比如,就是获取第一个字符。后面的暂时不会执行直到遇见传入的字符串为,因为有了返回值,就不会再去调用了。 原文链接:http://singsing.io/blog/2017/... 翻转字符串 (Reverse a String) 题目链接 中文链接 英文链接 级别:初级 (Basic Algorithm Scripting) 问题解释 这个 function 接收一个字符串参数,...

    OpenDigg 评论0 收藏0
  • FreeCodeCamp基础算法答案解析

    摘要:总结下基础算法题先把字符串转化成数组,再借助数组的方法翻转数组顺序,最后把数组转化成字符串。检查一个字符串是否以指定的字符串结尾。删除数组中的所有假值。加密算法的核心是前个字母值加,后个字母值减从字母表重新回滚。 总结下FreeCodeCamp基础算法题: Reverse a String 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。 fu...

    sihai 评论0 收藏0
  • 我是如何从零开始学习前端的

    摘要:相关频道最后的坦白最后我得承认这一次我又标题党了无非是想吸引更多前端初学者进来,希望大家都能少走一些弯路,也希望那些从零开始自学前端的同学更有勇气去面对自己的选择。 我是怎么走上前端开发这条路? 首先,我是个文科生,大学里只学过vb,觉得计算机编程这东西太玄乎,不是我玩得转的。 后来机缘巧合去做了一家互联网创业公司的HR,阅了上千份程序员的简历,面了上百个不同水平不同领域的程序员。跟程...

    mykurisu 评论0 收藏0
  • W3Cschool——中级脚本算法

    摘要:依据每一个碱基,为其找到配对的碱基,然后将结果作为第二个数组返回。碱基对是一对和,为给定的字母匹配缺失的碱基。输入检查算法挑战检查一个值是否是基本布尔类型,并返回或。基本布尔类型即和。二进制字符串是以空格分隔的。 showImg(https://segmentfault.com/img/remote/1460000010866723); 前言 W3Cschool上有个编程挑战,里面的题...

    gecko23 评论0 收藏0
  • 前端20个真正灵魂拷问,吃透这些你就是中级前端工程师 【上篇】

    摘要:还是老规矩,从易到难吧传统的定时器,异步编程等。分配对象时,先是在空间中进行分配。内存泄漏内存泄漏是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 showImg(https://segmentfault.com/img/bVbwkad?w=1286&h=876); 网上参差不弃的面试题,本文由浅入深,让你在...

    mdluo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<