Gilded Rose

Gilded Rose

دشوار

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

به تیم مهندسی Gilded Rose خوش آمدید! همان‌طور که می‌دانید، ما مسافرخانه‌ای هستیم که فقط بهترین کالاها را می‌خرد و می‌فروشد. کیفیت کالاهای ما هرچه به مهلت فروششان نزدیک‌تر می‌شوند پیوسته افت می‌کند، بنابراین یک سیستم انبارداری داریم که این داده‌ها را پیگیری می‌کند.

از شما می‌خواهیم ویژگی تازه‌ای به سیستم ما اضافه کنید تا بتوانیم فروش دسته‌ی تازه‌ای از اقلام را آغاز کنیم. با این حال، کد ما به‌هم‌ریخته است و تا وقتی کد موجود را بازآرایی نکنید، افزودن ویژگی تازه دشوار خواهد بود.

پس کار شما دو بخش دارد: سیستم انبارداری را بازآرایی کنید، بعد ویژگی تازه را اضافه کنید.

نگاهی کلی به سیستم انبارداری

اصول اولیه‌ی سیستم ما از این قرار است:

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

خیلی ساده است، نه؟ اما اینجا است که ماجرا جالب می‌شود:

  • وقتی مهلت فروش سر برسد، کیفیت با سرعت دو برابر افت می‌کند.
  • کیفیت یک قلم هرگز منفی نمی‌شود.
  • Aged Brie در واقع هرچه کهنه‌تر می‌شود، کیفیتش بیشتر می‌شود.
  • کیفیت یک قلم هرگز بیش از ۵۰ نمی‌شود.
  • Sulfuras چون یک قلم افسانه‌ای است مهلت فروش ندارد و کیفیتش ۸۰ است که هرگز کاهش نمی‌یابد.
  • کیفیت Backstage passes هم مانند Aged Brie هرچه به مهلت فروششان نزدیک‌تر می‌شوند بالا می‌رود: وقتی ۱۰ روز یا کمتر باقی مانده باشد کیفیت ۲ واحد و وقتی ۵ روز یا کمتر باقی مانده باشد ۳ واحد افزایش می‌یابد، اما بعد از کنسرت کیفیت به ۰ می‌رسد.

1. بازآرایی

برای هموار کردن راه ویژگی تازه، کد موجود را بازآرایی کنید و تغییر دادنش را آسان‌تر سازید.

هر تغییری که می‌خواهید بدهید و هر کد تازه‌ای که لازم است اضافه کنید، به شرطی که همه‌چیز همچنان درست کار کند (یعنی تا وقتی آزمون‌های ویژگی‌های موجود همچنان قبول شوند).

توجه: می‌توانید فرض کنید که اقلام همیشه با کیفیتی معتبر شروع می‌کنند. به بیان دیگر، آزمون‌های خودکار بررسی نمی‌کنند که وقتی کیفیت اولیه‌ی یک قلم از بیشینه بالاتر باشد، یا وقتی کیفیت اولیه‌ی یک Sulfuras چیزی جز ۸۰ باشد، چه اتفاقی می‌افتد.

2. افزودن ویژگی تازه

ما به‌تازگی با تأمین‌کننده‌ای برای اقلام Conjured قرارداد بسته‌ایم. وظیفه‌ی شما افزودن قواعد زیر به سیستم ما است:

  • کیفیت اقلام Conjured وقتی مهلت فروششان سر برسد به ۰ می‌رسد. علاوه بر این:
    • کیفیت اقلام معمولی Conjured دو برابر سریع‌تر از اقلام معمولی‌ای که Conjured نیستند افت می‌کند.
    • Sulfuras Conjured برخلاف Sulfuras معمولی مهلت فروش دارد.
    • کیفیت Backstage passes Conjured یک واحد کمتر از حالتی افزایش می‌یابد که Conjured نباشند.

منبع

Gilded Rose Kataاین لینک در پنجره یا تب جدیدی باز می‌شود.
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Ruby Exercism

آماده‌اید Gilded Rose را شروع کنید؟

در Exercism ثبت‌نام کنید تا Ruby را همراه با 21 مفهوم121 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.