文章目录
codewars-js练习
2021/5/6
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})
}