freeCodeCamp/guide/arabic/certifications/coding-interview-prep/algorithms/find-the-symmetric-difference/index.md

11 KiB

title localeTitle
Find the Symmetric Difference العثور على الفرق متماثل

:triangular_flag_on_post: تذكر استخدام Read-Search-Ask إذا واجهتك مشكلة. حاول إقران البرنامج :busts_in_silhouette: واكتب الكود الخاص بك :pencil:

:checkered_flag: شرح المشكلة:

الاختلاف المتماثل (المشار إليه عادة بـ Δ) من مجموعتين هو مجموعة العناصر الموجودة في أي من المجموعتين ، ولكن ليس في كليهما.

على سبيل المثال ، يجب أن ينتج sym([1, 2, 3], [5, 2, 1, 4]) [3, 4, 5] .

بعد التعريف المذكور أعلاه ، يمكن التعبير عن الفرق المتماثل من ثلاث مجموعات A و B و C كـ (A Δ B) Δ C .

روابط ذات صلة

[## :speech_balloon: تلميح: 1

كائن الوسائط هو كائن Array -like الذي يرث الخاصية Array.length فقط. تنظر بالتالي تحويلها إلى صفيف الفعلي.

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 2

Deem كتابة دالة مساعد تقوم بإرجاع الفرق المتماثل من صفيفين في كل مكالمة بدلاً من محاولة الاختلاف بين كل المجموعات في وقت واحد.

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 3

قم بتطبيق وظيفة المساعد على صفيف الوسيطات الذي تم إنشاؤه ، مما يقلل عناصره بشكل متكرر بشكل متكرر لتشكيل الناتج المتوقع.

ملحوظة في حالة وجود عدد فردي من المجموعات ، سيشمل الفرق المتماثل عناصر متطابقة موجودة في جميع المجموعات المحددة. على سبيل المثال؛

`A = {1, 2, 3} B = {2, 3, 4} C = {3, 4, 5}

(A ⋂ B) ⋂ C = {1, 4} &Intersection {3, 4, 5} A ⋂ B = {1, 3, 5} `

حاول أن تحل المشكلة الآن

تنبيه المفسد!

:warning:

الحل قبل

:beginner: الحل الأساسي للكود:

` function sym() { var args = []; for (var i = 0; i < arguments.length; i++) { args.push(arguments[i]); }

  function symDiff(arrayOne, arrayTwo) { 
    var result = []; 

    arrayOne.forEach(function(item) { 
      if (arrayTwo.indexOf(item) < 0 && result.indexOf(item) < 0) { 
        result.push(item); 
      } 
    }); 

    arrayTwo.forEach(function(item) { 
      if (arrayOne.indexOf(item) < 0 && result.indexOf(item) < 0) { 
        result.push(item); 
      } 
    }); 

    return result; 
  } 

  // Apply reduce method to args array, using the symDiff function 
  return args.reduce(symDiff); 
} 

`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)

:rocket: تشغيل الكود

شرح الشفرة:

  • يتم استخدام push() لكسر كائن الحجج إلى صفيف ، args .
  • symDiff الدالة symDiff على الفرق المتماثل بين مجموعتين. يتم استخدامه كدالة رد اتصال من أجل طريقة reduce() تسمى على arg .
  • arrayOne.forEach() العناصر التي ينتج عنها والتي توجد فقط في arrayOne بالإضافة إلى أنها ليست جزءًا من النتيجة .
  • arrayTwo.forEach() العناصر التي ينتج عنها والتي توجد فقط في arrayTwo بالإضافة إلى أنها ليست جزءًا من النتيجة .
  • يتم إرجاع النتيجة ، وهو الفرق المتناظر. يعمل هذا الحل لأي عدد من المجموعات.

روابط ذات صلة

:sunflower: حل الشفرة المتوسطة:

` function sym() {

  // Convert the argument object into a proper array 
  var args = Array.prototype.slice.call(arguments); 

  // Return the symmetric difference of 2 arrays 
  var getDiff = function(arr1, arr2) { 

    // Returns items in arr1 that don't exist in arr2 
    function filterFunction(arr1, arr2) { 
      return arr1.filter(function(item) { 
        return arr2.indexOf(item) === -1; 
      }); 
    } 

    // Run filter function on each array against the other 
    return filterFunction(arr1, arr2) 
      .concat(filterFunction(arr2, arr1)); 
  }; 

  // Reduce all arguments getting the difference of them 
  var summary = args.reduce(getDiff, []); 

  // Run filter function to get the unique values 
  var unique = summary.filter(function(elem, index, self) { 
    return index === self.indexOf(elem); 
    }); 
  return unique; 
} 

// test here 
sym([1, 2, 3], [5, 2, 1, 4]); 

`

:rocket: تشغيل الكود

شرح الشفرة:

  • يتم استخدام أسلوب slice() لكسر كائن الوسائط إلى صفيف ، args .
  • getDiff الدالة getDiff على الفرق المتماثل بين مجموعتين ، arr1 و arr2 . يتم استخدامه كدالة رد اتصال من أجل طريقة reduce() تسمى على arg .
  • إرجاع filterFunction() الأول العناصر في arr1 غير موجودة في arr2 .
  • يتم تشغيل filterFunction() التالي filterFunction() على كل مصفوفة مقابل الآخر للتحقق من معكوس الشيك الأول للتفرد وسَلسَقه.
  • ملخص يتكون من الحجج المخفضة.
  • يتم استخدام filter() في الملخص للاحتفاظ بالقيم الفريدة فقط ويتم إرجاع الفريدة .

روابط ذات صلة

:rotating_light: الحل المتقدم للكود:

` function sym() { let argv = Array.from(arguments).reduce(diffArray); return argv.filter((element, index, array) => index === array.indexOf(element));//remove duplicates }

function diffArray(arr1, arr2) { 
  return arr1 
    .filter(element => !arr2.includes(element)) 
    .concat(arr2.filter(element => !arr1.includes(element))); 
} 

// test here 
sym([1, 2, 3], [5, 2, 1, 4]); 

`

:rocket: تشغيل الكود

شرح الشفرة:

  • تقوم الدالة الرئيسية sym () بإنشاء مصفوفة من الوسيطات وتقليل عناصرها باستخدام الدالة المساعد diffArray () إلى صفيف واحد.

  • ترجع الدالة diffArray () الاختلاف المتماثل بين صفيفين عن طريق انتقاء عناصر فريدة في صفائف معلمات ؛ arr1 و arr2 .

روابط ذات صلة

:clipboard: ملاحظات للمساهمات:

  • :warning: لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
  • أضف شرحًا لحلك.
  • تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم . :traffic_light:
  • الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة . ( :warning: لا تزيل أي أسماء مستخدمين حالية )

نرى :point_right: Wiki Challenge Solution Template كمرجع.