پیتزا رباتیک، یک مسابقه برنامهنویسی و ریاضی برای دانشآموزان از هر کجای دنیا
مهلت شرکت در مسابقه به پایان رسیده است.
نتایج
پیتزا رباتیک یک شرکت نوپای پیتزا هست که در آن پیتزاها توسط ربات تهیه و تحویل داده میشه و این مشتریها هستند که قیمت را انتخاب میکنند.
شیوه کار
هر مشتری پیتزای دلخواهش را به هر قیمتی که میخواهد سفارش میدهد. پیتزا رباتیک میتونه هر کدام را که خواست قبول یا رد کنه. اما آنهایی که پذیرفت را باید تا یک مدت زمان مشخص تحویل دهد.
پیتزا رباتیک اگر هیچ سفارشی را قبول نکنه، هیچ سودی نمیکنه. از طرف دیگر، اگر همه سفارشها را قبول کنه به احتمال زیاد ضرر کلانی میکنه.
پیتزا رباتیک به برنامهای نیاز داره که بهشون بگه کدام یک از سفارشها را قبول کنه. این برنامهای هست که تو براشون مینویسی.
ساختار برنامه
در برنامه، اول همه سفارشها دریافت میشوند. موقعیت هر سفارش در شهر با یک مختصات (x و y) و سود ناخالص آن با profit نشان داده میشه. برای مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
cost_meter = 0.001 # $/meter speed = 500 # meter/minute # input ... case = 'E1' max_total_time = 5 # minute orders = [{'id': 1, 'x': 300, 'y': 400, 'profit': 5}, {'id': 2, 'x': 1000, 'y': 0, 'profit': 5}] # Write your program here ................................. accepted_orders_id = [] actual_total_time = 0 total_net_profit = 0 # ...................................................... # output ... print(case, round(total_net_profit, 2), round(actual_total_time, 2), accepted_orders_id) |
سود خالص یک سفارش (net_profit) برابر با سود ناخالص منهای هزینه تحویل هست. هزینه تحویل یک سفارش برابر با مسافت (فاصله رفت و برگشت از آشپزخانه که در مبدا مختصات هست) ضرب به در هزینه سفر برای هر متر (cost_meter) است.
ربات پرنده با یک سرعت ثابت (speed) حرکت میکنه و در هر لحظه توانایی حمل تنها یک سفارش را داره.
برنامه تو باید سفارشهایی که پیتزا رباتیک باید بپذیرد را پیدا کند (accepted_orders_id). این کار باید طوری انجام بشه که سود خالص کل (total_net_profit) پیتزا رباتیک حداکثر بشه و مدت زمان تحویل همه سفارشها (actual_total_time) هم از یک مدت زمان کل مشخص (max_total_time) کوتاهتر باشد.
در صورتی که ساختار برنامه بالا برات جدید هست، دوره برنامهنویسی ریاضی با پایتون را میتونی ببینی. اگر درباره حمل و نقل با رباتهای پرنده هم کنجکاو هستی، این مقاله را ببین.
مثال
در مثال بالا، بعد از محاسبه به نتایج زیر دست پیدا میکنیم:
سود خالص هر دو سفارش مثبت است. اما چون تحویل هر دو با هم بیشتر از ۵ دقیقه طول میکشه، سفارش ۱ چون سود خالص بیشتری داره پذیرفته میشه. خروجی برنامه:
1 |
E1 4.0 2.0 [1] |
چند مثال دیگر:
1 2 3 4 5 |
case = 'E2' max_total_time = 20 # minute orders = [{'id': 1, 'x': 300, 'y': -2370, 'profit': 4.1}, {'id': 2, 'x': -2460, 'y': -2310, 'profit': 4.6}, {'id': 3, 'x': -2110, 'y': -140, 'profit': 4.5}, {'id': 4, 'x': 1130, 'y': -2310, 'profit': 7.2}, {'id': 5, 'x': 90, 'y': -1920, 'profit': 9.4}] # E2 7.61 17.97 [4, 5] |
1 2 3 4 5 |
case = 'E3' max_total_time = 30 # minute orders = [{'id': 1, 'x': -1180, 'y': -1210, 'profit': 8.9}, {'id': 2, 'x': -2140, 'y': 1370, 'profit': 3.5}, {'id': 3, 'x': 250, 'y': 10, 'profit': 4.6}, {'id': 4, 'x': 1550, 'y': 1110, 'profit': 9.1}, {'id': 5, 'x': 510, 'y': 1170, 'profit': 5.4}, {'id': 6, 'x': -740, 'y': -2460, 'profit': 10.0}, {'id': 7, 'x': 410, 'y': -420, 'profit': 3.6}, {'id': 8, 'x': -1160, 'y': 930, 'profit': 9.9}, {'id': 9, 'x': -1940, 'y': 1200, 'profit': 9.8}, {'id': 10, 'x': -260, 'y': 840, 'profit': 8.4}, {'id': 11, 'x': -1350, 'y': 1990, 'profit': 9.3}, {'id': 12, 'x': -1040, 'y': -1110, 'profit': 9.9}, {'id': 13, 'x': 1210, 'y': -640, 'profit': 7.6}, {'id': 14, 'x': -200, 'y': -880, 'profit': 8.2}, {'id': 15, 'x': -780, 'y': 1090, 'profit': 5.4}, {'id': 16, 'x': 2060, 'y': -870, 'profit': 5.8}, {'id': 17, 'x': -2280, 'y': 220, 'profit': 5.3}, {'id': 18, 'x': 1170, 'y': 330, 'profit': 5.9}, {'id': 19, 'x': 410, 'y': -1210, 'profit': 3.7}, {'id': 20, 'x': -60, 'y': 280, 'profit': 3.4}, {'id': 21, 'x': 1940, 'y': -1210, 'profit': 7.7}, {'id': 22, 'x': -550, 'y': -770, 'profit': 7.1}, {'id': 23, 'x': 810, 'y': 1160, 'profit': 3.8}, {'id': 24, 'x': -2430, 'y': 2220, 'profit': 6.7}, {'id': 25, 'x': 1580, 'y': 1980, 'profit': 9.5}, {'id': 26, 'x': 500, 'y': 1650, 'profit': 3.1}, {'id': 27, 'x': 1520, 'y': -1820, 'profit': 8.0}, {'id': 28, 'x': -850, 'y': 1290, 'profit': 7.7}, {'id': 29, 'x': 1810, 'y': -880, 'profit': 5.7}, {'id': 30, 'x': 510, 'y': -540, 'profit': 9.4}, {'id': 31, 'x': 2080, 'y': -1020, 'profit': 4.1}, {'id': 32, 'x': 1920, 'y': 1080, 'profit': 6.2}, {'id': 33, 'x': -1300, 'y': 1240, 'profit': 5.4}, {'id': 34, 'x': -440, 'y': -1950, 'profit': 3.4}, {'id': 35, 'x': -1490, 'y': 1160, 'profit': 3.1}] # E3 47.3 29.8 [3, 7, 8, 10, 13, 14, 20, 22, 30] |
ارزیابی
عملکرد و سرعت اجرای برنامه از معیارهای اصلی ارزیابی میباشند.
نفرات برتر مسابقه در پایلی معرفی و برای همیشه ماندگار خواهند شد.
مبلغی اعتبار خرید فرادرس هم به نفرات برتر اهدا خواهد شد.
نحوه شرکت در مسابقه
مسابقه آنلاین و شرکت در آن برای همه دانشآموزان آزاد است.
آخرین مهلت ارسال جواب پایان سهشنبه ۳۰ بهمنماه ۹۷ است.
در صورت ارسال زودتر، ما در صورت امکان شرکتکننده را برای بهبود برنامه و ارسال دوباره تا پیش از روز پایان راهنمایی میکنیم.
این فایل را با برنامه خود تکمیل و به شکل ضمیمه ایمیل به آدرس upylie@gmail.com بفرست.
هنگام تکمیل فایل، دستورالعمل داخل آن را با دقت بخوان. ما برای ارزیابی برنامه هر شرکتکننده، تنها بخش ورودی (Input box) را با چند مورد جدید یکییکی تغییر داده و برنامه را اجرا میکنیم.
در بدنه ایمیل، اطلاعات زیر را هم به شکل متن وارد کن:
نام و نام خانوادگی:
پایه تحصیلی:
نام مدرسه:
نام شهر:
لینک پروفایل کاربری در پایلی (روی دکمه پروفایل من کلیک و لینک را کپی کن):
خروجی برنامه برای مورد P1:
1 2 3 |
case = 'P1' max_total_time = 15 # minute orders = [{'id': 1, 'x': -1590, 'y': 1780, 'profit': 5.7}, {'id': 2, 'x': 1780, 'y': 930, 'profit': 6.8}, {'id': 3, 'x': -1630, 'y': 940, 'profit': 3.0}, {'id': 4, 'x': -1270, 'y': 50, 'profit': 3.6}, {'id': 5, 'x': -290, 'y': 1850, 'profit': 5.4}, {'id': 6, 'x': -1710, 'y': -320, 'profit': 7.6}, {'id': 7, 'x': -1030, 'y': -2220, 'profit': 5.3}, {'id': 8, 'x': -2470, 'y': 1440, 'profit': 5.6}, {'id': 9, 'x': 980, 'y': 1800, 'profit': 8.4}, {'id': 10, 'x': 2490, 'y': 2360, 'profit': 6.3}] |