???? 前言

大家好呀,我是毛小悠,能够叫我二毛,在家中排行老二,是一名前端开发工程师。

本系列文章旨在通过练习来进步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);}

????后序

本系列会定期更新的,题目会由浅到深的逐步提高。

求关注求点赞 ????~~????????????

能够关注我的公众号:前端毛小悠。欢送浏览