???? 前言
大家好呀,我是毛小悠,能够叫我二毛,在家中排行老二,是一名前端开发工程师。
本系列文章旨在通过练习来进步JavaScript的能力,一起欢快的做题吧。????????????
以下每道题,二毛我都有尝试做一遍。倡议限时训练,比方限定为半小时,如果半小时内想不进去,能够联合文章开端的参考答案来思考。
能够在下方评论区留言或者加我的微信:code\_maomao。期待你的到来。
求关注求点赞????\~~~????????????
???? 题目1:香蕉
给定一串字母a,b,n,您能够通过去除各种字母而后从左到右浏览来制作“香蕉”一词的几种不同办法?
(应用-示意划线字母)
例
输出值
bbananana
输出量
b-anana--b-anan--ab-ana--nab-an--anab-a--nanab---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[c]=='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);}
????后序
本系列会定期更新的,题目会由浅到深的逐步提高。
求关注求点赞 ????~~????????????
能够关注我的公众号:前端毛小悠。欢送浏览