الماس

الماس

دشوار

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

کاتای الماس یک حرف را به عنوان ورودی می‌گیرد و آن را به شکل یک الماس بیرون می‌دهد. با گرفتن یک حرف، الماسی را چاپ می‌کند که با «A» شروع می‌شود و حرف داده‌شده در پهن‌ترین نقطه‌ی آن قرار می‌گیرد.

الزامات

  • ردیف اول شامل یک «A» است.
  • ردیف آخر شامل یک «A» است.
  • همه‌ی ردیف‌ها، به‌جز ردیف اول و آخر، دقیقاً دو حرف یکسان دارند.
  • در همه‌ی ردیف‌ها، تعداد فاصله‌های انتهایی برابر با تعداد فاصله‌های ابتدایی است. (این تعداد می‌تواند ۰ باشد.)
  • الماس به‌صورت افقی متقارن است.
  • الماس به‌صورت عمودی متقارن است.
  • شکل الماس مربع است (عرض برابر با ارتفاع).
  • حروف یک شکل الماسی می‌سازند.
  • در نیمه‌ی بالایی، حروف به ترتیب صعودی قرار دارند.
  • در نیمه‌ی پایینی، حروف به ترتیب نزولی قرار دارند.
  • چهار گوشه (که فاصله‌ها را در خود دارند) مثلث هستند.

مثال‌ها

در مثال‌های زیر، فاصله‌ها با نویسه‌ی · نشان داده شده‌اند.

الماس برای حرف «A»:

A

الماس برای حرف «C»:

··A··
·B·B·
C···C
·B·B·
··A··

الماس برای حرف «E»:

····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····

راهنمایی‌ها

تست‌های این تمرین با تست‌های معمول شما متفاوت‌اند. به‌طور معمول، یک تست بررسی می‌کند که برای یک ورودی مشخص، خروجی با مقدار مورد انتظار مطابقت دارد یا نه. به این کار «تست مبتنی بر مقدار» می‌گویند. اما این تمرین از «تست مبتنی بر ویژگی» استفاده می‌کند، که در آن تست‌ها بررسی می‌کنند آیا خروجی برای طیفی از ورودی‌ها ویژگی مشخصی دارد یا نه. دو تفاوت کلیدی که تست مبتنی بر ویژگی را از تست مبتنی بر مقدار جدا می‌کند عبارت‌اند از:

  1. تست مبتنی بر ویژگی به‌جای یک مقدار ورودی واحد، با مقدارهای ورودی زیادی کار می‌کند.
  2. تست مبتنی بر ویژگی به‌جای مقدارهای عینی، ویژگی‌ها را بررسی می‌کند.

در این تمرین، همه‌ی تست‌ها ویژگی‌ای از شکل لوزی را بررسی می‌کنند که کد شما باید تولید کند. علاوه بر این، همه‌ی تست‌ها بررسی می‌کنند که ویژگی مورد آزمایش برای همه‌ی حروف ورودی معتبر ('A' تا 'Z') برقرار باشد.

تست‌های این تمرین برای امکان‌پذیر کردن تست مبتنی بر ویژگی از بسته‌های FsCheck و FsCheck.Xunit استفاده می‌کنند. برای آشنایی بیشتر با FsCheck، می‌توانید مستندات آن را اینجا ببینید.

اگر می‌خواهید درباره‌ی تست مبتنی بر ویژگی اطلاعات بیشتری به دست آورید، این مقاله را ببینید.


منبع

Seb Roseاین لینک در پنجره یا تب جدیدی باز می‌شود.
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
C# Exercism

آماده‌اید الماس را شروع کنید؟

در Exercism ثبت‌نام کنید تا C# را همراه با 62 مفهوم178 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.