เราต้องเขียนฟังก์ชัน JavaScript ที่รับตัวเลขเป็นอินพุทแรก และตัวเลขสูงสุดเป็นอินพุทที่สอง
ฟังก์ชันควรสร้างตัวเลขสุ่ม 4 ตัว ซึ่งเมื่อรวมกันควรเท่ากับตัวเลขที่ให้มาอินพุทแรก และไม่มีตัวเลขใดใน 4 ตัวนั้นเกินตัวเลขที่ให้มาอินพุทที่สอง
ตัวอย่างเช่น ถ้าอาร์กิวเมนต์ของฟังก์ชันคือ
const n = 10; const max = 4;
แล้ว
const output = [3, 2, 3, 2];
เป็นการจัดเรียงที่ถูกต้อง
สังเกตว่าการซ้ำของตัวเลขได้รับอนุญาต
ตัวอย่างโค้ด
โค้ดสำหรับการทำงานนี้จะเป็นดังนี้
const total = 10; const max = 4;
const fillWithRandom = (max, total, len = 4) => {
let arr = new Array(len);
let sum = 0;
do {
for (let i = 0; i < len; i++) {
arr[i] = Math.random();
}
sum = arr.reduce((acc, val) => acc + val, 0);
const scale = (total - len) / sum;
arr = arr.map(val => Math.min(max, Math.round(val * scale) + 1));
sum = arr.reduce((acc, val) => acc + val, 0);
} while (sum - total);
return arr;
};
console.log(fillWithRandom(max, total));ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้
[ 3, 3, 2, 2 ]
ผลลัพธ์คาดว่าจะต่างกันในแต่ละครั้งที่รัน