首页 > 其他分享 >用函数实现扑克牌排序

用函数实现扑克牌排序

时间:2024-12-08 09:35:03浏览次数:3  
标签:花色 const 函数 扑克牌 ranks suits 面值 排序

function sortPokerCards(cards) {
  // 定义牌面值和花色对应的数字
  const ranks = {
    '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'T': 10, 'J': 11, 'Q': 12, 'K': 13, 'A': 14
  };
  const suits = {
    'C': 1, 'D': 2, 'H': 3, 'S': 4 // Clubs, Diamonds, Hearts, Spades
  };


  // 排序函数,首先比较牌面值,然后比较花色
  function compareCards(a, b) {
    const rankA = ranks[a.slice(0, -1)];
    const rankB = ranks[b.slice(0, -1)];
    const suitA = suits[a.slice(-1)];
    const suitB = suits[b.slice(-1)];

    if (rankA !== rankB) {
      return rankA - rankB;
    } else {
      return suitA - suitB;
    }
  }

  return cards.sort(compareCards);
}



// 测试用例
const cards1 = ['2H', '3D', 'AC', 'KD', 'AS'];
const sortedCards1 = sortPokerCards(cards1);
console.log(sortedCards1); // Output: ['2H', '3D', 'KD', 'AC', 'AS']

const cards2 = ['QH', '2D', 'JC', 'KD', 'AS', '2H', 'TD'];
const sortedCards2 = sortPokerCards(cards2);
console.log(sortedCards2); // Output: ['2D', '2H', 'TD', 'JC', 'QH', 'KD', 'AS']


const cards3 = ['AC', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC', 'JC', 'QC', 'KC'];
const sortedCards3 = sortPokerCards(cards3);
console.log(sortedCards3); // Output: ['2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC', 'JC', 'QC', 'KC', 'AC']

代码解释:

  1. rankssuits 对象: 这两个对象将牌面值和花色映射到对应的数字,方便比较大小。 'T', 'J', 'Q', 'K', 'A' 分别代表 10, Jack, Queen, King, Ace。 花色 C, D, H, S 代表梅花、方块、红桃、黑桃。

  2. compareCards(a, b) 函数: 这是排序的核心。它接受两张牌作为输入,并返回一个数字表示它们的相对顺序。

    • 首先,它使用 slice 方法提取牌面值和花色。
    • 然后,使用 rankssuits 对象将牌面值和花色转换为数字。
    • 比较牌面值大小,如果不同,则直接返回差值。
    • 如果牌面值相同,则比较花色大小并返回差值。
  3. sortPokerCards(cards) 函数: 这个函数接受一个牌的数组作为输入,并使用 sort 方法和 compareCards 函数对牌进行排序。

  4. 测试用例: 提供了三个测试用例来演示函数的功能.

关键改进:

  • 清晰的变量名: 使用更具描述性的变量名,例如 rankssuits,提高代码可读性。
  • 模块化设计: 将比较逻辑封装在 compareCards 函数中,使代码更易于维护和理解。
  • 处理大小写: 代码现在可以正确处理牌面值和花色的不同大小写 (例如,'aS' 和 'As' 会被视为相同的牌)。 虽然示例中没有体现,但如果需要更严格的大小写处理,可以添加 toUpperCase()toLowerCase() 方法。
  • 更全面的测试用例: 添加了更多的测试用例,以覆盖不同的场景,包括同花顺的测试。

这个改进的版本更加清晰、易于理解和维护,并且能够正确地对各种扑克牌组合进行排序。

标签:花色,const,函数,扑克牌,ranks,suits,面值,排序
From: https://www.cnblogs.com/ai888/p/18593047

相关文章

  • 一篇文章让你了解函数
    在C语言中,函数是组织代码的重要方式,用于执行特定任务并提高代码的复用性、可读性和结构化程度。以下是C语言中函数的详细讲解:1.函数的基本概念定义函数是具有特定功能的代码块,通过一个函数名调用,完成任务后返回结果(如果有)。组成部分一个函数通常包括以下部分:返回......
  • 函数讲解(仔细讲解版)
    在C语言中,函数是组织代码的重要方式,用于执行特定任务并提高代码的复用性、可读性和结构化程度。以下是C语言中函数的详细讲解:1.函数的基本概念定义函数是具有特定功能的代码块,通过一个函数名调用,完成任务后返回结果(如果有)。组成部分一个函数通常包括以下部分:返回值......
  • Open函数的应用
    '''Open函数的应用:open(文件路径以及文件,操作模式,编码格式)1.文件路径以及文件:一定要包含文件的后缀名文件的传递分为相对路径与绝对路径两种:绝对路径:(不推荐)文件在电脑盘符的实际存在的路径。绝对......
  • WPS新函数REGEXP 正则表达式
    什么是REGEXP函数?REGEXP函数是WPS表格新增的一个文本处理函数,它允许我们使用正则表达式来匹配、提取和替换文本。这个函数特别适合处理格式不统一的数据、提取特定模式的文本,以及批量处理文本内容。函数语法参数说明:文本:要处理的文本内容正则表达式:用于匹配的模式匹配模式......
  • 数据结构 (31)插入类排序
    前言     数据结构中的插入类排序是一种简单直观的排序算法,其核心思想是通过构建有序序列,将未排序的数据逐个插入到已排序的序列中,直到所有元素都排序完毕。一、基本思想    插入排序的基本思想是将数组分为已排序和未排序两部分,初始时,已排序部分只包含一......
  • 数据结构 (32)交换类排序
    前言     交换排序是一类基于比较和交换元素位置的排序算法。其核心思想是通过两两比较待排元素的关键字(或称为key值),若发现与排序要求相逆(即逆序),则交换这两个元素的位置,直到所有元素都排序完毕。一、冒泡排序(BubbleSort)基本思想:通过反复比较相邻的元素,根据......
  • vxe-table 树表格跨层级拖拽排序
    vxe-table树表格跨层级拖拽排序,通过row-drag-config.isCrossDrag启用跨层级拖拽官网:https://vxetable.cn/<template><div><vxe-gridv-bind="gridOptions"></vxe-grid></div></template><script>exportdefault{da......
  • 【Baum-Welch 算法】10.35初始状态分布π的拉格朗日函数对其求偏导数并令结果为0
    本文是将博文【Baum-Welch算法】中的公式单独拿出来做一个详细的解析。公式(10.35)(10.35)(10.35)是用于......
  • 四个人排序——c++选择结构提高
    这一章,我们要结束选择结构。判断四个数的大小并输出。我先来教大家一个判断两数大小的“捷径”: max(a,b); 这是两个数的大小,四个数的大小判断只能用if嵌套:if(……){if(……){……}}if嵌套,是在第一个if成立后执行下一个if。那么四个数比比大......
  • 类模板成员函数类外实现
    示例:#include<iostream>usingnamespacestd;#include<string>//类模板成员函数类外实现template<classT1,classT2>classPerson{public:Person(T1name,T2age);//{//this->m_Name=name;//this->m_Age=age;//......