ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์จำนวนเต็มบวกที่ไม่ซ้ำกัน ฟังก์ชันควรคืนค่าจำนวนเต็ม 32-bit ที่ในรูปแบบทวินิยมมีบิต 1 เฉพาะที่ดัชนี (นับจากขวา) ที่ระบุในอาร์เรย์
ตัวอย่าง
โค้ดตัวอย่างด้านล่าง:
const arr = [1, 2, 0, 4];
const buildDecimal = (arr = []) => {
const bitArr = Array(31).fill(0);
let res = 0;
arr.forEach(el => {
bitArr.splice((31 - el), 1, 1);
});
bitArr.forEach((bit, index) => {
res += (2 * (31 - index) * bit);
});
return res;
};
console.log(buildDecimal(arr));
ผลลัพธ์
14
คำอธิบายเพิ่มเติม
ดัชนี [1,2,0,4] หมายถึงบิตที่ 0,1,2,4 ตั้งค่าเป็น 1: binary 1110 = 14 (8+4+2) โค้ดตัวอย่างซับซ้อนเกินไป สามารถทำได้ง่ายด้วย `arr.reduce((sum, bit) => sum | (1 << bit), 0)`