资讯专栏INFORMATION COLUMN

前端计划——Codewars的一些JavaScript题集

jayce / 2830人阅读

摘要:解题思路使用正则表达式地址转问题描述把输入的地址转换为格式比如解题思路使用位移运算符方法方法找零钱问题问题描述电影院票价为,而观众手中的美元面值有,。解题思路为每个面值的美元设定初始数量,然后开始对每个数组值遍历,根据不同面值设定不同规则。

关于Codewars:这是一个用于编程练习的网站,支持多种编程语言。网站首次注册需要完成两道题目,之后进入系统,类似于打怪升级。通过完成题目来实现段位的提升,而题目的难度也会随之增长。
传送到战场

下面将列出一些题目,可以作为对于JavaScript的练习。

题目列表

每道题目都有多种解法,这里列出的是得票最多的答案。代码简洁高效。

1、降序排列整数

题目描述:输入一个非负整数n,输出它的降序排列之后的整数。

例如输入:145263,输出:654321

解题思路:将n转换为字符串,分割,排序,逆序之后重新连接为字符串,再转为数字。
function descendingOrder(n){
  return parseInt(String(n).split("").sort().reverse().join(""))
}
2、三角形数(Triangular numbers)

题目描述:输入一个数字n,返回n对应的三角形数。
当n为负数时,返回0。

这里首先要解释一下什么叫三角形数:也就是1+2+3+...+n求和,之所以叫三角形数,是因为用*表示每行的数量,由下到上由n到1正好组成一个三角形。

解题思路:使用求和公式
function triangular( n ) {
  return (n > 0) ? ((n * n) + n) / 2 : 0;
}
3、求数根(digital root)

题目描述:给定一个数字n,求它的数根。

数根:求一个数的各位数字之后,若这个数为个位数则停止。否则继续。
例如:digital_root(942)
=> 9 + 4 + 2
=> 15 ...
=> 1 + 5
=> 6

解题思路:正常情况下很多人可能靠循环迭代,然而其实这个是有数学公式的。。。
function digital_root(n) {
  return (n - 1) % 9 + 1;
}
4、部分字符串逆转

题目描述:输入一个字符串。对其中字母数量大于5的单词进行反转,其余单词不变。然后输出新字符串。

例如:spinWords( "Hey fellow warriors" ) => returns "Hey wollef sroirraw"

解题思路:先通过空格分割字符串为数组,然后判断单词长度,反转顺序后重新连接。或者使用replace方法替换部分单词。
//方法1:传统方法
function spinWords(words){
  return words.split(" ").map(function (word) {
    return (word.length > 4) ? word.split("").reverse().join("") : word;
  }).join(" ");
}
//方法2:使用正则
function spinWords(string){
  return string.replace(/w{5,}/g, function(w) { return w.split("").reverse().join("") })
}
5、括号匹配检验

问题描述:编程中我们常常使用各种括号,但是括号必须互相对应。编写一个函数来实现检验给定的括号是否互相对应。

比如[{()}]是对的,而{(})是错误的。

解题思路:使用正则表达式
 function groupCheck(s){
   var r = /{}|[]|()/;
   while(r.test(s))
     s = s.replace(r, "");  
   return !s.length;   
 }
6、IPv4地址转Int32

问题描述:把输入的IPv4地址转换为Int32格式

比如ipToInt32("128.32.10.1") => 2149583361

解题思路:使用位移运算符
//方法1
function ipToInt32(ip){
   return ip.split(".").reduce(function(int,v){ return int*256 + +v } )
}
//方法2
function ipToInt32(ip){
    ip = ip.split(".");
    return  ((ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + (ip[3] << 0))>>>0;
}
7、找零钱问题

问题描述:电影院票价为$25,而观众手中的美元面值有$100,50,25。给定一个数组,代表观众的顺序和手中的面额,来判断是否能够找零钱。

比如
tickets([25, 25, 50]) // => YES
tickets([25, 100]) // => No 后面的面值太大,没有足够的零钱找给观众。

解题思路:为每个面值的美元设定初始数量,然后开始对每个数组值遍历,根据不同面值设定不同规则。最后看一下25面值的数量,如果为负数,就是不够找。
function tickets(peopleInLine) {
  var bills = [0, 0, 0]
  for (var i = 0; i < peopleInLine.length; i++) {
    switch (peopleInLine[i]) {
      case 25:
        bills[0]++
        break
        
      case 50:
        bills[0]--
        bills[1]++
        break
        
      case 100:
        bills[1] ? bills[1]-- : bills[0] -= 2
        bills[0]--
        break
    }
    
    if (bills[0] < 0) {
      return "NO"
    }
  }
  
  return "YES"
}
8、一个字符串处理问题

问题描述:对给定的字符串进行处理,把每个单词的第一个字母移到最后,然后加上ay。

例如:pigIt("Pig latin is cool"); // igPay atinlay siay oolcay

解题思路:对字符串进行slice函数处理。或者使用正则
//方法1:使用slice函数
function pigIt(str){
  return str.split(" ").map(function(el){
    return el.slice(1) + el.slice(0,1) + "ay";
  }).join(" ");
}
//方法2:使用正则
function pigIt(str){
  return str.replace(/(w)(w*)(s|$)/g, "$2$1ay$3")
}
9、单位换算问题

问题描述:输入一个数字代表一段距离,然后返回不同的单位值。比如m/km/Mm等

例如:
输入meters(5),返回"5m"
输入meters(51500),返回"51.5km"

解题思路:设定一个count,对应将单位放在数组里面,通过循环除以1000来判断最终单位。
function meters(x) {
 var count = 0;
 var DW  = ["m","km","Mm","Gm","Tm","Pm","Em","Zm","Ym"];
 while(x>=1000){
   x /= 1000;
   count++;
 }
 return x+DW[count];
}

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

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

相关文章

  • JavaScript Quiz系列题集

    摘要:系列题集系列题集系列题集系列题集系列题集系列题集系列题集随手记几个题目先,权当草稿,如果有朋友帮忙分析下原因,不胜感激,哈哈以前的文章地址是这样的格式,现在变了 从毕业开始切图接触前端,慢慢转向javascript开发...但是,感觉自己的javascript难当大任,基础薄弱。网上面试题集很多,设计HTML/CSS/JS,但其中的问题,如果不是自己亲历,没有被难住,是不会有太深印象的...

    xinhaip 评论0 收藏0
  • 前端实习面试一些建议

    摘要:作者今年大三,在春招过程中参加了多家大公司的面试后,拿到了腾讯的前端实习,在这里做一些总结,希望给还未参加过实习面试的同学一些帮助。在之后的面试时就更加从容一些了。 作者今年大三,在春招过程中参加了多家大公司的面试后,拿到了腾讯的前端实习 offer,在这里做一些总结,希望给还未参加过实习面试的同学一些帮助。 一、简历的准备 简历制作是很重要的一个环节,一份好的简历会给面试官留下很不错...

    Rango 评论0 收藏0
  • 在线编程练习实践网站

    摘要:在此收集一些自己遇到的一些在线练习的网站,当然大部分是。建议边学习边编程,学习编程是不能光看不实践的。国外的一个练习网站,有,也有,每种语言都有自己的道场,每个用户都有不同的等级,刷题提高等级,也可以插卡别人优秀的解决方案。 在学习的过程中会发现很多知识点如果不在工作中运用或者手写带验证的话,很容易忘记。任何技能的掌握都是需要不断练习的。在此收集一些自己遇到的一些在线练习的网站,当然大...

    huhud 评论0 收藏0
  • 在线编程练习实践网站

    摘要:在此收集一些自己遇到的一些在线练习的网站,当然大部分是。建议边学习边编程,学习编程是不能光看不实践的。国外的一个练习网站,有,也有,每种语言都有自己的道场,每个用户都有不同的等级,刷题提高等级,也可以插卡别人优秀的解决方案。 在学习的过程中会发现很多知识点如果不在工作中运用或者手写带验证的话,很容易忘记。任何技能的掌握都是需要不断练习的。在此收集一些自己遇到的一些在线练习的网站,当然大...

    xiaotianyi 评论0 收藏0
  • 记做面试官一天

    摘要:今天公司安排我负责前端的面试其实我之前整过前端只能说整过具体做过多少前端的东西只能说我理解的前端比较符合视觉传达链接提取码其实我觉得怎样展示自己对前端的理解一是要知道前端是要做什么的目的是什么今天面试的每个人我都很好地跟他们聊了因为在外地打 今天公司安排我负责前端的面试,其实我之前整过前端,只能说整过,具体做过多少前端的东西,只能说我理解的前端比较符合视觉传达.链接:https://p...

    incredible 评论0 收藏0

发表评论

0条评论

jayce

|高级讲师

TA的文章

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