题目描述:
- 在斗地主扑克牌游戏中, 扑克牌由小到大的顺序为:3,4,5,6,7,8,9,10,J,Q,K,A,2,
- 玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。
- 其中顺子的出牌规则为:由 至少 5 张由小到大连续递增 的扑克牌组成,且 不能包含 2 。
- 例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,10,J,Q,K,A}都是有效的顺子;
- 而{J,Q,K,A,2}、 {2,3,4,5,6}、{3,4,5,6}、{3,4,5,6,8}等都不是顺子。
- 给定一个包含13张牌的数组,如果有满足出牌规则的顺子,请输出顺子。
- 如果存在多个顺子,请每行输出一个顺子,且需要按顺子的 第一张牌的大小(必须从小到大) 依次输出。
- 如果没有满足出牌规则的顺子,请 输出 No
输入描述:
13张任意顺序的扑克牌,每张扑克牌数字用空格隔开,每张扑克牌的数字都是合法的,并且不包括大小王:
29J 234K A 79A 56
不需要考虑输入为异常字符的情况
输出描述:
组成的顺子,每张扑克牌数字用空格隔开:
34567
示例1:
29J 234K A 79A 56
输出
34567
说明
13张牌中,可以组成的顺子只有1组:3 4 5 6 7
实现:
let str = '29J 234K A 79A 56';
let newStr = str.split(' ').join('').split('').join(',');
newStr = newStr.replace(/J/g,'11')
newStr = newStr.replace(/Q/g,'12')
newStr = newStr.replace(/K/g,'13')
newStr = newStr.replace(/A/g,'14')
let arr = newStr.split(',')
arr.sort((a,b)=>{
return a-b
})
let count = 0;
let newArr0 = arr.filter(item => item!=2)
let newArr = newArr0.map(Number)
for (let i = 0; i < newArr.length - 4; i++) {
let consecutiveCount = 1;
let currentNum = newArr[i];
let sequence = [currentNum];
for (let j = i + 1; j < newArr.length; j++) {
if (newArr[j] === currentNum + 1 || newArr[j] === currentNum) {
if (newArr[j] === currentNum + 1) {
consecutiveCount++;
currentNum++;
sequence.push(newArr[j]);
} else {
sequence.push(newArr[j]);
continue;
}
} else {
break;
}
if (consecutiveCount >= 5) {
console.log(sequence);
}
}
}