ভূমিকা
দুটি সংখ্যার মধ্যবর্তী সব পূর্ণসংখ্যার যোগফল বের করার একটি গাণিতিক সমস্যা। অ্যারে `[a, b]` দেওয়া থাকলে, `a` এবং `b`-র মধ্যবর্তী সব সংখ্যা (a এবং b সহ) যোগফল বের করতে হবে।
সম্পূর্ণ কোড
const arr = [10, 60];
const sumUpto = (n) => (n * (n + 1)) / 2;
const sumBetween = (array) => {
if (array.length !== 2) return -1;
const [a, b] = array;
return sumUpto(Math.max(a, b)) - sumUpto(Math.min(a, b)) + Math.min(a, b);
};
console.log(sumBetween(arr)); // 1785
console.log(sumBetween([4, 9])); // 39
গাণিতিক সূত্র
১ থেকে n পর্যন্ত যোগফল: n(n+1)/2 (গাউস সূত্র)
a থেকে b পর্যন্ত যোগফল (a ≤ b): sumUpto(b) - sumUpto(a-1)
সরলীকৃত: sumUpto(max) - sumUpto(min) + min
উদাহরণ যাচাই
[4, 7] = 4+5+6+7 = 22
sumUpto(7) - sumUpto(4) + 4 = 28 - 10 + 4 = 22 ✓
[10, 6] = 10+9+8+7+6 = 40
sumUpto(10) - sumUpto(6) + 6 = 55 - 21 + 6 = 40 ✓
আউটপুট
1785
39
বিকল্প পদ্ধতিগুলো
১. লুপ (সহজ কিন্তু ধীর - O(n))
const sumBetweenLoop = ([a, b]) => {
const min = Math.min(a, b);
const max = Math.max(a, b);
let sum = 0;
for (let i = min; i <= max; i++) sum += i;
return sum;
};
২. Arithmetic Series Formula (O(1) - সেরা)
const sumBetweenFormula = ([a, b]) => {
const min = Math.min(a, b);
const max = Math.max(a, b);
const count = max - min + 1;
return (count * (min + max)) / 2;
};
এটি সবচেয়ে দ্রুত এবং মেমরি দক্ষ। কোনো লুপ বা রিকারশন নেই।
৩. ES6 রেঞ্জ 헬্পার (যদি উপলব্ধ থাকে)
// প্রস্তাবিত ES ফিচার (এখনও স্ট্যান্ডার্ড নয়)
const sumBetween = ([a, b]) =>
[...Array(Math.max(a,b) - Math.min(a,b) + 1)]
.map((_, i) => Math.min(a,b) + i)
.reduce((a, b) => a + b, 0);
এজ কেস হ্যান্ডলিং
const sumBetweenRobust = (array) => {
if (!Array.isArray(array) || array.length !== 2) return NaN;
const [a, b] = array.map(Number);
if (isNaN(a) || isNaN(b)) return NaN;
const min = Math.min(a, b);
const max = Math.max(a, b);
const count = max - min + 1;
return (count * (min + max)) / 2;
};
বড় সংখ্যার জন্য BigInt (ES2020)
const sumBetweenBigInt = ([a, b]) => {
const min = BigInt(Math.min(a, b));
const max = BigInt(Math.max(a, b));
const count = max - min + 1n;
return (count * (min + max)) / 2n;
};
সারাংশ
গাণিতিক সূত্র (count * (min + max)) / 2 সবচেয়ে দক্ষ (O(1))। লুপ-ভিত্তিক পদ্ধতি বড় রেঞ্জের জন্য ধীর। সবসময় ইনপুট ভ্যালিডেশন যোগ করুন।