دورهمی

دورهمی

متوسط

مقدمه

هر ماه، همسرتان با بهترین دوستش ملاقات می‌کند. هر دوی آن‌ها برنامه‌های بسیار پرمشغله‌ای دارند و همین پیدا کردن یک تاریخ مناسب را دشوار می‌کند! با توجه به برنامه‌ی پرمشغله‌ی خودتان، همسرتان همیشه تاریخ‌های احتمالی ملاقات را با شما دوباره بررسی می‌کند:

  • «آیا می‌توانم جمعه‌ی اول ماه بعد ملاقات کنم؟»
  • «چهارشنبه‌ی سوم چطور؟»
  • «شاید یکشنبه‌ی آخر؟»

در تماس این ماه، همسرتان این سؤال را از شما پرسید:

  • «دوست دارم در پنجشنبه‌ی teenth ملاقات کنم؛ اشکالی ندارد؟»

گیج می‌شوید و می‌پرسید روز «teenth» چیست. همسرتان توضیح می‌دهد که روز teenth، مفهومی که خودش از خودش درآورده است، به روزهایی از ماه اشاره دارد که به «-teenth» ختم می‌شوند:

  • 13th (thirteenth)
  • 14th (fourteenth)
  • 15th (fifteenth)
  • 16th (sixteenth)
  • 17th (seventeenth)
  • 18th (eighteenth)
  • 19th (nineteenth)

از آنجا که هفت روز هفته هم وجود دارد، تضمین می‌شود که هر روز هفته در هر ماه دقیقاً یک روز teenth دارد.

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

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

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

شش مقدار برای هفته وجود دارد که باید در نظر بگیرید: first، second، third، fourth، last، teenth.

برای مثال، ممکن است از شما خواسته شود تاریخ دورهمی در اولین دوشنبه‌ی ژانویه ۲۰۱۸ (۱ ژانویه ۲۰۱۸) را پیدا کنید.

به همین ترتیب، ممکن است از شما خواسته شود که موارد زیر را پیدا کنید:

  • سومین سه‌شنبه‌ی اوت ۲۰۱۹ (۲۰ اوت ۲۰۱۹)
  • چهارشنبه‌ی teenth مه ۲۰۲۰ (۱۳ مه ۲۰۲۰)
  • چهارمین یکشنبه‌ی ژوئیه ۲۰۲۱ (۲۵ ژوئیه ۲۰۲۱)
  • آخرین پنجشنبه‌ی نوامبر ۲۰۲۲ (۲۴ نوامبر ۲۰۲۲)
  • شنبه‌ی teenth اوت ۱۹۵۳ (۱۵ اوت ۱۹۵۳)

هفته‌ی teenth

هفته‌ی teenth به هفت روز در ماه اشاره دارد که به «-teenth» ختم می‌شوند (روزهای ۱۳، ۱۴، ۱۵، ۱۶، ۱۷، ۱۸ و ۱۹).

اگر از ما خواسته شود شنبه‌ی teenth اوت ۱۹۵۳ را پیدا کنیم، تقویم آن را بررسی می‌کنیم:

    August 1953
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

از این تقویم درمی‌یابیم که شنبه‌ی teenth، ۱۵ اوت ۱۹۵۳ است.

کار با تاریخ‌ها در Prolog

پشتیبانی توکار Prolog از تاریخ‌ها تا حدی ابتدایی است. روشی بسیار بهتر برای کار با تاریخ‌ها استفاده از [بسته‌ی date_time][date_time-package] است.

نصب بسته‌ی date_time

اگر نسخه‌ی Swipl نصب‌شده‌ی شما به‌روز باشد، می‌توانید بسته را با اجرای این دستور نصب کنید:

swipl pack install date_time

اگر این روش جواب نداد، می‌توانید این را اجرا کنید:

swipl -g 'pack_install(date_time)'
Note

اگر از ویرایشگر آنلاین استفاده می‌کنید، نیازی نیست چیزی را به‌صورت دستی نصب کنید.

استفاده از بسته‌ی date_time

کد زیر را برای استفاده از بسته‌ی date_time به بالای فایل راه‌حل خود اضافه کنید:

:- use_module(library(date_time)).
Note

نکته: [منبع بسته‌ی date_time][https://www.swi-prolog.org/pack/file_details/date_time/prolog/date_time.pl?show=src] به‌خوبی مستند شده است و می‌تواند کمک بزرگی باشد!


منبع

جرمی هاینگاردنر به دورهمی‌ای در Boulder اشاره کرد که هر ماه در «Wednesteenth» برگزار می‌شود
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Prolog Exercism

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

در Exercism ثبت‌نام کنید تا Prolog را همراه با 109 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.