生成检查的顺子的表

const {uniq} = require('lodash');

function makeLine(n = 4) {
  let r = {}, t = [];

  function _(n) {
    const melds = [];

    if (n == 0) {
      const meld = 'A23456789TJQKA'.split('');
      const meldLen = meld.length;
      for (let width = 3, j = meldLen; width < j; width++) {
        for (let i = 0, j = meldLen - width + 1; i < j; i++) {
          let line = meld.slice(i, width + i);
          let lastCard = line[line.length - 1];
          if (lastCard === 'A') {
            line.pop();
            line.splice(0, 0, lastCard);
          }
          melds.push(line.join(''));
        }
      }
    } else {
      _(n - 1).forEach(line=>{
        if (line.length > 1) { // 必须要有一个真实的值参与顺子计算
          let lineArr = line.split('');
          for (let i = 0, j = lineArr.length;i < j;i++) {
            let c = lineArr.slice();
            c[i] = '*';
            let s = c.join('').replace('*', '');
            melds.push(s);
          }
        }
      });
    }

    t[n] = uniq(melds);
    // hash
    t[n].forEach(s=>{
      if (r[s] === undefined) {
        r[s] = n;
      }
    });
    return t[n];
  }
  _(n);

  return r;
}

 

posted @ 2020-06-16 10:08  Please Call me 小强  阅读(165)  评论(0编辑  收藏  举报