Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การจัดเรียงการ์ดใหม่เป็นกลุ่มใน JavaScript


ปัญหา

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

ตัวเลขในอาร์เรย์อยู่ในช่วง [1, 13] รวมขีดจำกัด ซึ่งแสดงถึงดัชนีการเล่นไพ่แบบอิง 1

หน้าที่ของเราควรกำหนดว่ามีวิธีจัดเรียงไพ่ใหม่เป็นกลุ่มหรือไม่ เพื่อให้แต่ละกลุ่มมีขนาด 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