codewars练习js2021/5/67891026

codewars-js练习

2021/5/6

github 地址

my github地址,上面有做的习题记录,不断更新…

【1】<7kyu>【Greatest common divisor】

求两个正整数的最大公约数。整数可以很大,所以你需要找到一个聪明的解决方案。

example

mygcd(30,12),6)
(mygcd(8,9),1)
(mygcd(1,1),1)

思路
一开始采用了简单粗暴的方式(代码如下),然后时间超时。

function mygcd(x,y){
        var i = Math.min(x,y);
        var temp = [];
        if(x==1&y==1)return 1;
        while(i>=1){
            if(x % i ==0 & y % i ==0)return i;
            i--;
        }
    }

后来采用了下面这种辗转相除的方法,就通过了。
solution

<script type="text/javascript">
  // 辗转相除法
    function mygcd(a, b) {
        if (b === 0) {
            return a;
        }
        return mygcd(b, a % b);
    };
	// 验证
    console.log(mygcd(30,12));//6
    console.log(mygcd(8,9));//1
    console.log(mygcd(1,1));//1
</script>

原理:
如果有两个数a和b,b如果为0,那么a和b的最大公约数一定是a。那么就想尽办法让它出现0的情况。
在这里插入图片描述

2021/5/7

【1】<7kyu>【Sum of Triangular Numbers】

你的任务是返回包括第n个三角形数在内的所有三角形数的和。

example

[01]
02 [03]
04 05 [06]
07 08 09 [10]
11 12 13 14 [15]
16 17 18 19 20 [21]
If 4 is given: 1 + 3 + 6 + 10 = 20.

solution

<script type="text/javascript">
    function sumTriangularNumbers(n) {
        if(n<0)return 0;
        let sum =0;
        for(let i=1;i<n+1;i++){
            sum += (i*i + i)/2;
        }
        return sum;
    }
	// 验证
    console.log(sumTriangularNumbers(6));// 56
    console.log(sumTriangularNumbers(34));//7140
    console.log(sumTriangularNumbers(-291));// 0
    console.log(sumTriangularNumbers(943));//140205240
    console.log(sumTriangularNumbers(-971));// 0
</script>

2021/5/8

【1】<7kyu>【Invisible cubes】

example

0// 0
1//0
2//0
3//1
5//27

solution

<script type="text/javascript">
    function notVisibleCubes(n) {
        // console.log(n)
        return Math.max(0, (n-2)**3);
    }
</script>
【2】<6kyu>【Arabian String】

你必须创建一个可以将字符串从任何格式转换为PascalCase的方法。这也必须支持符号。

example

"example name" --> "ExampleName"
"your-NaMe-here" --> "YourNameHere"
"testing ABC" --> "TestingAbc"

solution

<script type="text/javascript">
    function camelize(str){
        if(str.match(/[a-z0-9]+/gi) == null) return ''
        return str.match(/[a-z0-9]+/gi).map(function(s) {
            return s[0].toUpperCase() + s.substr(1).toLowerCase()
        }).join('')

    }
	// 验证
    console.log(camelize("java script"));//"JavaScript" 
    console.log(camelize("cODE warS"));//"CodeWars" 
    console.log(camelize("your-NaMe-here"));//"YourNameHere"
</script>

2021/5/9

【1】<8kyu>【What’s the real floor?】

写一个函数,在美国系统中给定的楼层返回在欧洲系统中的楼层。

随着第一层被一层取代,第13层被移除,数字就会下降来代替它们。在13以上的情况下,它们向下移动两个,因为在它们下面有两个遗漏的数字。

example

1  =>  0 
0  =>  0
5  =>  4
15  =>  13
-3  =>  -3

solution

function getRealFloor(n) {
//   console.log(n)
  if(n<=0)return n
  else if(n>0 && n<13)return n-1;
  else if(n>13)return n-2;
}

2021/5/10

【1】<8kyu>【Multiplication table for number】

你的目标是返回一个从1到10的整数的乘法表。

example

1 * 5 = 5
2 * 5 = 10
3 * 5 = 15
4 * 5 = 20
5 * 5 = 25
6 * 5 = 30
7 * 5 = 35
8 * 5 = 40
9 * 5 = 45
10 * 5 = 50

solution

 function multiTable(number) {
        var result = [];
        for(var i=1;i<=10;i++){
            var mul = i * number
            var str = i  + ' * '  + number +  ' = ' + mul
            result.push(str)
        }
        return (result.join('\n'))

    }

2021/5/26

【1】<8kyu>【Gravity Flip】

example

flip('R', [3, 2, 1, 2])     =>  [1, 2, 2, 3]
flip('L', [1, 4, 5, 3, 5])  =>  [5, 5, 4, 3, 1]

solution

const flip=(d, a)=>{
   // 如果是R,则递增排序; 如果是L,则递减排序
  if(d == 'L')return a.sort((a,b)=>{return b-a})
  else return a.sort((a,b)=>{return a-b})
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值