أنماط المصفوفات ثنائية الأبعاد الشائعة
جزء من قسم Logic & Flow في رحلة JavaScript على Coddy — الدرس 13 من 65.
تظهر أنماط معينة غالباً عند التعامل مع المصفوفات ثنائية الأبعاد (2D arrays). يمكن أن يساعدك التعرف على هذه الأنماط في حل المشكلات بشكل أكثر كفاءة. إليك بعض الأنماط الشائعة:
التنقل القطري
الوصول إلى العناصر حيث يتساوى فهرس الصف مع فهرس العمود (matrix[i][i]) يعطيك القطر الرئيسي. بالنسبة للقطر العكسي، فإن مجموع فهرسي الصف والعمود يساوي حجم المصفوفة ناقص 1 (matrix[i][size - 1 - i]).
على سبيل المثال:
1 2 3
4 5 6
7 8 9التنقل عبر القطر الرئيسي (matrix[i][i]): 1, 5, 9
التنقل عبر القطر الثانوي (matrix[i][size - 1 - i]): 3, 5, 7
اجتياز الحدود
لاجتياز عناصر الحدود، تُبقي أحد الفهارس ثابتاً (0 أو size - 1) بينما تقوم بالتكرار عبر الآخر.
للوصول إلى الحدود العلوية، يمكنك التكرار عبر الأعمدة مع تثبيت فهرس الصف عند 0.
على سبيل المثال:
1 2 3 4
5 6 7 8
9 10 11 12عناصر الحدود: 1، 2، 3، 4، 8، 12، 11، 10، 9، 5 (الكل باستثناء 6 و 7)
التحدي
سهلأنشئ دالة باسم printPatterns تأخذ مصفوفة مربعة ثنائية الأبعاد من الأعداد الصحيحة (matrix) كمدخل وتطبع الأنماط التالية:
- القطر الرئيسي: اطبع جميع العناصر التي يتساوى فيها فهرس الصف مع فهرس العمود.
- القطر الثانوي: اطبع جميع العناصر التي يساوي فيها مجموع فهرسي الصف والعمود حجم المصفوفة ناقص 1.
- الحدود: اطبع عناصر الحدود العلوية، والسفلية، واليسرى، واليمنى للمصفوفة.
يجب أن يبدو المخرج كالتالي:
Main Diagonal: 1 6 11 16
Anti-Diagonal: 4 7 10 13
Top Border: 1 2 3 4
Bottom Border: 13 14 15 16
Left Border: 1 5 9 13
Right Border: 4 8 12 16ورقة مرجعية
أنماط التنقل الشائعة في المصفوفات ثنائية الأبعاد (2D array):
التنقل القطري (Diagonal Traversal)
القطر الرئيسي: matrix[i][i] (فهرس الصف يساوي فهرس العمود)
القطر الثانوي (Anti-diagonal): matrix[i][size - 1 - i] (مجموع فهرسي الصف والعمود يساوي size - 1)
1 2 3
4 5 6
7 8 9القطر الرئيسي: 1، 5، 9
القطر الثانوي: 3، 5، 7
التنقل عبر الحدود (Border Traversal)
اجعل أحد الفهارس ثابتاً (0 أو size - 1) أثناء التكرار عبر الآخر:
- الحد العلوي: فهرس الصف = 0، التكرار عبر الأعمدة
- الحد السفلي: فهرس الصف = size - 1، التكرار عبر الأعمدة
- الحد الأيسر: فهرس العمود = 0، التكرار عبر الصفوف
- الحد الأيمن: فهرس العمود = size - 1، التكرار عبر الصفوف
جرّب بنفسك
function printPatterns(matrix) {
let mainDiagonal = []
// TODO: تنفيذ المهمة
console.log("Main Diagonal:", mainDiagonal.join(" "));
let antiDiagonal = [];
// TODO: تنفيذ المهمة
console.log("Anti-Diagonal:", antiDiagonal.join(" "));
let topBorder = [];
// TODO: تنفيذ المهمة
console.log("Top Border:", topBorder.join(" "));
let bottomBorder = [];
// TODO: تنفيذ المهمة
console.log("Bottom Border:", bottomBorder.join(" "));
let leftBorder = [];
// TODO: تنفيذ المهمة
console.log("Left Border:", leftBorder.join(" "));
let rightBorder = [];
// TODO: تنفيذ المهمة
console.log("Right Border:", rightBorder.join(" "));
}
// لا تكتب أي شيء خارج الدالةيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1السلاسل النصية بعمق
أساسيات السلاسل النصيةالتكرار عبر السلاسل النصيةTemplate Literalsدوال السلاسل النصيةمراجعة - String Weaver2المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات5المجموعات - الجزء الأول
ما هي المجموعة؟التكرار عبر المجموعاتإضافة عنصرإزالة عنصرالتحقق من وجود عنصرالحجم وهل هي فارغةالنسخ والمسحملخص - أساسيات المجموعات8مواضيع شيقة حول الـ Arrays
تفكيك الـ Arrayاستخدام الـ Spread Syntax في الـ Arraysالـ Sparse Arraysمراجعة - ورشة عمل الـ Arrays3JSON الجزء الأول
ما هو JSON؟التحقق من وجود المفتاحObject MethodsSpread Operator الجزء الأولSpread Operator الجزء الثانيحذف المفاتيحمراجعة - معالجة مفاتيح JSON