অ্যাডিটিভ নাম্বার
অ্যাডিটিভ নাম্বার হলো একটি সংখ্যা স্ট্রিং যেটির ডিজিটগুলো অ্যাডিটিভ সিকোয়েন্স তৈরি করতে পারে।
একটি বৈধ অ্যাডিটিভ সিকোয়েন্স-এ কমপক্ষে তিনটি সংখ্যা থাকতে হবে। প্রথম দুটি সংখ্যা ছাড়া, সিকোয়েন্স-র প্রতিটি পরবর্তী সংখ্যা অবশ্যই আগের দুটি সংখ্যার যোগফল হবে। শুধু ডিজিট '0'-'9' ধারণকারী একটি স্ট্রিং দেওয়া থাকলে, সেটি অ্যাডিটিভ নাম্বার কিনা তা নির্ধারণ করার ফাংশন লিখুন।
নোট − অ্যাডিটিভ সিকোয়েন্স-র সংখ্যাগুলোর লিডিং জিরো থাকতে পারবে না, তাই 1, 2, 03 বা 1, 02, 3 সিকোয়েন্সগুলো অবৈধ।
উদাহরণস্বরূপ −
স্ট্রিং "199100199" একটি অ্যাডিটিভ নাম্বার কারণ, অ্যাডিটিভ সিকোয়েন্স হলো − 1, 99, 100, 199 −
1 + 99 = 100, 99 + 100 = 199
উদাহরণ
এটির কোড হবে −
const str = "199100199";
const isAdditiveNumber = (numStr) => {
if(numStr.length < 3) return false;
let str = "";
let seen = true;
for(let i = numStr.length - 1; i > 1; i--){
str = `${numStr[i]}${str}`;
if(numStr[i] === "0") continue;
let s = str;
let s2 = numStr[i - 1]
for(let j = i - 2; j >= 0; j--){
if(`${s2}`.startsWith("0") && s2.length > 1){
s2 = `${numStr[j]}${s2}` seen = false;
} else if(parseInt(s) >= parseInt(s2)){
let diff = s - s2;
if(numStr.slice(0, j + 1).endsWith(diff)){
s = s2;
s2 = diff;
let ind = Math.floor(Math.log10(diff));
ind = ind < 0 ? 0 : ind
j -= ind;
seen = true;
}else {
s2 = `${numStr[j]}${s2}`
seen = false;
}
}else{
seen = false;
break;
}
}
if(seen) return seen;
};
return seen;
};
console.log(isAdditiveNumber(str));
আউটপুট
কনসোলে আউটপুট হবে −
true