codewars-javascript

一、打破驼峰

题目

Complete the solution so that the function will break up camel casing, using a space between words.

完成该解决方案,以便函数在单词之间使用空格来分解驼峰大小写

example

"camelCasing"  =>  "camel Casing"
"identifier"   =>  "identifier"
""             =>  ""

思路:

将传入的字符串转为数组,遍历数组,对比数组里的元素是否为大写字母,如果为大写,则前一个元素+=' '

代码:

function solution(string) {
    var arr = string.split('')
        for (var i=0;i<arr.length;i++){
            if(arr[i] == arr[i].toUpperCase()){
                    arr[i-1] +=  ' '

                }

            }

            return arr.join('')

}
console.log(solution("camelCasing"));

结果:

二、完美十字路口

题目:

小明有要约见一位朋友,但现在有十分钟空余时间,且该地有一个十字路口,每往一个方向走需要一分钟,给定小明一些方案,由‘w',' e',' n' ,'s'组成,使其最终能回到原点,并且时间刚刚好。

 思路:

1.先判断给定方案是否等于10分钟,不等于就返回false,否则就继续执行

2.给两个变量:下x,y分别表示南北,东西两路,如果为北,则x++;如果为南,则x--;如果为东,则y++;如果为西,则y--;如果最后x,y都等于0,则可以回到原点

代码:

        function isValidWalk(walk) {
            if(walk.length != 10 ){
                return false
            }
            var x=0
            var y=0
            for (var i=0; i<walk.length; i++){
                switch(walk[i]){
                    case 'n':
                        x++
                        break
                    case 's':
                        x--
                        break
                    case 'w':
                        y++
                        break
                    case 'e':
                        y--
                        break
                    default :
                    return false
                }
            }
            if(x==0 && y==0){
                return true
            }
            else {
                return false
            }
        }
        console.log(isValidWalk(['w','e','w','e','w','e','w','e']))

结果为:

false

三、用#隐藏信息

题目

使用#隐藏信息,最后四位保留

代码:

        function maskify(cc) {
            var newcc = cc.split('')
            var res = ''
            if(newcc.length>4){
                for(var i=0;i<newcc.length-4;i++){
                    newcc[i]='#'
                    res+=newcc[i]
                }
                for(var j=newcc.length-4;j<newcc.length;j++){
                    res+=newcc[j]
                }
            }
            else{
                res=cc
            }
            return res
        }
        console.log(maskify('111111'));//'##1111'

四、反转单词

题目:

将传入的字符串里的单词进行反转

例:

'double  spaced  words' -----'elbuod  decaps  sdrow'

思路:

1、先将传入的字符串使用split()方法分割,赋值给一个新变量

2、遍历新变量,将每一个元素先使用split方法转为数组,在使用reverse方法反转,然后使用join方法将这些字符连接成字符串,并将这些结果加载给res

代码:

         function reverseWords(str) {
            var words = str.split(" ")
            var res=[]
            for(var i = 0;i < words.length;i++){
               res.push(words[i].split('').reverse().join(''))
            }
            return res.join(' ')
        }
        console.log(reverseWords('double  spaced  words'));

结果:

'elbuod  decaps  sdrow'

五、尤里卡数

题目:

Take a Number And Sum Its Digits Raised To The Consecutive Powers And the sum == Number¡Eureka!输入一个范围,求出这个范围里的尤里卡数。

 例:

135=1^1+3^2+5^3----这是一个尤里卡数

思路:

使用循环,在给定的范围里循环,将数值转为字符串,然后遍历字符串,并计算

代码:

        function sumDigPow(a, b) {
            var res = []
            for(var i=a;i<=b;i++){
                var value = i.toString()
                var sum = 0
                for(var j=0;j<value.length;j++){
                    sum += Math.pow(value[j],j+1)
                }
                if(sum == i){
                    res.push(i)
                }
            }
            return res
        }
        console.log(sumDigPow(1,100));

 结果:

 [1, 2, 3, 4, 5, 6, 7, 8, 9, 89]

六、字符串结尾

题目:

完成解决方案,以便在传入的第一个参数(字符串)以第二个参数(也是字符串)结尾时返回true。

例:

solution('abc', 'bc') // returns true
solution('abc', 'd') // returns false

思路:

逆向遍历两个字符串,比较其元素是否相等

代码:

        function solution(str, ending){
            for(var i=str.length-1;i>=0;i--){
                for(var j=ending.length-1;j>=0;j--){
                    if(ending[j] == str[i]){
                        return true
                    }
                    else{
                        return false
                    }
                }
            }
        }
        console.log(solution('abcde', 'cd'));

结果:

false

 七、Tribonacci序列:

题目:

Tribonacci序列:序列的最后3个(而不是2个)数字相加,生成下一个;传入一个数组与一个数值,计算该Tribonacci序列,如果传入的数组值都为0,返回结果中的元素也为0;如果数值为0;则返回数组的第一个元素

例:

[ [1,1,1],  1 ]----- [1]

[ [3,2,1], 10 ]----- [3,2,1,6,9,16,31,56,103,190]

[ [0,0,0], 10 ]------ [0,0,0,0,0,0,0,0,0,0] 

[ [300,200,100], 0 ]---- []

思路:

先判断特殊情况,如果不是特殊情况,则再执行以下代码:先将传入的数组插入到res中,然后利用双层循环,第一次循环指定要计算的轮数,第二层循环用于求值

代码:

        function tribonacci(signature,n){
            sum = 0
            var res = []
            for(var i=0;i<signature.length;i++){
                sum += signature[i]
            }
            if(sum == 0){
                for (var j=0;j<n;j++){
                    res.push(0)
                }
            }
            else{
                if(n == 1){
                    res.push(signature[0])
                    return res
                }
                else if(n==0){
                    res =[]
                    return res
                }
                res = res.concat(signature)
                for(var i=0;i<n-3;i++){
                    for(j=0;j<res.length;j++){
                        sum = res[res.length-1]+res[res.length-2]+res[res.length-3]
                    }
                    res.push(sum)
                }
            }
            return res
        }
        var signature=[1,1,1]
        console.log(tribonacci(signature,10));

结果:

 [1, 1, 1, 3, 5, 9, 17, 31, 57, 105]

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值