حصل صديقك المقرّب مارتا مؤخرًا على وظيفة أحلامه للعمل مع مجموعات متحف محلي للتاريخ. ولمعرفته بشغفك بالبرمجة، يبوح لك بمشكلة تواجهه في العمل تتعلق بمعرض قادم عن تاريخ الحوسبة. كان قسم الرياضيات في إحدى الجامعات المحلية قد تبرّع بعدة صناديق من المطبوعات التاريخية، لكن نظرًا لسوء حالة المستندات، تقرر رقمنة النص. غير أن الطابعة القديمة للجامعة كانت لها بعض الغرائب في كيفية تمثيل النص، ويمكن لصديقك أن يستفيد من مساعدتك لاستخراج البيانات بنجاح.
التعرّف الضوئي على المحارف (OCR) هو برنامج يحوّل صور النصوص إلى نص يمكن قراءته آليًا.
إذا أُعطيت شبكة من المحارف تمثّل بعض الأرقام، فحوّل الشبكة إلى سلسلة نصية من الأرقام.
إذا كانت الشبكة تحتوي على عدة صفوف من الخلايا، فيجب فصل الصفوف في المخرجات بـ ",".
"|") والشرطات السفلية ("_") والمسافات (" ")."?" لذلك المحرف.المُدخل التالي (بدون التعليقات) يُحوَّل إلى "1234567890".
_ _ _ _ _ _ _ _ #
| _| _||_||_ |_ ||_||_|| | # Decimal numbers.
||_ _| | _||_| ||_| _||_| #
# The fourth line is always blank,
المُدخل التالي يُحوَّل إلى "123,456,789".
_ _
| _| _|
||_ _|
_ _
|_||_ |_
| _||_|
_ _ _
||_||_|
||_| _|
عرّف دالة باسم recognizeDigit كما هو موضح في الخطوة 1 من التعليمات، لكن اجعلها تتعرف على الأرقام العشرة كلها من 0 إلى 9.
اختر ما يعجبك للمعاملات والقيم المُرجعة، لكن اجعلها مفيدة كإجراء فرعي للخطوة 2.
أما الخطوة 2، فعرّف:
func Recognize(string) []string
ونفّذها باستخدام recognizeDigit.
السلاسل النصية المُدخلة التي تُختبر هنا تحتوي على \n في بداية كل سطر، ولا تحتوي على \n في نهاية السطر الأخير. (وهذا يجعل السلاسل النصية الحرفية الخام أسهل في القراءة.)
وللحصول على نقاط إضافية، تعامل مع البيانات غير المنسّقة بلطف.
ماذا تفعل بخلية جزئية؟
أتتجاهلها؟
أتحشوها بمسافات؟
أتبلّغ عنها بمحرف "?"؟
وماذا تفعل إن لم يكن المحرف الأول \n؟
سجّل في Exercism لتتعلّم وتتقن Go عبر 34 مفهومًا165 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.