OCR সংখ্যা

OCR সংখ্যা

মধ্যম

ভূমিকা

আপনার সেরা বন্ধু Marta সম্প্রতি একটি স্থানীয় ইতিহাস জাদুঘরের সংগ্রহ নিয়ে কাজ করার স্বপ্নের চাকরি পেয়েছে। প্রোগ্রামিং-এ আপনার আগ্রহের কথা জেনে, কম্পিউটিংয়ের ইতিহাস নিয়ে আসন্ন একটি প্রদর্শনীর কাজে কর্মক্ষেত্রে তার একটি সমস্যার কথা সে আপনাকে খুলে বলে। একটি স্থানীয় বিশ্ববিদ্যালয়ের গণিত বিভাগ কয়েক বাক্স ঐতিহাসিক প্রিন্টআউট দান করেছিল, কিন্তু নথিগুলোর জীর্ণ অবস্থার কারণে লেখাটি ডিজিটাইজ করার সিদ্ধান্ত নেওয়া হয়েছে। তবে বিশ্ববিদ্যালয়ের পুরোনো প্রিন্টারটিতে লেখা উপস্থাপনের ধরনে কিছু অদ্ভুত বৈশিষ্ট্য ছিল, আর ডেটাটি সফলভাবে বের করে আনতে তার আপনার সাহায্যের প্রয়োজন হতে পারে।

নির্দেশনা

Optical Character Recognition বা OCR হলো এমন একটি সফটওয়্যার, যা লেখার ছবিকে মেশিনে পড়ার উপযোগী টেক্সটে রূপান্তর করে।

কিছু ডিজিট প্রকাশ করা ক্যারেক্টারের একটি গ্রিড দেওয়া হলে, সেই গ্রিডটিকে ডিজিটের একটি স্ট্রিংয়ে রূপান্তর করুন। গ্রিডে যদি সেলের একাধিক সারি থাকে, তাহলে আউটপুটে সারিগুলোকে "," দিয়ে আলাদা করতে হবে।

  • গ্রিডটি সেলের এক বা একাধিক লাইন দিয়ে তৈরি।
  • গ্রিডের প্রতিটি লাইন এক বা একাধিক সেল দিয়ে তৈরি।
  • প্রতিটি সেল তিন কলাম চওড়া ও চার সারি উঁচু (3x4) এবং একটি ডিজিট প্রকাশ করে।
  • ডিজিট আঁকা হয় পাইপ ("|"), আন্ডারস্কোর ("_") এবং স্পেস (" ") দিয়ে।

এজ কেস

  • যদি ইনপুটের আকার বৈধ না হয়, তাহলে আপনার প্রোগ্রামের জানানো উচিত যে একটি এরর হয়েছে।
  • যদি ইনপুটের আকার সঠিক হয় কিন্তু কোনো সেল চেনা না যায়, তাহলে সেই ক্যারেক্টারের জন্য আপনার প্রোগ্রামের "?" আউটপুট দেওয়া উচিত।

উদাহরণ

নিচের ইনপুটটি (কমেন্টগুলো ছাড়া) রূপান্তর করা হলে "1234567890" পাওয়া যায়।

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

নিচের ইনপুটটি রূপান্তর করা হলে "123,456,789" পাওয়া যায়।

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

ইমপ্লিমেন্টেশন নোট

নির্দেশনার ধাপ ১-এ যেভাবে বর্ণনা করা হয়েছে, সেভাবেই recognizeDigit নামের একটি ফাংশন ডিফাইন করুন, তবে পার্থক্য হলো এটি যেন 0 থেকে 9 পর্যন্ত সব দশটি ডিজিট চিনতে পারে। প্যারামিটার আর রিটার্ন ভ্যালু হিসেবে যা চান বেছে নিন, কিন্তু ধাপ ২-এর জন্য সাবরুটিন হিসেবে যেন এটি কাজে লাগে সেদিকে খেয়াল রাখুন।

ধাপ ২-এর জন্য ডিফাইন করুন,

func Recognize(string) []string

আর recognizeDigit ব্যবহার করে এটি ইমপ্লিমেন্ট করুন।

এখানে পরীক্ষা করা ইনপুট স্ট্রিংগুলোর প্রতিটি লাইনের শুরুতে একটি \n থাকে এবং শেষ লাইনের শেষে কোনো \n থাকে না। (এতে র স্ট্রিং লিটারেল পড়তে সুবিধা হয়।)

বোনাস পয়েন্টের জন্য, ভুল ফরম্যাটের ডেটা যেন সুন্দরভাবে হ্যান্ডেল করা যায় সেদিকে খেয়াল রাখুন। একটি আংশিক সেল নিয়ে কী করবেন? এটি মুছে ফেলবেন? স্পেস দিয়ে প্যাড করবেন? নাকি "?" ক্যারেক্টার দিয়ে সেটি রিপোর্ট করবেন? প্রথম ক্যারেক্টারটি যদি \n না হয়, তাহলে কী করবেন?

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Go Exercism

OCR সংখ্যা শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 34টি কনসেপ্ট165টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।