برنامه نویسی

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 عنصر زوج =>
    0من2(xمنمترoد2)=0\sum_{\substack{0\leq i\leq 2}} (x_{i}\mod 2) = 0
  • 1 عنصر فرد =>
    0من2(xمنمترoد2)=1\sum_{\substack{0\leq i\leq 2}} (x_{i}\mod 2 ) = 1
  • 2 عنصر عجیب و غریب =>
    0من2(xمنمترoد2)=2\sum_{\substack{0\leq i\leq 2}} (x_{i}\mod 2 ) = 2
  • 3 عنصر عجیب و غریب =>
    0من2(xمنمترoد2)=3\sum_{\substack{0\leq i\leq 2}} ( x_{i}\mod 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;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

عملکرد مناسب، هرچند چندان خواندنی نیست. فضای زیادی برای پیشرفت دارد.

مراقب باشید. آب بنوشید 💧💧💧 .

قبلی

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا