اعداد OCR

اعداد OCR

متوسط

مقدمه

بهترین دوستتان Marta به‌تازگی شغل رؤیایی‌اش را به دست آورده است: کار با مجموعه‌های یک موزه‌ی تاریخ محلی. او از علاقه‌ی شما به برنامه‌نویسی باخبر است و درباره‌ی مشکلی در محل کارش برای نمایشگاهی پیش‌رو در موضوع تاریخ رایانه با شما درد دل می‌کند. دانشکده‌ی ریاضی یکی از دانشگاه‌های محلی چند جعبه خروجی چاپی تاریخی اهدا کرده بود، اما با توجه به وضعیت نامناسب این اسناد، تصمیم گرفته شده است که متن آن‌ها دیجیتالی شود. با این حال، چاپگر قدیمی دانشگاه در نحوه‌ی نمایش متن رفتارهای عجیبی داشت و دوستتان می‌تواند از کمک شما برای استخراج موفقیت‌آمیز داده‌ها بهره ببرد.

دستورالعمل‌ها

تشخیص نویسه نوری یا OCR نرم‌افزاری است که تصاویر متن را به متنی قابل خواندن برای ماشین تبدیل می‌کند. با توجه به شبکه‌ای از نویسه‌ها که چند رقم را نمایش می‌دهد، آن شبکه را به رشته‌ای از ارقام تبدیل کنید. اگر شبکه چند سطر سلول داشته باشد، سطرها باید در خروجی با "," از هم جدا شوند.

  • شبکه از یک یا چند خط سلول تشکیل شده است.
  • هر خط از شبکه از یک یا چند سلول تشکیل شده است.
  • هر سلول سه ستون عرض و چهار سطر ارتفاع دارد (۳×۴) و یک رقم را نمایش می‌دهد.
  • ارقام با خط عمودی ("|")، زیرخط ("_") و فاصله (" ") رسم می‌شوند.

حالت‌های خاص

  • اگر اندازه‌ی ورودی معتبر نباشد، برنامه‌تان باید نشان دهد که خطایی رخ داده است.
  • اگر اندازه‌ی ورودی درست باشد اما سلولی قابل تشخیص نباشد، برنامه‌تان باید برای آن نویسه "?" را خروجی بدهد.

مثال‌ها

ورودی زیر (بدون توضیحات) به "1234567890" تبدیل می‌شود.

      _  _     _  _  _  _  _  _  #
    | _| _||_||_ |_   ||_||_|| | # Decimal numbers.
    ||_  _|  | _||_|  ||_| _||_| #
                                 # The fourth line is always blank,

ورودی زیر به "123,456,789" تبدیل می‌شود.

    _  _ 
  | _| _|
  ||_  _|
         
    _  _ 
|_||_ |_ 
  | _||_|
         
 _  _  _ 
  ||_||_|
  ||_| _|
         

نکات پیاده‌سازی

تابعی به اسم recognizeDigit تعریف کنید، همان‌طور که در مرحله‌ی ۱ دستورالعمل توضیح داده شده است، با این تفاوت که باید هر ده رقم ۰ تا ۹ را تشخیص دهد. برای پارامترها و مقدار بازگشتی هر چه می‌خواهید انتخاب کنید، اما آن را طوری بسازید که به‌عنوان یک زیرروال برای مرحله ۲ مفید باشد.

برای مرحله ۲، تابع زیر را تعریف کنید:

func Recognize(string) []string

و آن را با استفاده از recognizeDigit پیاده‌سازی کنید.

رشته‌های ورودی که اینجا آزمایش می‌شوند، در ابتدای هر خط یک \n دارند و در خط آخر \n پایانی ندارند. (این کار «لیترال‌های رشته‌ای خام» را خوانا می‌کند.)

برای کسب امتیاز، داده‌های بدقالب را به شکلی تمیز مدیریت کنید. با یک سلول ناقص چه کار می‌کنید؟ آن را دور می‌اندازید؟ با فاصله پر می‌کنید؟ آن را با نویسه‌ی "?" گزارش می‌کنید؟ اگر نویسه‌ی اول \n نباشد چه می‌کنید؟

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Go Exercism

آماده‌اید اعداد OCR را شروع کنید؟

در Exercism ثبت‌نام کنید تا Go را همراه با 34 مفهوم165 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.