Codewars – پرت برابری را پیدا کنید

سلام.
من چالش های Codewars و روند فکرم را در این مجموعه پست می کنم. من در صورت امکان از JS و Node 18 استفاده می کنم. فقط برای شفافیت، من از آنها استفاده منصفانه می کنم.
مشکل می گوید که باید یکی از اینها را پیدا کنیم: عدد فرد در یک آرایه پر از اعداد زوج یا عدد زوج در یک آرایه پر از اعداد فرد. یعنی گفته شود:
[ 0, 2, 4, 6, 8, 97, 14, 14, -2 ] -> 97
[ 1, 3, 2, -3, -7, 227, -183 ] -> 2
ابتدا، با نگاه کردن به 3 عنصر اول آرایه، بررسی خواهم کرد که چه نوع پرت است:
- 3 عنصر زوج =>
- 1 عنصر فرد =>
- 2 عنصر عجیب و غریب =>
- 3 عنصر عجیب و غریب =>
تنها کاری که باید بعد از آن انجام دهیم این است که آرایه را طی کنیم تا زمانی که به عددی که مدول-2 متفاوت است ضربه بزنیم. دو تغییر از الگوریتم مذکور بر این اساس اعمال می شود:
// odd number in even array
while (number % 2 == 0 && counter < integers.length){
number = integers[counter];
counter++;
}
// even number in odd array
while (number % 2 == 1 && counter < integers.length){
number = integers[counter];
counter++;
}
با مونتاژ قطعات با هم به این نتیجه می رسیم:
function findOutlier(integers){
let counter = 0;
let number = 0;
let a = integers[0] % 2;
let b = integers[1] % 2;
let c = integers[2] % 2;
if (a + b + c <= 1){
number = integers[0];
while (number % 2 == 0 && counter < integers.length){
number = integers[counter];
counter++;
}
}
else {
number = integers[0];
while (number % 2 == 1 && counter < integers.length){
number = integers[counter];
counter++;
}
}
return number;
}
و این دقیقاً همان چیزی است که من وقتی تست ها را قبول نکردم:
دوم اینکه باید در گوگل سرچ می کردم که چه اتفاقی افتاده است. معلوم شد که فکر نمیکردم اعداد منفی ظاهر شوند. و بنابراین مجبور شدم بخوانم که چگونه JS با مدول های منفی برخورد می کند
برای مرحله سوم از Math.abs():
function findOutlier(integers){
let counter = 0;
let number = 0;
let a = Math.abs(integers[0] % 2);
let b = Math.abs(integers[1] % 2);
let c = Math.abs(integers[2] % 2);
if (a + b + c <= 1){
number = integers[0];
while (Math.abs(number) % 2 == 0 && counter < integers.length){
number = integers[counter];
counter++;
}
}
else {
number = integers[0];
while (Math.abs(number) % 2 == 1 && counter < integers.length){
number = integers[counter];
counter++;
}
}
return number;
}
عملکرد مناسب، هرچند چندان خواندنی نیست. فضای زیادی برای پیشرفت دارد.
مراقب باشید. آب بنوشید 💧💧💧 .
قبلی