কিছু ধনাত্মক পূর্ণসংখ্যার অঙ্কের মূলকে তার সমস্ত অঙ্কের যোগফল হিসাবে সংজ্ঞায়িত করা হয়। আমাদের পূর্ণসংখ্যার একটি বিন্যাস দেওয়া হয়েছে। আমাদের এটিকে এমনভাবে সাজাতে হবে যাতে b এর আগে a আসে যদি a এর অঙ্কের মূলটি b এর অঙ্কের মূলের চেয়ে কম বা সমান হয়। দুটি সংখ্যার একই অঙ্কের মূল থাকলে, ছোটটি (নিয়মিত অর্থে) প্রথমে আসা উচিত। উদাহরণস্বরূপ, 4 এবং 13 এর একই ডিজিট রুট আছে, তবে 4 <13 এইভাবে যেকোন ডিজিটরুট সাজানোর ক্ষেত্রে 13 এর আগে 4 আসে যেখানে উভয়ই উপস্থিত থাকে।
উদাহরণের জন্য,
for a = [13, 20, 7, 4], the output should be [20, 4, 13, 7].
আসুন এই সমস্যার জন্য কোড লিখি -
আমরা এটিকে দুটি ফাংশনে ভাগ করব, একটি পুনরাবৃত্ত ফাংশন যা একটি সংখ্যার অঙ্কের যোগফল গণনা করে এবং তারপর একটি বাছাই ফাংশন যা সংখ্যার যোগফলের ভিত্তিতে উপাদানটিকে অর্ডার করে৷
এর জন্য কোড হবে −
উদাহরণ
const arr = [54, 23, 8, 89, 26];
const recursiveCount = (num, count = 0) => {
if(num){
return recursiveCount(Math.floor(num/10), count+num%10);
};
return count;
};
const sorter = (a, b) => {
const countDifference = recursiveCount(a) - recursiveCount(b);
return countDifference || a - b;
};
arr.sort(sorter);
console.log(arr); আউটপুট
কনসোলে আউটপুট হবে −
[ 23, 8, 26, 54, 89 ]