初识Codewars,跟我一起用JS做些简单题吧(1)

253 阅读2分钟

偶然发现了一个新的刷题网站——Codewars,相较于我们常用的力扣,这个网站多了可以跟身边人进行排名这个功能。不过有一点该网站是全英文的,用个翻译软件翻译下也是可以的。接下来让我们一起做做里面的题目吧!

分享我做的题目与解析

Create Phone Number(生成电话号码)

编写一个接受10个整数( 0到9之间 )的数组的函数,该函数以电话号码的形式返回这些数字的字符串。

Example:

createPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) 
// => returns "(123) 456-7890" 

注:别忘了右括号后面的空格!

解析

首先定义一个字符串num,再利用for循环和replace()方法将num里面的x一个个替换成传入的numbers。

代码

function createPhoneNumber(numbers){
    var num = "(xxx) xxx-xxxx";
    for(var i = 0; i < numbers.length; i++){
        num = num.replace('x', numbers[i]);
    }
    return num;
}


Does my number look big in this?

水仙花数是一个正数,它是它自己的数字的和,每一个数字的幂在一个给定的底数。在这个形中,我们将把自己限制在十进制(以10为基数)。

Example:

153(3位数字)是水仙花数:
1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
1652(4位数字),这不是:
1^4 + 6^4 + 5^4 + 2^4 = 1 + 1296 + 625 + 16 = 1938

注:你的代码必须返回true或false(不是'true'和'false'),这取决于给定的数字是否是以10为基数的自恋数字。这在你的语言中可能是真或假,例如PHP不需要对文本字符串或其他无效输入进行错误检查,只将有效的正非零整数传递到函数中。

解析

首先用string()方法和split()方法将value转换为字符串数组,再用for循环和math.pow()方法得到每一位的temp.length次方将其加起来,与传入的value进行判断返回true或false。

代码

function narcissistic(value) {
  var temp = String(value).split("");
  var ans = 0;
  var n = temp.length;
  for (let i = 0; i < n; i++) {
    ans = ans + Math.pow(temp[i], n);
  }
  return ans == value;
}


Count characters in your string(统计字符串个数)

计算字符串中出现的所有字符。如果您有一个像aba这样的字符串,那么结果应该是{'a': 2, 'b': 1}。

Example:

count("aba")//=> returns { a: 2, b: 1 } 
count("")//=> returns{}

注:字符串是空的话,那么结果应该是空的对象字面量{}

解析

首先创建一个空对象,通过split()方法将string转换成字符串数组。再遍历数组,并判断在count中是否存在s

代码

function count(string) {
    var count = {}
    string.split('').forEach(function(s){
        count[s] ? count[s]++ : count[s] = 1
    })
    return count
}

心得

刷Codewars的初体验:

刚开始去刷Codewars的时候,基本都是难度为6kyu的题目,也就是一些简单题,这些题目都是平台随机给题的。如果是和我一样刚开始接触的人,从简单题刷起是最合适的。个人觉得Codewars上的题目还是蛮有意思的,解法也有很多,最有趣的是它会通过你的解法来给你相应的分数,还可以和周围的人进行排名。

在刷题的过程中,随着题目难度的上升肯定会遇到一些问题,有的甚至不知道该从哪里下手,但通过评论区看一些大佬的解法自己又会有些思路。总结一下,Codewars是个很好的编程刷题平台,希望自己能一直坚持刷下去。