نقاط زینی

نقاط زینی

آسان

مقدمه

قصد دارید در جنگل نزدیک خانه‌تان یک خانه‌ی درختی بسازید تا بتوانید طلوع و غروب خورشید را تماشا کنید.

از یک شرکت نقشه‌برداری محلی داده‌هایی به دست آورده‌اید که ارتفاع هر درخت را در هر بخش مستطیلی نقشه نشان می‌دهند. باید هر شبکه روی نقشه را تحلیل کنید تا درخت‌های مناسب برای خانه‌ی درختی خود را پیدا کنید.

درخت مناسب هر دو ویژگی زیر را دارد:

  • از هر درختی در شرق و غرب بلندتر است تا بهترین منظره‌ی ممکن از طلوع‌ها و غروب‌های خورشید را داشته باشید.
  • از هر درختی در شمال و جنوب کوتاه‌تر است تا میزان بالا رفتن از درخت را به کمترین حد برسانید.

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

وظیفه‌ی شما این است که درخت‌های بالقوه‌ای را پیدا کنید که بتوانید خانه‌ی درختی خود را روی آن‌ها بسازید.

شرکت داده‌ها، داده‌ها را به شکل جدول‌هایی ارائه می‌دهد که ارتفاع درخت‌ها را نشان می‌دهند. سطرهای جدول جهت شرق-غرب و ستون‌های آن جهت شمال-جنوب را نشان می‌دهند.

یک درخت قابل‌قبول، بزرگ‌ترین درخت در سطر خود و در عین حال کوچک‌ترین درخت در ستون خود است.

ممکن است جدولی اصلاً هیچ درخت مناسبی نداشته باشد. یا ممکن است یکی داشته باشد، یا حتی چندین درخت.

این جدولی است که دقیقاً یک درخت نامزد دارد.

      ↓
      1  2  3  4
    |-----------
  1 | 9  8  7  8
→ 2 |[5] 3  2  4
  3 | 6  6  7  1
  • سطر ۲ مقادیر ۵، ۳، ۲ و ۴ را دارد. بزرگ‌ترین مقدار ۵ است.
  • ستون ۱ مقادیر ۹، ۵ و ۶ را دارد. کوچک‌ترین مقدار ۵ است.

پس نقطه‌ی [2, 1] (سطر: ۲، ستون: ۱) جای بسیار خوبی برای خانه‌ی درختی است.

پیام‌های استثنا

گاهی لازم است یک استثنا ایجاد کنید. وقتی این کار را می‌کنید، باید همیشه یک پیام خطای معنادار بگنجانید تا نشان دهد منشأ خطا چیست. این کار کد شما را خواناتر می‌کند و به شکل چشمگیری به اشکال‌زدایی کمک می‌کند. در موقعیت‌هایی که می‌دانید منشأ خطا نوع مشخصی خواهد بود، می‌توانید یکی از انواع خطای توکار را ایجاد کنید، اما باز هم باید پیامی معنادار بگنجانید.

این تمرین به‌طور خاص از شما می‌خواهد که اگر matrix نامنظم است، با دستور raise یک ValueError «پرتاب» کنید. تست‌ها فقط در صورتی موفق می‌شوند که هم exception را raise کنید و هم پیامی همراه آن بگنجانید.

برای پرتاب یک ValueError همراه با پیام، پیام را به‌عنوان آرگومان به نوع exception بنویسید:

# if the matrix is irregular
raise ValueError("irregular matrix")
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Python Exercism

آماده‌اید نقاط زینی را شروع کنید؟

در Exercism ثبت‌نام کنید تا Python را همراه با 17 مفهوم146 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.