সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা (ax+b)^n রূপের একটি এক্সপ্রেশন নেবে, যেখানে a এবং b পূর্ণসংখ্যা (ধনাত্মক বা ঋণাত্মক), x যেকোনো একক ক্যারেক্টার ভেরিয়েবল, এবং n একটি প্রাকৃতিক সংখ্যা। যদি a = 1 হয়, তবে ভেরিয়েবলের সামনে কোনো কোইফিশিয়েন্ট থাকবে না। ফাংশনটি বিস্তারিত রূপ একটি স্ট্রিং হিসেবে ফেরত দেবে রূপে ax^b+cx^d+ex^f... যেখানে a, c, e হলো টার্মের কোইফিশিয়েন্ট, x হলো মূল ভেরিয়েবল, এবং b, d, f হলো ঘাত যেগুলো ক্রমহ্রাসমান ক্রমে থাকবে।
উদাহরণ
নিচে কোডটি দেওয়া হলো:
const str = '(8a+6)^4';
const trim = value => value === 1 ? '' : value === -1 ? '-' : value
const factorial = (value, total = 1) => value <= 1 ? total : factorial(value - 1, total * value)
const find = (str = '') => {
let [op1, coefficient, variable, op2, constant, power] = str
.match(/(\W)(\d*)(\w)(\W)(\d+)..(\d+)/)
.slice(1)
power = +power
if (!power) {
return '1'
}
if (power === 1) {
return str.match(/\((.*)\)/)[1]
}
coefficient =
op1 === '-'
? coefficient
? -coefficient
: -1
: coefficient
? +coefficient
: 1
constant = op2 === '-' ? -constant : +constant
const factorials = Array.from({ length: power + 1 }, (_,i) => factorial(i))
let result = ''
for (let i = 0, p = power; i <= power; ++i, p = power - i) {
let judge =
factorials[power] / (factorials[i] * factorials[p]) *
(coefficient * p * constant * i)
if (!judge) {
continue
}
result += p
? trim(judge) + variable + (p === 1 ? '' : `^${p}`)
: judge
result += '+'
}
return result.replace(/\+\-/g, '-').replace(/\+$/, '')
};
console.log(find(str));আউটপুট
576a^3+1152a^2+576a