اگر بخواهید با Raspberry Pi چیزی بسازید، احتمالاً از مقاومتها استفاده میکنید. برای این تمرین، باید دو نکته را دربارهی آنها بدانید:
برای حل این مشکل، تولیدکنندگان نوارهایی با کد رنگی روی مقاومتها چاپ میکنند تا مقدار مقاومتشان را نشان دهند. هر نوار یک موقعیت و یک مقدار عددی دارد.
۲ نوار اول یک مقاومت یک طرح رمزگذاری ساده دارند: هر رنگ به یک عدد مشخص نگاشت میشود. برای مثال، اگر نواری با رنگ brown (با مقدار 1) و سپس نواری با رنگ green (با مقدار 5) چاپ کنند، به عدد 15 تبدیل میشود.
در این تمرین میخواهید برنامهای مفید بسازید تا لازم نباشد مقدار نوارها را به خاطر بسپارید. برنامه نام رنگها را بهعنوان ورودی میگیرد و یک عدد دورقمی را بهعنوان خروجی میدهد، حتی اگر ورودی بیش از دو رنگ باشد!
رنگ نوارها به این صورت رمزگذاری شدهاند:
از مثال بالا: brown-green باید 15 را برگرداند و brown-green-violet هم باید 15 را برگرداند و رنگ سوم را نادیده میگیرد.
این تمرین بهعنوان ادامهی Resistor Color در نظر گرفته شده است و بر آن بنا میشود.
هرچند میتوانید تمرینهای عملی را به هر ترتیبی که میخواهید حل کنید، توصیه میکنیم ترتیب پیشنهادی را دنبال کنید.
در این تمرین، نحوهی نگارش رنگهایی که از قبل با پیشوند c* تعریف شدهاند در اختیار شما قرار میگیرد، مثلاً c*black.
سپس باید بر اساس دستورالعملها، نحوهی نگارشی تعریف کنید که دنبالهای از رنگها را به یک عدد نسبت میدهد.
رنگها میان *[[ و ]] قرار میگیرند و با , از هم جدا میشوند، مثلاً *[[c*black, c*yellow, c*violet]].
این کار احتمالاً مستلزم آن است که از «نمادگذاریها» یا «ماکروها» استفاده کنید. ممکن است بخواهید یک مرجع را ببینید.
چون نحو جدید در زمان کامپایل گسترش مییابد، تا وقتی همهی نحوهای لازم تعریف نشده باشد، هیچ آزمونی کامپایل نخواهد شد.
به همین دلیل، بهجای تکیه بر آزمونهای متعارف زمان اجرا، از #guard_msgs استفاده میکنیم.
این دستور، یک داکاسترینگ دادهشده را با پیامی که دستور دیگری (در این مورد #eval) تولید میکند مقایسه میکند و اگر با هم متفاوت باشند، خطایی گزارش میدهد.
میتوانید نبود خطا را نشانهی قبولی آزمون بدانید.
اگر بهصورت محلی یا در زمین بازی آنلاین Lean کار کنید، بازخورد فوری هر خطایی که #guard_msgs گزارش کند را از طریق Lean InfoView دریافت میکنید.
اجراکنندهی آنلاین آزمونها در حال حاضر از وارد کردن کل کتابخانهی فرابرنامهنویسی Lean پشتیبانی نمیکند.
هرچند استفاده از هر قابلیتی که Lean بهطور پیشفرض در اختیار میگذارد، از جمله قابلیتهای موجود در فضای نام Lean، آزاد است، ولی افزودن import Lean یا وارد کردن ماژولهای مشخصی از فضای نام Lean موجب شکست ارسال شما به Exercism میشود.
توجه کنید که برای حل این تمرین، وارد کردن کتابخانهی Lean لازم نیست.