第11题:组数按一定规则返回字符串
likes [] // must be "no one likes this"
likes ["Peter"] // must be "Peter likes this"
likes ["Jacob", "Alex"] // must be "Jacob and Alex like this"
likes ["Max", "John", "Mark"] // must be "Max, John and Mark like this"
likes ["Alex", "Jacob", "Mark", "Max"] // must be "Alex, Jacob and 2 others like this"
代码1
function likes(names) {
// TODO
let res = '';
switch(names.length){
case 0 :
res = 'no one likes this';
break;
case 1 :
res = names[0]+' likes this';
break;
case 2 :
res = names[0]+' and '+names[1]+' like this';
break;
case 3 :
res = names[0]+', '+names[1]+' and '+names[2]+' like this';
break;
default:
res = names[0]+', '+names[1]+' and ' +(names.length-2) + " others like this";
break;
}
return res
}
代码2
function likes(names) {
names = names || [];
switch(names.length){
case 0: return 'no one likes this'; break;
case 1: return names[0] + ' likes this'; break;
case 2: return names[0] + ' and ' + names[1] + ' like this'; break;
case 3: return names[0] + ', ' + names[1] + ' and ' + names[2] + ' like this'; break;
default: return names[0] + ', ' + names[1] + ' and ' + (names.length - 2) + ' others like this';
}
}
代码3
function likes(names) {
return {
0: 'no one likes this',
1: `${names[0]} likes this`,
2: `${names[0]} and ${names[1]} like this`,
3: `${names[0]}, ${names[1]} and ${names[2]} like this`,
4: `${names[0]}, ${names[1]} and ${names.length - 2} others like this`,
}[Math.min(4, names.length)]
}
第12题:编写一个调用的函数,该函数接受一个括号字符串,并确定括号的顺序是否有效。如果字符串有效,则函数应返回true;如果字符串入侵,则函数应返回false
"()" => true
")(()))" => false
"(" => false
"(())((()())())" => true
代码1
function validParentheses(parens) {
while(parens && parens.indexOf('()') !==-1){
parens = parens.replace(/\(\)/g,'');
}
console.log(!parens)
return !parens;
}
代码2
function validParentheses(parens){
var n = 0;
for (var i = 0; i < parens.length; i++) {
if (parens[i] == '(') n++;
if (parens[i] == ')') n--;
if (n < 0) return false;
}
return n == 0;
}
代码3
function validParentheses(parens){
var indent = 0;
for (var i = 0 ; i < parens.length && indent >= 0; i++) {
indent += (parens[i] == '(') ? 1 : -1;
}
return (indent == 0);
}
第13题:解码莫斯电码 kata-Decode the Morse code
代码1
decodeMorse = function (morseCode) {
let arr = morseCode.trim().split(' ').map( item =>{
return item.split(' ').map(letter => {return MORSE_CODE[letter]}).join('');
}).join(' ')
console.log(arr);
return arr
}
代码2
decodeMorse = function(morseCode){
function decodeMorseLetter(letter) {
return MORSE_CODE[letter];
}
function decodeMorseWord(word) {
return word.split(' ').map(decodeMorseLetter).join('');
}
return morseCode.trim().split(' ').map(decodeMorseWord).join(' ');
}
代码3
decodeMorse = function(morseCode){
return morseCode
.trim()
.split(/ | /)
.map( (code) => MORSE_CODE[code] || ' ')
.join('');
}
第14题: 笑脸验证规则
每张笑脸必须包含一对有效的眼睛,可以将眼睛标记为:或;
笑脸可以有鼻子,但不是必须的。鼻子的有效字符为-或~
每个笑脸都必须有一个笑脸,嘴上应标有)或D。
除提到的字符外,不允许其他字符。
countSmileys([':)', ';(', ';}', ':-D']); // should return 2;
countSmileys([';D', ':-(', ':-)', ';~)']); // should return 3;
countSmileys([';]', ':[', ';*', ':$', ';-D']); // should return 1;
代码1
function countSmileys(arr) {
///[:;-~)D]/
return arr.filter( item => {
return /[:;][-~]?[)D]/.test(item)
})
代码2
function countSmileys(arr) {
return arr.filter(x => /^[:;][-~]?[)D]$/.test(x)).length;
}
代码3
const countSmileys = ss => ss.reduce((a, s) => a + /^[:;][-~]?[D)]$/.test(s), 0);