// 分组
function groupBy(array, key) {
return array.reduce((result, currentItem) => {
// 使用 key 函数获取分组的键
const groupKey = key(currentItem);
// 确保 result 对象中有对应键的数组
if (!result[groupKey]) {
result[groupKey] = [];
}
// 将当前项添加到对应分组的数组中
result[groupKey].push(currentItem);
return result;
}, {});
}
//多维数组平铺
function flattenArray(arr) {
const result = [];
arr.forEach(item => {
if (Array.isArray(item)) {
result.push(...flattenArray(item)); // 递归处理子数组
} else {
result.push(item);
}
});
return result;
}
// 单张
function singleSheet(val) {
return val.length == 1
}
// 对子
function pairs(val) {
if (val.length == 2) {
if (val[0] == val[1]) {
return true
} else {
return false
}
} else {
return false
}
}
// 三张
function triple(val) {
if (val.length == 3) {
if (val[0] == val[1] && val[1] == val[2]) {
return true
} else {
return false
}
} else {
return false
}
}
//四张&炸
function triple(val) {
if (val.length == 4) {
if (val[0] == val[1] && val[1] == val[2] && val[2] == val[3]) {
return true
} else {
return false
}
} else {
return false
}
}
//三带一
function threeBeltsAndOne(val) {
if (val.length == 4) {
const uniqueArray = [...new Set(val)];
if (uniqueArray.length == 2) {
let num1 = val.filter((item) => { return item == uniqueArray[0] }).length
let num2 = val.filter((item) => { return item == uniqueArray[1] }).length
if ((num1 == 1 && num2 == 3) || (num1 == 3 && num2 == 1)) {
return true
} else {
return false
}
} else {
return false
}
} else {
return false
}
}
//三带二
function threeBeltsAndTwo(val) {
if (val.length == 5) {
const uniqueArray = [...new Set(val)];
if (uniqueArray.length == 2) {
let num1 = val.filter((item) => { return item == uniqueArray[0] }).length
let num2 = val.filter((item) => { return item == uniqueArray[1] }).length
if ((num1 == 2 && num2 == 3) || (num1 == 3 && num2 == 2)) {
return true
} else {
return false
}
} else {
return false
}
} else {
return false
}
}
// 四代二
function fourBeltsAndTwo(val) {
if (val.length == 6) {
const uniqueArray = [...new Set(val)];
for (var i = 0; i < uniqueArray.length; i++) {
if (val.filter((item) => { return item == uniqueArray[i] }).length == 4) {
return true
}
}
return false
} else {
return false
}
}
//顺子
function straight(val) {
if (val.length > 5) {
return false;
}
for (let i = 0; i < val.length; i++) {
if (val[i + 1]) {
if (val[i] + 1 != val[i + 1]) {
return false;
}
}
}
return true;
}
//连对
function lianPai(val) {
var arr = val.sort()
if (arr.length < 6 || arr.length % 2 == 1) {
return false
}
const uniqueArr = Array.from(new Set(arr))
if (!straight(uniqueArr)) {
return false
}
for (let i = 0; i < arr.length; i += 2) {
if (arr[i] !== arr[i + 1]) {
return false
}
}
return true
}
// 飞机不带
function aircraftnotequipped(val) {
var arr = val.sort()
if (arr.length < 6 || arr.length % 3 == 1) {
return false
}
const uniqueArr = Array.from(new Set(arr))
if (!straight(uniqueArr)) {
return false
}
for (let i = 0; i < arr.length; i += 3) {
if (arr[i] !== arr[i + 1]) {
return false
}
}
return true
}
// 飞机带一
function aircraftbeltone(val) {
const groupedItems = groupBy(val, item => item);
let three = []
for (var i in groupedItems) {
if (groupedItems[i].length == 3) {
three.push(groupedItems[i])
}
}
let flatthree = flattenArray(three)
if (aircraftnotequipped(flatthree)) {
let one = []
for (var i in groupedItems) {
if (groupedItems[i].length != 3) {
one.push(groupedItems[i])
}
}
if (flattenArray(one).length == three.length) {
return true
} else {
return false
}
} else {
return false
}
}
//飞机带对
function aircraftbelttwo(val) {
const groupedItems = groupBy(val, item => item);
let three = []
for (var i in groupedItems) {
if (groupedItems[i].length == 3) {
three.push(groupedItems[i])
}
}
let flatthree = flattenArray(three)
if (aircraftnotequipped(flatthree)) {
let two = []
for (var i in groupedItems) {
if (groupedItems[i].length != 3) {
two.push(groupedItems[i])
}
}
if (two.length == three.length) {
for (var i = 0; i < two.length; i++) {
if (two[i].length == 2) {
if (two[i][0] != two[i][1]) {
return false
}
} else {
return false
}
}
return true
} else {
return false
}
} else {
return false
}
}
斗地主 牌型规则
于 2024-04-08 18:40:20 首次发布