কোনো পজিটিভ ইন্টিজারের ডিজিট রুট বলতে এর সকল ডিজিটের যোগফলকে বুঝায়। আমাদের একটি ইন্টিজারের অ্যারে দেওয়া আছে। আমাদের এটি এমনভাবে সর্ট করতে হবে যেন a, b এর আগে আসে যদি a-এর ডিজিট রুট b-এর ডিজিট রুট থেকে কম বা সমান হয়। যদি দুটি নাম্বারের ডিজিট রুট একই হয়, তবে সাধারণ অর্থে যেটি ছোট হবে সেটি আগে আসবে। উদাহরণস্বরূপ, ৪ এবং ১৩ এর ডিজিট রুট একই, কিন্তু ৪ < ১৩ সেজন্য ডিজিট রুট সর্টিং-এ ৪, ১৩-এর আগে আসবে।
উদাহরণস্বরূপ,
a = [13, 20, 7, 4] এর জন্য আউটপুট হবে [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 ]