اليوم في الصباح ، كان هناك منشور مثير للاهتمام للغاية حول الرمز الذي يجب كتابته في المقابلة وما المهارات التي يجب إظهارها. وكانت مهمة الاختبار هذا.
اكتب وظيفة على TypeScript تعرض لمجموعة نصية من النطاقات لمجموعة صفية من الأرقام:
getRanges([0, 1, 2, 3, 4, 7, 8, 10]);
لسوء الحظ ، لم يعد هذا المنشور متاحًا ، ولن أستعيد الحل المقدم الآن. لكن هذا القرار كان جميلًا جدًا ، تمامًا كما كان سيئًا للغاية بالنسبة
للمبرمج العادي الذي تعرض للتعذيب قليلاً من قبل الإدارة بحلول نهاية الموعد النهائي. كان نص برل على غرار سطر واحد تقريبا.
والسؤال هو ، كيف لتقييم هذا الرمز؟ من ناحية ، يوضح المستوى الفني العالي للمرشح. من ناحية أخرى ، فإنه يوضح بعض سوء الفهم لعمليات تطوير الفريق مع المبرمجين من مستويات مختلفة نوعا ما من التدريب.
رسمت قراري في حوالي 10 دقائق. يبدو مثل هذا:
class Interval { start: number; stop: number constructor(start: number, stop: number) { this.start = start; this.stop = stop; } toString(arr: number[]) { let text: string; text = arr[this.start].toString(); if (this.start < this.stop) { text += '-' + arr[this.stop].toString(); } return text; } } function getRanges(arr: number[]) {
الخوارزمية هنا هي:
- في الخطوة الأولى نختار فترات من مجموعة من الأرقام
- في الخطوة الثانية ، نقوم بتحويل الفواصل الزمنية إلى سلاسل
ولكن بعد ذلك نظرت إلى هذا القرار. وليس حتى أنها تبدو مثالية أيضًا. مطول إلى حد ما ، يتم تقديم كيان إضافي "الفاصل". لكن ما زلت ، أنا مقتنع بأن هذا القرار أسهل بكثير في القراءة والفهم.
لكن هنا السؤال. كيف سيتم تقييم هذا القرار في مقابلة من وجهة نظر أحد مشجعي البرمجة الأوليمبيين؟
بشكل عام ، أود مواصلة هذه المناقشة.
محدث 1. إضافات إلى المهمة. يتم فرز مجموعة الإدخال.
UPD 2. المشاركة الأصلية متاحة مرة أخرى ،
habr.com/en/post/470407