سلام دوست عزیز😃👋

به «آزمون ورودی هکاتون دیوار» خوش آمدی!

هرگونه ارتباط با سایر شرکت‌کنندگان در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکت‌کنندگان مسابقه حذف می‌شوید.

لینک‌های مفید برای شرکت در مسابقه:

سوالات و مشکلات خودتان را می‌توانید از طریق قسمت «سوال بپرسید» با ما در میان بگذارید.

پنج سوال اول مسابقه الگوریتمی است و سوال پنجم مهارت شما را در پیاده‌سازی می‌سنجد.

موفق باشید و بهتون خوش بگذره 😉✌

مسکن در دیوار


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

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

دستورها🔗

دستور add_house

فرم کلی این دستور به صورت زیر است:

add_house -name="<title>" -type="<type>" -status="<status>" -price=<price> -area=<area> -latitude=<latitude> -longitude=<longitude> [-desc="<description>"]
Plain text
  • <title> عنوان آگهی (منحصربه‌فرد و اجباری).
  • <type> نوع ملک (مانند apartment برای آپارتمان یا yard برای حیاط و اجباری).
  • <status> وضعیت ملک (sale برای فروش، rent برای رهن یا اجاره و اجباری).
  • <price> قیمت ملک (عدد صحیح و مثبت به تومان و اجباری).
  • <area> متراژ ملک (عدد صحیح و مثبت بر حسب متر مربع و اجباری).
  • <latitude> عرض جغرافیایی ملک (عدد حقیقی و اجباری).
  • <longitude> طول جغرافیایی ملک (عدد حقیقی و اجباری).
  • [description] توضیحات اختیاری.

اگر عنوان آگهی قبلاً ثبت شده باشد، پیام invalid title چاپ شود. در غیر این صورت، پیام house added successfully چاپ شود.

دستور get_houses

فرم کلی این دستور به صورت زیر است:

get_houses -type="<type>" -status="<status>" [-min_price=<min_price>] [-max_price=<max_price>] [-min_area=<min_area>] [-max_area=<max_area>] -latitude=<latitude> -longitude=<longitude>
Plain text

این دستور به معنی جستجو برای آگهی‌هایی با ویژگی‌های مشخص است.

  • <type> نوع ملک (مانند apartment یا yard و اجباری).
  • <status> وضعیت ملک (sale یا rent و اجباری).
  • [min_price] حداقل قیمت آگهی (عدد صحیح و اختیاری).
  • [max_price] حداکثر قیمت آگهی (عدد صحیح و اختیاری).
  • [min_area] حداقل متراژ آگهی (عدد صحیح وختیاری).
  • [max_area] حداکثر متراژ آگهی (عدد صحیح و اختیاری).
  • <latitude> عرض جغرافیایی منطقه جستجو (عدد حقیقی و اجباری).
  • <longitude> طول جغرافیایی منطقه جستجو (عدد حقیقی و اجباری).

در این دستور، آگهی‌ها باید بر اساس نزدیکی جغرافیایی به منطقه جستجو مرتب شوند. آگهی‌هایی که نزدیک‌تر به مختصات جستجو هستند، اول نمایش داده شوند. برای محاسبه نزدیکی از فرمول فاصله هاروارد (HaversineFormulaHaversine Formula) استفاده کنید. سپس نام آگهی‌های مرتب‌شده را به ترتیب در یک خط و با یک فاصله بین آن‌ها چاپ کنید. (نزدیک‌ترین آگهی باید در ابتدای خط چاپ شود.) اگر لیستی که باید چاپ شود خالی است، عبارت no house found! را چاپ کنید.

دستور remove_house

فرم کلی این دستور به صورت زیر است:

remove_house -name="<title>"
Plain text

این دستور به معنی حذف آگهی با عنوان <title> است.

  • اگر آگهی با این عنوان موجود نباشد، پیام invalid title چاپ شود.
  • در غیر این صورت، پیام house removed successfully چاپ شود.

نکات🔗

  1. تمام ورودی‌ها حروف کوچک انگلیسی و اعداد هستند و حداکثر طول هر رشته ۲۰ است.
  2. قیمت و متراژ همگی مقادیر صحیح و مثبت هستند.
  3. مختصات جغرافیایی (عرض و طول) مقادیر حقیقی و دقیق هستند و تا ۴ رقم اعشار در ورودی داده می‌شوند.
  4. مقایسه فاصله‌ها باید تا حداقل ۴ رقم اعشار دقیق باشند و داوری کد بر اساس ۴ رقم اول اعداد انجام می‌شود.
  5. تضمین می‌شود فرمت دستورهای ورودی، مطابق با صورت مسئله و معتبر هستند.
  6. به حروف کوچک و بزرگ در عبارات خروجی‌ دقت کنید. برای گرفتن امتیاز کامل، خروجی شما باید کاملا شبیه عبارات در صورت مسئله باشند.

ورودی🔗

در سطر اول عدد صحیح و مثبت nn داده می‌شود که تعداد دستورها را مشخص می‌کند.

1n1001 \leq n \leq 100

در nn سطر بعدی، هر سطر شامل یک دستور از نوع‌های تعریف‌شده است.

خروجی🔗

خروجی شامل nn سطر است که پاسخ مناسب به هر دستور را چاپ می‌کند.

مثال‌ها🔗

ورودی نمونه ۱🔗

7
add_house -name="apartment1" -type="apartment" -status="sale" -price=3000000 -area=80 -latitude=35.6895 -longitude=51.3890
add_house -name="yard1" -type="yard" -status="rent" -price=5000000 -area=200 -latitude=35.6995 -longitude=51.3900
add_house -name="yard2" -type="yard" -status="rent" -price=5000000 -area=200 -latitude=35.6995 -longitude=51.3900
add_house -name="apartment2" -type="apartment" -status="sale" -price=4000000 -area=100 -latitude=35.6985 -longitude=51.3850
get_houses -type="apartment" -status="sale" -latitude=35.6890 -longitude=51.3880
remove_house -name="yard1"
get_houses -type="yard" -status="rent" -latitude=35.6890 -longitude=51.3890
Plain text

خروجی نمونه ۱🔗

house added successfully
house added successfully
house added successfully
house added successfully
apartment1 apartment2 
house removed successfully
yard2
Plain text

ورودی نمونه ۲🔗

5
add_house -name="apartment1" -type="apartment" -status="sale" -price=3500000 -area=90 -latitude=35.7100 -longitude=51.3800
add_house -name="apartment2" -type="apartment" -status="sale" -price=3800000 -area=110 -latitude=35.7200 -longitude=51.3700
get_houses -type="apartment" -status="sale" -latitude=35.7100 -longitude=51.3800
get_houses -type="apartment" -status="sale" -latitude=35.7100 -longitude=51.3800 -min_price=3600000
remove_house -name="apartment2"
Plain text

خروجی نمونه ۲🔗

house added successfully
house added successfully
apartment1 apartment2 
apartment2
house removed successfully
Plain text
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.