文章目录
codewars-js练习
2021/1/27
github 地址
【1】<7kyu>【Exes and Ohs】
Check to see if a string has the same amount of 'x’s and 'o’s. The method must return a boolean and be case insensitive. The string can contain any char.
检查一个字符串是否有相同数量的’x’和’o’。该方法必须返回一个布尔值,且不区分大小写。字符串可以包含任何字符。
example:
XO("ooxx") => true
XO("xooxx") => false
XO("ooxXm") => true
XO("zpzpzpp") => true // when no 'x' and 'o' is present should return true
XO("zzoo") => false
solution
<script type="text/javascript">
function XO(str) {
// 将str全部转为小写。并分割放到数组中
var strArr = str.toLowerCase().split('');
var xArr = [];
var oArr = [];
// 遍历数组,将数组中x和o分别放到新数组中
for(var i=0;i<strArr.length;i++){
if(strArr[i] == 'x'){
xArr.push(strArr[i]);
}else if(strArr[i] == 'o'){
oArr.push(strArr[i]);
}
}
// console.log('x:',xArr);
// console.log('o:',oArr);
// 判断两个新数组的长度,若相等则说明包含数量相同
if(xArr.length == oArr.length){
return true;
}
return false;
}
// 验证
console.log(XO('xo'));//true;
console.log(XO("xxOo"));//true;
console.log(XO("xxxm"));//false;
console.log(XO("ooom"));//false
</script>
【2】<7kyu>【Find the stray number】
You are given an odd-length array of integers, in which all of them are the same, except for one single number.
Complete the method which accepts such an array, and returns that single different number.
The input array will always be valid! (odd-length >= 3)
给定一个奇数长度的整数数组,其中除了一个数字之外,其他都是相同的。完成接受这样一个数组的方法,并返回一个不同的数字。输入数组将始终有效!(奇数长的> = 3)
example:
[1, 1, 2] // 2
[17, 17, 3, 17, 17, 17, 17] // 3
solution
<script type="text/javascript">
function stray(numbers) {
console.log(numbers);
var len = numbers.length;
var map = {};
if(len % 2 !=0){
for(var i=0;i<len;i++){
// 获取到每个元素
var key = numbers[i];
// console.log('key',key);
// 通过判断新对象中是否含有,则来判断每个数出现的次数
if(map[key]){
map[key] ++;
}else{
map[key] =1;
}
}
// console.log('map',map);
for(var key in map){
// console.log(map[key]);
if(map[key] == 1){
return parseInt(key);
}
}
}
return 0;
}
// // // 验证
console.log(stray([1,2]));//0
console.log(stray([1,1,2]));//2;
console.log(stray([17,17,3,17,17,17,17]));//3;
console.log(stray([1,2,1]));//2
console.log(stray([8, 1, 1, 1, 1, 1, 1 ]));//8
</script>
【3】<7kyu>【Odd or Even?】
Given a list of numbers, determine whether the sum of its elements is odd or even.
Give your answer as a string matching "odd"
or "even"
.
If the input array is empty consider it as: [0]
(array with a zero).
example:
odd_or_even([0]) == "even"
odd_or_even([0, 1, 4]) == "odd"
odd_or_even([0, -1, -5]) == "even"
solution
<script type="text/javascript">
function oddOrEven(array) {
// console.log(array);
var sum =0;
for(var i=0;i<array.length;i++){
sum += array[i];
}
// console.log('sum',sum);
if(sum %2 == 0){
return 'even';
}
return 'odd';
}
// 验证
console.log(oddOrEven([0]));// 'even'
console.log(oddOrEven([]));//'even'
console.log(oddOrEven([0,1,4]));//'odd'
console.log(oddOrEven([-1023, -1, 3]));// 'odd'
</script>
【4】<7kyu>【Disemvowel Trolls】
Your task is to write a function that takes a string and return a new string with all vowels removed.
For example, the string “This website is for losers LOL!” would become “Ths wbst s fr lsrs LL!”.
Note: for this kata y
isn’t considered a vowel.
编写一个函数,接受一个字符串并返回一个删除了所有元音的新字符串。注意:这个形符y不被认为是元音。
example:
"This website is for losers LOL!"//"Ths wbst s fr lsrs LL!"
solution
<script type="text/javascript">
function disemvowel(str) {
// console.log(str);
var vowelArr = ['a','A','e','E','i','I','o','O','u','U'];
// console.log(vowelArr);
var strArr = str.split('');
// console.log(strArr);
for(var i=0;i<vowelArr.length;i++){
for(var j=0;j<strArr.length;j++){
if(vowelArr[i] == strArr[j]){
// console.log(strArr[j]);
strArr.splice(j,1);
}
}
}
var newStr = strArr.join('');
// console.log(newStr);
return newStr;
}
// 验证
console.log(disemvowel("This website is for losers LOL!"));//"Ths wbst s fr lsrs LL!"
</script>
【5】<6kyu>【Help the bookseller !】
A bookseller has lots of books classified in 26 categories labeled A, B, … Z. Each book has a code c
of 3, 4, 5 or more characters. The 1st character of a code is a capital letter which defines the book category.
In the bookseller’s stocklist each code c
is followed by a space and by a positive integer n (int n >= 0) which indicates the quantity of books of this code in stock.
获取到此类别的总数量
example:
b = ["ABAR 200", "CDXE 500", "BKWR 250", "BTSQ 890", "DRTY 600"]
c = ["A", "B"]
res = "(A : 200) - (B : 1140)"//结果
stockList(b, c), res)
b = ["CBART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60"]
c = ["A", "B", "C", "W"]
res = "(A : 0) - (B : 114) - (C : 70) - (W : 0)"//结果
stockList(b, c), res)
solution
<script type="text/javascript">
function stockList(listOfArt, listOfCat){
if (!listOfArt.length || !listOfCat.length) return ''
return listOfCat.map(w => {
const s = listOfArt.reduce((a, b) => a + (b.charAt(0) === w ? +b.split(' ')[1] : 0), 0)
return `(${w} : ${s})`
}).join(' - ')
}
// 验证
b = ["ABAR 200", "CDXE 500", "BKWR 250", "BTSQ 890", "DRTY 600"]
c = ["A", "B"]
console.log(stockList(b, c));//"(A : 200) - (B : 1140)"
</script>
以上为自己思路供大家参考,可能有更优的思路。(最后一题为大佬思路,绝)