Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การจัดกลุ่มไพ่เป็นชุดใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์แรก และตัวเลข num เป็นอาร์กิวเมนต์ที่สอง

ตัวเลขในอาร์เรย์อยู่ในช่วง [1, 13] รวมขีดจำกัด แทนดัชนี 1-based ของไพ่เล่น

ฟังก์ชันควรตัดสินใจว่ามีวิธีจัดเรียงไพ่เป็นกลุ่มได้หรือไม่ โดยที่แต่ละกลุ่มมีขนาด num และประกอบด้วย num ใบไพ่ที่เรียงติดกัน

ตัวอย่างเช่น หากอินพุตคือ

อินพุต

const arr = [1, 4, 3, 2];
const num = 2;

เอาต์พุต

const output = 2;

คำอธิบายเอาต์พุต

เพราะไพ่สามารถจัดเรียงใหม่เป็น [1, 2], [3, 4]

ตัวอย่างโค้ด

const arr = [1, 4, 3, 2];
const num = 2;
const canRearrange = (arr = [], num = 1) => {
const find = (map, n, num) => {
let j = 0;
while (j < num) {
if (!map[n + j]) return false;
else map[n + j] -= 1;
j++;
}
return true;
};
let map = {};
arr.sort(function(a, b) { return a - b; });
for (let n of arr) {
map[n] = map[n] ? map[n] + 1 : 1;
}
for (let n of arr) {
if (map[n] === 0 || find(map, n, num)) continue;
else return false;
}
return true;
};
console.log(canRearrange(arr, num));

ผลลัพธ์

true