ช่วงหลัก R1: [20, 40] ช่วงย่อย R2: [[14,22], [24,27], [31,35], [38,56]]
คำนวณความยาวส่วนที่ทับซ้อนของแต่ละช่วงใน R2 กับ R1 แล้วรวมกัน
ตัวอย่างโค้ด
const R1 = [20, 40];
const R2 = [[14,22], [24,27], [31,35], [38,56]];
const R3 = [120, 356];
const R4 = [[234, 567]];
function sumRanges(range, values) {
const [start, end] = range;
const res = values.reduce((acc, val) => {
const [left, right] = val;
const ex1 = Math.min(right, end);
const ex2 = Math.max(left, start);
const diff = ex1 - ex2;
return acc + Math.max(0, diff);
}, 0);
return res;
}
console.log(sumRanges(R1, R2)); // 11
console.log(sumRanges(R3, R4)); // 122ผลลัพธ์
11 122
คำอธิบาย: สำหรับแต่ละช่วง [left, right] ใน values: ช่วงทับซ้อนคือ [max(left, start), min(right, end)] ความยาว = min(right, end) - max(left, start) ถ้าติดลบ = 0 (ไม่ทับ) รวมทั้งหมดด้วย reduce