বিউটিফুল অ্যারেঞ্জমেন্ট:
মনে করুন ১ থেকে num পর্যন্ত প্রাকৃতিক সংখ্যা আছে। একটি বিউটিফুল অ্যারেঞ্জমেন্ট হলো এমন একটি অ্যারে যা এই সংখ্যাগুলো দিয়ে তৈরি হয়েছে এবং যেটিতে i-তম পজিশন (১ ≤ i ≤ N) এর জন্য নিচের শর্তগুলোর যেকোনো একটি সত্য হয়:
i-তম পজিশনের সংখ্যা i দিয়ে বিভাজ্য।
i, i-তম পজিশনের সংখ্যা দিয়ে বিভাজ্য।
সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা একটি সংখ্যা num নেবে এবং num-এর জন্য কতগুলো বিউটিফুল অ্যারেঞ্জমেন্ট তৈরি করা যায় সেটি রিটার্ন করবে।
উদাহরণ:
ইনপুট হলে:
const input = 2
আউটপুট হবে:
const output = 2
আউটপুট ব্যাখ্যা
প্রথম অ্যারেঞ্জমেন্ট: [1,2]
দ্বিতীয় অ্যারেঞ্জমেন্ট: [2,1]
উদাহরণ
কোডটি নিচের মতো (ব্যাকট্র্যাকিং + বিটমাস্ক):
const num = 4; const countArrangements = (num = 1) => { let ans = 0 const recur = (curr, vis) => { if (curr === 1){ ans++; }else{ for (let i = num; i; i--) { let possible = (i % curr === 0 || curr % i === 0); let visited = vis & 1 << i; if (possible && !visited){ recur(curr-1, vis | 1 << i); } } } }; recur(num, 0); return ans; }; console.log(countArrangements(num)); কোড ব্যাখ্যা:
আমরা একটি রেজাল্ট ভেরিয়েবল (ans) এবং একটি রিকার্সিভ ফাংশন ডিফাইন করেছি যা সমস্ত সম্ভাবনা নেভিগেট করে। এই ফাংশনের দুটি আর্গুমেন্ট লাগে: বর্তমানে কোন নম্বর প্লেস করা হচ্ছে (curr) এবং কোন স্পটগুলো ইতিমধ্যে ভিজিট করা হয়েছে (vis)।
আউটপুট
কনসোলে আউটপুট (num=4 এর জন্য):
8