مسیرها
/
Haskell
Haskell
/
تمرین‌ها
/
رنگ مقاومت سه‌گانه
رنگ مقاومت سه‌گانه

رنگ مقاومت سه‌گانه

آسان

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

اگر بخواهید چیزی با Raspberry Pi بسازید، احتمالاً از مقاومت‌ها استفاده خواهید کرد. برای این تمرین، فقط باید سه نکته درباره‌ی آن‌ها بدانید:

  • هر مقاومت یک مقدار مقاومت دارد.

  • مقاومت‌ها کوچک‌اند، آن‌قدر کوچک که اگر مقدار مقاومت را رویشان چاپ کنید، خواندنش سخت خواهد بود. برای حل این مشکل، سازندگان نوارهایی با کد رنگی روی مقاومت‌ها چاپ می‌کنند تا مقدار مقاومتشان را نشان دهند.

  • هر نوار مانند یک رقم از یک عدد عمل می‌کند. برای مثال، اگر یک نوار brown (با مقدار ۱) و پس از آن یک نوار green (با مقدار ۵) چاپ می‌کردند، به عدد ۱۵ تبدیل می‌شد. در این تمرین، برنامه‌ی مفیدی می‌سازید تا مجبور نباشید مقدار نوارها را به خاطر بسپارید. برنامه ۳ رنگ را به‌عنوان ورودی می‌گیرد و مقدار درست را برحسب اهم خروجی می‌دهد. نوارهای رنگی به این صورت کدگذاری می‌شوند:

  • black: ۰

  • brown: ۱

  • red: ۲

  • orange: ۳

  • yellow: ۴

  • green: ۵

  • blue: ۶

  • violet: ۷

  • grey: ۸

  • white: ۹

در تمرین «جفت رنگ مقاومت» دو رنگ اول را رمزگشایی کردید. برای نمونه، orange-orange مقدار اصلی 33 را به دست می‌دهد. رنگ سوم نشان می‌دهد که چند صفر باید به مقدار اصلی اضافه شود. مقدار اصلی به‌همراه صفرها، مقداری برحسب اهم به ما می‌دهد. برای این تمرین مهم نیست که اهم در واقع چیست. برای مثال:

  • orange-orange-black یعنی ۳۳ و بدون صفر، که می‌شود ۳۳ اهم.
  • orange-orange-red یعنی ۳۳ و ۲ صفر، که می‌شود ۳۳۰۰ اهم.
  • orange-orange-orange یعنی ۳۳ و ۳ صفر، که می‌شود ۳۳۰۰۰ اهم.

(اگر ریاضی را دوست دارید، می‌توانید صفرها را به‌صورت توان‌های ۱۰ در نظر بگیرید. اگر ریاضی را دوست ندارید، با همان صفرها پیش بروید. واقعاً یکی است؛ فقط به زبان ساده بیان شده، نه با اصطلاحات ریاضی.)

هدف این تمرین تبدیل رنگ‌ها به یک برچسب است:

"... ohms"

پس ورودیِ "orange", "orange", "black" باید این را برگرداند:

"33 ohms"

وقتی به مقاومت‌های بزرگ‌تر می‌رسیم، از یک پیشوند متریک برای نشان دادن بزرگی بیشتر اهم استفاده می‌شود، مثل «kiloohms». این شبیه به این است که به‌جای «۲۰۰۰ متر» بگوییم «۲ کیلومتر»، یا به‌جای «۲۰۰۰ گرم» بگوییم «۲ کیلوگرم».

برای مثال، ورودیِ "orange", "orange", "orange" باید این را برگرداند:

"33 kiloohms"

نکات

شما باید توابع label و ohms را پیاده‌سازی کنید. می‌توانید از امضای ارائه‌شده برای label استفاده کنید، اما نگذارید خلاقیت شما را محدود کند.

این تمرین با داده‌های متنی کار می‌کند. به دلایل تاریخی، نوع String در Haskell با [Char]، یعنی فهرستی از نویسه‌ها، هم‌معناست. برای پردازش کارآمدتر داده‌های متنی می‌توان از نوع Text استفاده کرد.

به عنوان یک افزودنی اختیاری به این تمرین، می‌توانید

  • درباره‌ی انواع رشته در Haskell بخوانید.

  • - text را به فهرست وابستگی‌های خود در package.yaml اضافه کنید.

  • 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.