斗地主之我的兄弟叫顺子
斗地主之顺子
题目描述:
在斗地主扑克牌游戏中, 扑克牌由小到大的顺序为: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张任意顺序的扑克牌,每张扑克牌数字用空格隔开,每张扑克牌的数字都是合法的,并且不包括大小王:
1 2 9 J 2 3 4 K A 7 9 A 5 6 不需要考虑输入为异常字符的情况
输出描述: 组成的顺子,每张扑克牌数字用空格隔开:
1 3 4 5 6 7 示例1:
输入
1 2 9 J 2 3 4 K A 7 9 A 5 6 输出
1 3 4 5 6 7 说明
13张牌中,可以组成的顺子只有1组:3 4 5 6 7
示例2:
输入
1 2 9 J 10 3 4 K A 7 Q A 5 6 输出
1 2 3 2 3 4 5 6 7 9 10 J Q K A 说明
13张牌中,可以组成2组顺子,从小到大分别为:3 4 5 6 7 和 9 10 J Q K A
示例3:
输入
1 2 9 9 9 3 4 K A 10 Q A 5 6 输出
1 No 说明
13张牌中,无法组成顺子
注意:
特殊输入
1 3 3 4 4 5 5 6 6 7 7 8 8 9
对应输出
1 2 3 2 3 4 5 6 7 8 3 4 5 6 7 8 9
let str = '2 9 J 10 3 4 K A 7 Q A 5 6'
let shunziArr = ['3','4','5','6','7','8','9','10','J','Q','K','A','2']
function test(){
let arr = str.split(' ')
let result = []
arr.sort(sortFn)
// 顺子没有2
arr = arr.filter(e=>e!=='2')
while (arr.length>=5){
shunzi(arr,result)
}
result.sort((a,b)=>{
if(a[0]===b[0]){
return a.length - b.length
}else {
return 0
}
})
if(result.length<1){
console.log(0);
}else {
console.log(result.length);
for(let i of result){
console.log(i.join(' '));
}
}
}
function shunzi(arr,result){
// console.log(arr);
//先去重
let newArr = [...new Set(arr)]
let res = []
for(let i=0;i<newArr.length;i++){
let right = 1
let index = shunziArr.findIndex(e=>e===newArr[i])
res.push(newArr[i])
let flag = true
while (right<newArr.length && flag){
if(newArr[i+right]===newArr[i+right+1]){
right++
continue
}
if(newArr[i+right]===shunziArr[index+right]){
res.push(newArr[i+right])
}else {
flag = false
}
right++
}
if(res.length>=5){
result.push(res)
break
}
}
for(let i of res){
let index = arr.findIndex(e=>e===i)
arr.splice(index,1)
}
}
function sortFn(a,b){
let aIndex,bIndex
for(let [idx,i] of shunziArr.entries()){
if(a===i){
aIndex = idx
}
if(b===i){
bIndex = idx
}
}
if(aIndex>bIndex){
return 1
}else if(aIndex===bIndex){
return 0
}else {
return -1
}
}
test()
某机试题,网上很少用js写的答案只有自己写了