किसी पॉजिटिव इंटीजर का डिजिट रूट उसके सभी अंकों के योग के रूप में परिभाषित किया जाता है। हमें इंटीजर का एक एरे दिया गया है। हमें इसे इस तरह सॉर्ट करना है कि यदि a, b से पहले आता है यदि a का डिजिट रूट b के डिजिट रूट से कम या बराबर है। यदि दो संख्याओं का डिजिट रूट समान है, तो छोटी संख्या (सामान्य अर्थ में) पहले आनी चाहिए। उदाहरण के लिए, 4 और 13 का डिजिट रूट समान है, हालांकि 4 < 13 इसलिए 4 किसी भी डिजिट रूट सॉर्टिंग में 13 से पहले आएगा जहां दोनों मौजूद हैं।
उदाहरण के लिए,
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 ]