关于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];
}