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; }