ট্র্যাক
/
Haskell
Haskell
/
অনুশীলনী
/
রেজিস্টর কালার ট্রিও
রেজিস্টর কালার ট্রিও

রেজিস্টর কালার ট্রিও

সহজ

নির্দেশনা

আপনি যদি Raspberry Pi দিয়ে কিছু বানাতে চান, তাহলে সম্ভবত রেজিস্টর ব্যবহার করবেন। এই অনুশীলনীর জন্য এদের সম্পর্কে আপনাকে মাত্র তিনটি বিষয় জানতে হবে:

  • প্রতিটি রেজিস্টরের একটি রেজিস্ট্যান্স মান থাকে।

  • রেজিস্টর ছোট হয়, আসলে এতটাই ছোট যে সেগুলোর গায়ে রেজিস্ট্যান্স মানটি ছাপলে পড়া কঠিন হয়ে যেত। এই সমস্যা এড়াতে নির্মাতারা রেজিস্টরের গায়ে রঙ দিয়ে কোড করা ব্যান্ড ছাপেন, যাতে সেগুলোর রেজিস্ট্যান্স মান বোঝা যায়।

  • প্রতিটি ব্যান্ড একটি সংখ্যার একটি অঙ্ক হিসেবে কাজ করে। যেমন, তারা যদি একটি brown ব্যান্ড (মান 1) তারপর একটি green ব্যান্ড (মান 5) ছাপত, তাহলে সেটি 15 সংখ্যাটি বোঝাত। এই অনুশীলনীতে আপনি একটি সহায়ক প্রোগ্রাম তৈরি করবেন, যাতে ব্যান্ডগুলোর মান আপনাকে মনে রাখতে না হয়। প্রোগ্রামটি ইনপুট হিসেবে ৩টি রঙ নেবে এবং সঠিক মানটি ওহমে আউটপুট দেবে। রঙের ব্যান্ডগুলো এভাবে এনকোড করা হয়েছে:

  • black: 0

  • brown: 1

  • red: 2

  • orange: 3

  • yellow: 4

  • green: 5

  • blue: 6

  • violet: 7

  • grey: 8

  • white: 9

রেজিস্টর কালার ডুও-তে আপনি প্রথম দুটি রঙ ডিকোড করেছিলেন। যেমন: orange-orange-এর মূল মান হলো 33। তৃতীয় রঙটি বোঝায় মূল মানের সাথে কতটি শূন্য যোগ করতে হবে। মূল মানের সাথে শূন্যগুলো যোগ করলে ওহমে একটি মান পাওয়া যায়। এই অনুশীলনীর জন্য ওহম আসলে কী, তা গুরুত্বপূর্ণ নয়। যেমন:

  • orange-orange-black হলে হবে 33 এবং কোনো শূন্য নেই, যা 33 ohms হয়ে দাঁড়ায়।
  • orange-orange-red হলে হবে 33 এবং ২টি শূন্য, যা 3300 ohms হয়ে দাঁড়ায়।
  • orange-orange-orange হলে হবে 33 এবং ৩টি শূন্য, যা 33000 ohms হয়ে দাঁড়ায়।

(আপনার যদি গণিত পছন্দের বিষয় হয়, তাহলে শূন্যগুলোকে 10-এর সূচক হিসেবে ভাবতে পারেন। গণিত পছন্দ না হলে শূন্যগুলো নিয়েই এগিয়ে যান। আসলে বিষয়টা একই, শুধু গণিতের পরিভাষার বদলে সহজ ভাষায় বলা।)

এই অনুশীলনীটি রঙগুলোকে একটি লেবেলে রূপান্তর করার বিষয়ে:

"... ohms"

তাই "orange", "orange", "black" ইনপুট দিলে রিটার্ন করা উচিত:

"33 ohms"

বড় রেজিস্টরের ক্ষেত্রে ওহমের বড় মাত্রা বোঝাতে একটি মেট্রিক প্রিফিক্স ব্যবহার করা হয়, যেমন "kiloohms"। এটা অনেকটা "2000 মিটার"-এর বদলে "2 কিলোমিটার", বা "2000 গ্রাম"-এর জন্য "2 কিলোগ্রাম" বলার মতো।

যেমন, "orange", "orange", "orange" ইনপুট দিলে রিটার্ন করা উচিত:

"33 kiloohms"

ইঙ্গিত

আপনাকে label এবং ohms ফাংশন দুটি ইমপ্লিমেন্ট করতে হবে। label ফাংশনের জন্য দেওয়া সিগনেচারটি ব্যবহার করতে পারেন, তবে সেটি যেন আপনার সৃজনশীলতাকে সীমাবদ্ধ না করে।

এই অনুশীলনীটি টেক্সচুয়াল ডেটা নিয়ে কাজ করে। ঐতিহাসিক কারণে Haskell-এর String টাইপ আসলে [Char]-এর সমার্থক, অর্থাৎ ক্যারেক্টারের একটি অ্যারে। টেক্সচুয়াল ডেটা আরও দক্ষভাবে পরিচালনার জন্য Text টাইপটি ব্যবহার করা যায়।

এই অনুশীলনীর একটি ঐচ্ছিক সম্প্রসারণ হিসেবে আপনি করতে পারেন:

  • Haskell-এ স্ট্রিং টাইপ সম্পর্কে পড়ুন।

  • package.yaml ফাইলে আপনার ডিপেন্ডেন্সির তালিকায় - text যোগ করুন।

  • Data.Text ইমপোর্ট করুন এই পদ্ধতিতে:

    import qualified Data.Text as T
    import           Data.Text (Text)
    
  • এখন আপনি যেমন label :: Resistor -> Text লিখতে পারেন, আর Data.Text-এর কম্বিনেটরগুলো ব্যবহার করতে পারেন যেমন T.pack।

  • Data.Text-এর ডকুমেন্টেশন দেখুন,

এই অংশটি সম্পূর্ণ ঐচ্ছিক।

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

রেজিস্টর কালার ট্রিও শুরু করতে প্রস্তুত?

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