Codewars – Descending Order – انجمن DEV

سلام.
من چالش های Codewars و روند فکرم را در این مجموعه پست می کنم. من در صورت امکان از JS و Node 18 استفاده می کنم. فقط برای شفافیت، من از آنها استفاده منصفانه می کنم.
به چالش بعدی از Codewars. در این یکی، ما وظیفه داریم تابعی را توسعه دهیم که هر عدد صحیح را به عنوان ورودی بگیرد. باید ارقام را از بالاترین به کمترین مرتب کنیم.
من با این فکر شروع می کنم:
“بسیار خوب، من باید به نحوی ارقام را تقسیم کنم. شاید باید ابتدا عدد صحیح را به رشته تبدیل کنم. سپس رقم ها را تقسیم کنم. سپس ترتیب دهید، سپس همه را به هم متصل کنید، سپس به عدد صحیح برگردید.”
و بنابراین، با یک الگو شروع می شود:
function descendingOrder(n){
// stringify
number = n.toString();
// split digits
array = new Array(number.length);
// code that fills array with digits {}
//sort
array.sort()
// concatenate digits
reverse = array.join('');
// back to integer
n = Number.parseInt(reverse);
return n;
}
نامه های بسیار، چنین خسته کننده. و هنوز هم کاربردی نیست. بنابراین، چه چیز دیگری نیاز داریم؟ خوب، یک حلقه که ارقام را برای شروع در آرایه قرار می دهد:
// split digits
array = new Array(number.length);
for(i=0 ; i<number.length ; i++){
array[i] = number.at(i);
}
که باید آن را انجام دهد. درسته؟
نه یک جزئیات کوچک شیطان در جزئیات است. و همینطور اشکالات. تابع مرتب سازی به صورت پیش فرض به صورت صعودی مرتب می شود. ما باید “قطبیت را برگردانیم”. در اصل ما به این نیاز داریم. رفتار پیش فرض به این صورت است:
(a, b) => a - b
و ما نیاز داریم:
(a, b) => b - a
همه مواد ترکیبی:
function descendingOrder(n){
number = n.toString();
array = new Array(number.length);
for(i=0;i<number.length;i++){
array[i] = number.at(i);
}
array.sort((a,b)=>b-a)
reverse = array.join('');
n = Number.parseInt(reverse);
return n;
}
نه بهترین و نه ساده ترین راه حل. اما این کار را انجام می دهد.
سیا آب بنوشید 💧💧💧 .
قبلی