博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端计划——Codewars的一些JavaScript题集
阅读量:6816 次
发布时间:2019-06-26

本文共 3162 字,大约阅读时间需要 10 分钟。

关于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

解题思路:使用位移运算符
//方法1function ipToInt32(ip){   return ip.split(".").reduce(function(int,v){ return int*256 + +v } )}
//方法2function 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];}

转载地址:http://dtdzl.baihongyu.com/

你可能感兴趣的文章
(转)Python新手写出漂亮的爬虫代码1——从html获取信息
查看>>
配置Nim的默认编译参数 release build并运行
查看>>
图片下载
查看>>
《构建之法》第四章读后感
查看>>
python os.path.dirname()
查看>>
android 解析json数据格式
查看>>
Vs2013 头文件注释
查看>>
****** 六 ******、软设笔记【数据结构】-查找、静态查找表,哈希表
查看>>
[转] fitnesse中的Map处理
查看>>
js - 常用功能方法汇总(updating...)
查看>>
matlab 函数库
查看>>
Django博客功能实现—文章评论的显示
查看>>
Activity里面嵌入Fragment一点小代码
查看>>
C#中//注释和///注释的区别
查看>>
Java 面向对象之构造函数和 this 关键字
查看>>
HTML&JS 随手记
查看>>
Linux设备文件的命名
查看>>
可参考的js代码
查看>>
特征多项式与常系数线性齐次递推学习笔记
查看>>
C#中的MemberwiseClone和clone的区别
查看>>