بهترین دوستتان Marta بهتازگی شغل رؤیاییاش را به دست آورده است: کار با مجموعههای یک موزهی تاریخ محلی. او از علاقهی شما به برنامهنویسی باخبر است و دربارهی مشکلی در محل کارش برای نمایشگاهی پیشرو در موضوع تاریخ رایانه با شما درد دل میکند. دانشکدهی ریاضی یکی از دانشگاههای محلی چند جعبه خروجی چاپی تاریخی اهدا کرده بود، اما با توجه به وضعیت نامناسب این اسناد، تصمیم گرفته شده است که متن آنها دیجیتالی شود. با این حال، چاپگر قدیمی دانشگاه در نحوهی نمایش متن رفتارهای عجیبی داشت و دوستتان میتواند از کمک شما برای استخراج موفقیتآمیز دادهها بهره ببرد.
تشخیص نویسه نوری یا OCR نرمافزاری است که تصاویر متن را به متنی قابل خواندن برای ماشین تبدیل میکند.
با توجه به شبکهای از نویسهها که چند رقم را نمایش میدهد، آن شبکه را به رشتهای از ارقام تبدیل کنید.
اگر شبکه چند سطر سلول داشته باشد، سطرها باید در خروجی با "," از هم جدا شوند.
"|")، زیرخط ("_") و فاصله (" ") رسم میشوند."?" را خروجی بدهد.ورودی زیر (بدون توضیحات) به "1234567890" تبدیل میشود.
_ _ _ _ _ _ _ _ #
| _| _||_||_ |_ ||_||_|| | # Decimal numbers.
||_ _| | _||_| ||_| _||_| #
# The fourth line is always blank,
ورودی زیر به "123,456,789" تبدیل میشود.
_ _
| _| _|
||_ _|
_ _
|_||_ |_
| _||_|
_ _ _
||_||_|
||_| _|
تابعی به اسم recognizeDigit تعریف کنید، همانطور که در مرحلهی ۱ دستورالعمل توضیح داده شده است، با این تفاوت که باید هر ده رقم ۰ تا ۹ را تشخیص دهد. برای پارامترها و مقدار بازگشتی هر چه میخواهید انتخاب کنید، اما آن را طوری بسازید که بهعنوان یک زیرروال برای مرحله ۲ مفید باشد.
برای مرحله ۲، تابع زیر را تعریف کنید:
func Recognize(string) []string
و آن را با استفاده از recognizeDigit پیادهسازی کنید.
رشتههای ورودی که اینجا آزمایش میشوند، در ابتدای هر خط یک \n دارند و در خط آخر \n پایانی ندارند. (این کار «لیترالهای رشتهای خام» را خوانا میکند.)
برای کسب امتیاز، دادههای بدقالب را به شکلی تمیز مدیریت کنید. با یک سلول ناقص چه کار میکنید؟ آن را دور میاندازید؟ با فاصله پر میکنید؟ آن را با نویسهی "?" گزارش میکنید؟ اگر نویسهی اول \n نباشد چه میکنید؟