???? 前言
大家好呀,我是毛小悠,能够叫我二毛,在家中排行老二,是一名前端开发工程师。
本系列文章旨在通过练习来进步 JavaScript 的能力,一起欢快的做题吧。????????????
以下每道题,二毛我都有尝试做一遍。倡议限时训练,比方限定为半小时,如果半小时内想不进去,能够联合文章开端的参考答案来思考。
能够在下方评论区留言或者加我的微信:code\_maomao。期待你的到来。
求关注求点赞 ????\~~~????????????
???? 题目 1:香蕉
给定一串字母 a,b,n,您能够通过去除各种字母而后从左到右浏览来制作“香蕉”一词的几种不同办法?
(应用 - 示意划线字母)
例
输出值
bbananana
输出量
b-anana--
b-anan--a
b-ana--na
b-an--ana
b-a--nana
b---anana
-banana--
-banan--a
-bana--na
-ban--ana
-ba--nana
-b--anana
笔记
- 您必须输入所有可能的香蕉,但程序无关紧要,
习题代码:
var bananas = function(s) {
// Your code here!
return []}
???? 题目 2:二十一点记分员
实现确定纸牌游戏二十一点(又名 21)中一手得分的性能。
该函数接管代表手牌中每个卡牌值的字符串数组(“2”,“3”,…,“10”,“J”,“Q”,“K”或“A”),并应返回手上的分数(整数)。
计分规定:
号码卡计为其面值(2 到 10)。J,Q 和 K 数为 10。王牌能够数为 1 或 11。
返回小于或等于 21 的牌的最高分数。如果没有小于或等于 21 的分数,则返回大于 21 的最小分数。
例子
["A"] ==> 11
["A", "J"] ==> 21
["A", "10", "A"] ==> 12
["5", "3", "7"] ==> 15
["5", "4", "3", "2", "A", "K"] ==> 25
习题代码:
function scoreHand(cards) {// TODO}
答案
???? 题目 1 的答案
参考答案 1:
var bananas = function(s) {let r = {}, re = /^-*b-*a-*n-*a-*n-*a-*$/
function f(s, i) {if(re.exec(s)) r[s] = true
if(i < s.length) {f(s.slice(0,i) + '-' + s.slice(i+1),i+1)
f(s,i+1)
}
}
f(s, 0)
return Object.keys(r)
}
参考答案 2:
var bananas = function(s) {let stack = [s];
let solutions = [];
let analyzed = {};
let found = {};
while (stack.length > 0) {let e = stack.pop();
if (isBanana(e) && !found[e]) {found[e] = true;
solutions.push(e)
} else {for (let i=0; i < e.length; i++) {if (e.charAt(i) !== '-') {let candidate = setCharAt(e, i, '-');
if (hasChanceToWork(candidate) && !analyzed[candidate] ) {analyzed[candidate] = true;
stack.push(candidate);
}
}
}
}
}
return solutions;
}
var hasChanceToWork = function(candidateSolution) {let banana = 'banana'.split('');
let index = 0;
while (index < candidateSolution.length) {if (candidateSolution[index] === banana[0]) {banana.shift();
}
index++;
}
return banana.length === 0;
}
var isBanana = function(s) {
let bananaIndex = 0;
let index = 0;
while (index < s.length) {if (s.charAt(index) != '-') {if(s.charAt(index) !== 'banana'.charAt(bananaIndex)) {return false;} else {
bananaIndex++;
index++;
}
} else {index++;}
}
return true;
}
var setCharAt = function(string, index, character) {let modified = string.split('');
modified[index] = character;
return modified.join('');
}
参考答案 3:
var bananas = function(s) {var r=[];
for(var a=0; a<s.length; a++)
if(s[a]=='b')
for(var b=a+1; b<s.length; b++)
if(s[b]=='a')
for(var c=b+1; c<s.length; c++)
if(s=='n')
for(var d=c+1; d<s.length; d++)
if(s[d]=='a')
for(var e=d+1; e<s.length; e++)
if(s[e]=='n')
for(var f=e+1; f<s.length; f++)
if(s[f]=='a')
r.push('-'.repeat(a)+"b"+'-'.repeat(b-a-1)+"a"+
'-'.repeat(c-b-1)+"n"+'-'.repeat(d-c-1)+"a"+
'-'.repeat(e-d-1)+"n"+'-'.repeat(f-e-1)+"a"+
'-'.repeat(s.length-f-1));
return r;
}
参考答案 4:
const r = /^-*b-*a-*n-*a-*n-*a-*$/;
const addDash = (s, i) => [...s].map((v,x) => x==i?'-':v).join('')
const bananas = (s, i) => {
i = i || 0;
let results = [];
if(r.test(s)){results.push(s);
return results;
}
for(; i < s.length; i++){let tmpStr = addDash(s, i);
results.push(...bananas(tmpStr, i+1));
}
return results;
}
参考答案 5:
var bananas = function(s, text = 'banana') {if (s.length < text.length) return []
if (!text.length) return [s.split('').map(() =>'-').join('') ]
return [].concat(s[0] === text[0] ? bananas(s.slice(1), text.slice(1)).map(x => s[0] + x) : [],
bananas(s.slice(1), text).map(x => '-' + x)
)
}
???? 题目 2 的答案
参考答案 1:
const cardsMap = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, J: 10, Q: 10, K: 10, A: 1}
const scoreHand = cards => {const sum = cards.reduce((acc, card) => acc + cardsMap[card], 0)
return sum < 12 && cards.includes('A') ? sum + 10 : sum
}
参考答案 2:
function scoreHand(cards){
var score = 0;
var numAces = 0;
for(i=0;i<cards.length;i++){console.log(cards[i]);
switch(cards[i]){
case 'A':
score += 11;
numAces++;
break;
case 'K':
case 'Q':
case 'J':
score += 10;
break;
default:
score += parseInt(cards[i]);
}
}
while (numAces > 0 && score > 21){
score -= 10;
numAces--;
}
return score;
}
参考答案 3:
function scoreHand(cards) {
var aces = 0
, score = cards.reduce(function (s, c) {if (c === 'A') {aces++; return s + 11}
return /\d/.test(c) ? s + parseInt(c) : s + 10
}, 0)
while (aces-- && score > 21) score -= 10
return score
}
参考答案 4:
/**
* @param cards An array of strings representing each card
* @returns number Score of the hand
*/
function scoreHand(hand)
{
var score = 0;
var nbAce = 0;
hand.forEach(function(card) {var kurd = parseInt(card);
if (kurd) {score += kurd;} else if (card != 'A') {score += 10;} else {
++nbAce
score += 11
}
});
if (nbAce !== 0) {for (var i = 0; i < nbAce; i++) {if (score > 21) {score -= 10;}
}
}
return score;
}
参考答案 5:
function scoreHand(cards) {let s=cards.reduce((s,c)=>s+(c=='A' ? 1 : isNaN(+c)?10:+c ), 0)
return s + 10 * (cards.includes('A') && s<12);
}
???? 后序
本系列会定期更新的,题目会由浅到深的逐步提高。
求关注求点赞 ????~~????????????
能够关注我的公众号: 前端毛小悠 。欢送浏览