判断7张牌中是否存在顺子牌型

2023-03-12 0 1,505

从一副不含大小王的牌组中随机抽出7张牌,判断7张牌中是否存在顺子牌型,即是否存在5张连续的牌。

当存在顺子牌型时,返回最大的一组顺子,即点数之和相加最大的5张连续牌,不存在时则直接返回null。

每张扑克牌由3位数的字符串组成,【1位花色+2位点数】即百位表示花色,个位和十位共同表示点数
花色部分:1-4分别表示,黑桃、红桃、草花、方块
点数部分:A为1,2-10为数字本身,J为11,Q为12,K为13。A可以视为14。

例:
101 表示黑桃A
201 表示红桃A
112 表示黑桃Q

【需求】
需要用JavaScript完成函数getShunzi,使其实现以下示例效果

【示例】
示例 1:
输入: [‘101′,’102′,’103′,’104′,’105’, ‘106’, ‘107’]
输出: [‘103′,’104′,’105′,’106′,’107’]

示例 2:
输入: [‘202′,’203′,’101′,’104′,’105′,’308′,’107’]
输出: [‘101′,’202′,’203′,’104′,’105’]

示例 3:
输入: [‘101′,’102′,’103′,’104′,’105’, ‘201’, ‘107’]
输出: [‘101′,’102′,’103′,’104′,’105’] 或 [‘201′,’102′,’103′,’104′,’105’] 均可

示例 4:
输入: [‘202′,’206′,’101′,’104′,’105’, ‘201’, ‘308’]
输出: null
*/

module.exports = getShunzi;

function Poker(s) {
const ZERO = “0”.charCodeAt(0);
this.suit = s.charCodeAt(0) – ZERO;
this.number = 10 * (s.charCodeAt(1)-ZERO) + s.charCodeAt(2)-ZERO;
}

Poker.prototype.__toString = function() {
var s = “” + this.suit;
if (this.number < 10) {
s += “0”;
} else if (this.number === 14) {
s += “01”; // 01,14都是A
return s;
}
s += this.number;
return s;
}

Poker.groupBy = function(/* Poker[] */pokers) {
var a = [null, [], [], [], []];
pokers.forEach(function(p) {
a[p.suit].push(p);
});
return a;
}

Poker.sortByNumber = function(pokers) {
return pokers.sort(function(/* Poker /a, / Poker */b) {
if (0 === a.number – b.number) {
return a.suit – b.suit;
}
return a.number – b.number;
});
}

Poker.unique = function(pokers) {
var m = [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0];
var a = [];
pokers.forEach(function(p) {
if (m[p.number] === 0) {
a.push(p);
m[p.number] += 1;
}
});
return a;
}

/**

  • @param {string[]} pokers
  • @return {string[]}
    */
    function getShunzi(pokers = []) {
    // 在此编写逻辑
    var a = pokers.map(function(s) {
    return new Poker(s);
    });
    // “A” 01,14
    var len = a.length;
    for (var i = 0; i <len; i++) {
    if (a[i].number === 1) {
    a.push(new Poker(a[i].suit +”14″))
    }
    }
    a = Poker.unique( Poker.sortByNumber(a) );
    // console.debug(a) var left, right;
    var d = 0;
    const N = 5;
    for (right = a.length-1, left = right – 1;
    0 < left && 0 < right && right+1-left < N; )
    {
    d = a[left+1].number – a[left].number;
    if (d !== 1) {
    right -= 1;
    left = right -1;
    } else {
    left -= 1;
    }
    // console.debug(“left=”+left + “, right=” + right + “, d=”+d);
    }
    if (right+1 – left < N) {
    return null;
    }
    d = a[left+1].number – a[left].number;
    if (d !== 1) {
    return null;
    }
    return a.slice(left, right+1).map(function(poker) {
    return poker.__toString();
    });
    }
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18.
    19.
    20.
    21.
    22.
    23.
    24.
    25.
    26.
    27.
    28.
    29.
    30.
    31.
    32.
    33.
    34.
    35.
    36.
    37.
    38.
    39.
    40.
    41.
    42.
    43.
    44.
    45.
    46.
    47.
    48.
    49.
    50.
    51.
    52.
    53.
    54.
    55.
    56.
    57.
    58.
    59.
    60.
    61.
    62.
    63.
    64.
    65.
    66.
    67.
    68.
    69.
    70.
    71.
    72.
    73.
    74.
    75.
    76.
    77.
    78.
    79.
    80.
    81.
    82.
    83.
    84.
    85.
    86.
    87.
    88.
    89.
    90.
    91.
    92.
    93.
    94.
    95.
    96.
    97.
    98.
    99.
    100.
    101.
    102.
    103.
    104.
    105.
    106.
    107.
    108.
    109.
    110.
    111.
    112.
    113.
    114.
    115.
    116.
    117.
    118.
    119.
    120.
    121.
    122.
    123.
    124.
    125.
    126.
    127.
    128.
    129.
    130.
    131.
  • main.js

var getShunzi = require (“./code_3_plus”);

// var pokers = [‘101′,’102′,’103′,’104′,’105’, ‘106’, ‘107’]
// var pokers = [‘107′,’202′,’102′,’203′,’105′,’101′,’104′,’204′,’308’];
// var pokers = [‘202′,’203′,’101′,’104′,’105′,’308′,’107’];
// var pokers = [‘101′,’102′,’103′,’104′,’105’, ‘201’, ‘107’];
// var pokers = [‘202′,’206′,’101′,’104′,’105’, ‘201’, ‘308’];
// var pokers = [‘201′,’208′,’209′,’110′,’111′,’112′,’313′,’101’]
var pokers = [‘101′,’207′,’411′,’113′,’102′,’412′,’303’];
var a = getShunzi(pokers);

console.log(a);

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 判断7张牌中是否存在顺子牌型 https://www.jkxiazai.com/600.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务