إذا أُعطيتَ سلسلة نصية من الأرقام، فأخرِج جميع السلاسل النصية الفرعية المتتالية ذات الطول n فيها، بالترتيب الذي تظهر به.
فمثلًا، تحتوي السلسلة النصية "49142" على السلاسل النصية الفرعية التالية المكوّنة من 3 أرقام:
والسلاسل النصية الفرعية التالية المكوّنة من 4 أرقام:
وإذا طلبتَ سلاسل نصية مكوّنة من 6 أرقام من سلسلة نصية مكوّنة من 5 أرقام، فأنت تستحق ما يأتيك.
لاحظ أن هذه السلاسل النصية الفرعية مطلوب منها فقط أن تشغل مواضع متجاورة في المُدخل؛ ولا يلزم أن تكون الأرقام متتابعة عدديًا.
عرّف دالتين: (دالتين؟ نعم، أحيانًا نطلب من Go أكثر.)
تُرجع All مصفوفة تضم كل السلاسل النصية الفرعية من s التي طولها n.
All(n int, s string) []string
تُرجع UnsafeFirst أول سلسلة نصية فرعية من s طولها n.
UnsafeFirst(n int, s string) string
عند هذه النقطة، يمكنك اعتبار هذا التمرين مكتملًا والمضي قدمًا.
لكن انتظر، ربما تطرح سؤالًا منطقيًا: لماذا سُمّيت الدالة Unsafe First؟ إذا كنت مهتمًا، تابع القراءة للحصول على تمرين إضافي.
بمجرد أن ينجح go test لديك، جرّب go test -tags asktoomuch.
يستخدم هذا وسم بناء لتفعيل اختبار لم يكن مُفعّلًا من قبل.
تسمح وسوم البناء باختيار الملفات التي تستخدمها الحزمة.
وفي حالتنا، ستتحكم في ملفات الاختبار التي ستُستخدم.
يمكنك قراءة المزيد عنها في توثيق Go.
قد تلاحظ أنك لا تستطيع إرضاء اختبار asktoomuch هذا.
نحتاج إلى أسلوب للإشارة إلى أنه في بعض الحالات لا يمكنك أخذ أول N من أحرف السلسلة النصية.
لا تستطيع UnsafeFirst فعل ذلك، فهي تُرجع سلسلة نصية فقط.
لحل هذه المشكلة، لنُضف قيمة إرجاع أخرى إلى الدالة.
عرّف First(int, string) (first string, ok bool) واختبر باستخدام go test -tags first.
وسيط الإرجاع الثاني ok bool نمط شائع وأصيل في Go.
على سبيل المثال، تراه في البحث في الخرائط وتأكيدات النوع.
سجّل في Exercism لتتعلّم وتتقن Go عبر 34 مفهومًا165 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.