محمد میخواهد توانایی ریاضی رامین را به چالش بکشد. او یک مقدار شروع و پایان را ارائه میدهد که بازهای از اعداد صحیح را شامل میشود (شامل جمله نقاط آغازی و پایانی). رامین باید تعداد اعداد مربع کامل را در آن بازه مشخص کند.
نکته: عدد مربع کامل یک عدد صحیح است که برابر با مربع یک عدد صحیح میباشد.
مثال:
در اینجا ۳ عدد مربع کامل در بازهی وجود دارد (۲۵، ۳۶ و ۴۹). بنابراین پاسخ برابر ۳ است.
از آنجا که رامین حوصلهی محاسبه ندارد، از شما میخواهد تا به او کمک کنید و به پرسش آن پاسخ دهید.
ورودی شامل دو خط است. در خط اول آمده که نشاندهندهی تعداد پرسشهایی است که رامین از شما میکند و در هر یک از خط بعدی، دو عدد آمده است که به ترتیب نشاندهندهی و است.
خروجی برنامهی شما باید شامل خط باشد که در خط اُم باید پاسخ مسئله برای اُمین پرسش را چاپ کنید.
در پرسش اول، در بازهی تنها اعداد ۴ و ۹ مربع کامل هستند. و در پرسش دوم در بازهی تنها اعداد ۲۵، ۳۶ و ۴۹ مربع کامل هستند.
یکی از مشتریان ما در فروشگاه زنجیرهای خود یک دستگاه شارژ خودرو برقی نصب و راه اندازی کرده است همچنین نیاز دارد تا روشن و یا خاموش بودن این دستگاه را برنامه ریزی کند و دستگاه تنها زمانی به ارائه سرویس بپردازد که روشن باشد.
دستگاه او در سه سطح دسترسی مختلف قابل برنامه ریزی است:
برای مثال ممکن است که Tenant یک برنامه برای ساعات روشن بودن به دستگاه بدهد و دکانی (Store) که دستگاه در آن قرار دارد یک برنامه دیگر و همچنین می توان یک برنامه اختصاصی به خود دستگاه (Station) داد. برنامهها میتوانند با یکدیگر اشتراک (تداخل) داشته باشند و در صورت تداخل اولویت با سطح دسترسی با شمارهی بیشتر است.
در حالت پیشفرض دستگاه برنامهی هفتگی دارد که طبق آن روشن و خاموش میشود، این برنامه در ورودی به شما داده میشود. اما مشتری ما که این برایش کافی نیست ساعاتی را به عنوان استثنا تعریف میکند که در آن ساعات دستگاه طبق آن کار کند.
حال او از شما میخواهد که پس از دریافت برنامهها به ازای هر یک از زمان داده شده تشخیص دهید که آیا دستگاه روشن است یا خاموش.
قوانین:
خط اول به ترتیب شامل اعداد ، و است. سپس در سطر بعدی برنامهی هفتگی میآید، که در هر خط آن ابتدا روز آن دستور در هفته و سپس دو زمان شروع و پایان دستور میآید. برای مثال:
به این معنی است که در روز Monday هر هفته دستگاه از ساعت ۸ تا ۱۲ روشن است.
8:7
میآید.سپس در خط بعدی استثناها میآیند، که در هر خط آن ابتدا سطح دسترسی استثنا، سپس دو زمان شروع و پایان بازه استثنا و در آخر دستور مورد نظر میآیند. برای مثال:
به این معنی است که دستگاه در بازه زمانی مشخص شده خاموش میباشد.
تضمین میشود دستور مورد نظر یکی از closed
یا open
است.
در هر یک از خط بعدی نیز یک زمان خواسته شده توسط مشتری آمده است.
در خط خروجی به ازای هر زمان تشخیص دهید آیا دستگاه در این زمان روشن است یا خاموش، اگر روشن بود عبارت true
و در غیر این صورت false
چاپ کنید.
یک شرکت بینالمللی دارای کارمند در کشورهای مختلف دنیاست. هر یک از این افراد دارای منطقه زمانی خاص خود و نیز ساعات کاری اختصاصی در منطقه زمانی خود هستند.
کارکنان این شرکت می بایست در ساعات کاریشان در جلسه کاری شرکت کنند. با توجه به ساعات کاری هر فرد در روز داده شده اولین زمان مناسبی که تمامی افراد جلسه بتوانند در آن حضور داشته باشند جلسه برگزار میشود برای هر جلسه زمان برگزاری آن را بیابید و آن را بر اساس ناحیه زمانی UTC اعلام کنید. در غیر اینصورت عبارت N/A را برای جلسات غیر قابل برگزاری چاپ کنید.
قوانین برگزاری جلسات:
در خط اول ورودی به ترتیب دو عدد و آمده که نشان دهندهی تعداد کارمندان شرکت و تعداد جلسات است. سپس در خط بعدی برای هر کارمند نام او، اختلاف منطقه زمانی او با UTC و شروع و پایان ساعت کاریش آمده. تضمین میشود نام کارمندان شرکت متمایز است.
در خط بعدی، برای هر جلسه دو خط ورودی داده شده، در خط اول آن به ترتیب اعداد و آمدهاند که نشان دهندهی تعداد افراد در جلسه و مدت زمان جلسه به دقیقه میباشد و در خط بعد از آن رشتهی جدا شده با فاصله آمده که نام افراد شرکت کننده در جلسه است.
برای جزئیات بیشتر به مثالها توجه کنید.
برای هر جلسه اگر امکان برگزاری آن وجود داشت زمان شروع جلسه بر اساس ناحیه زمانی UTC و در غیر این صورت عبارت N/A
را چاپ کنید.
به تازگی به شرکتی فعال در حوزه بورس پیوستید! تیم معاملات نزد شما میآیند و از شما میخواهند باری از دوش این تیم بردارید. بعد از مدتی جستوجو و جلسات متوجه میشوید یکی از بیشترین معاملاتی که انجام میدهند، خرید سهم بر اساس قیاس «میانگین متحرک کوتاه و بلند» است.
میانگین متحرک کوتاه که در مقیاسهای بزرگ معمولاً ۵۰ روزه است، یکی از قابل اطمینانترین نشانگرهای فنی است که معمولا سرمایهگذاران برای تشخیص رشد و پیشرفت سهام به آن رجوع میکنند. این میانگین، ضعف یا قدرت یک سهام بسته به قیمت فعلیاش را نشان میدهد.
میانگین متحرک بلند که در مقیاسهای بزرگ معمولاً ۲۰۰ روزه است، معمولا نمایانگر حرکت سهام در درازمدت (۴۰ هفته) است که میتواند رو به بالا یا روبه پایین باشد، همچنین از این میانگین میتوان نقاط دارای حمایت یا مقاومت را تشخیص داد.
شما تصمیم میگیرید این موضوع را خودکار کنید. گروه معاملات از شما میخواهد این دستورات را دنبال کنید و سپس گزارش عملکرد روبات خرید و فروش خودکار خود را (سود و زیان) اعلام کنید.
قوانین کلی:
قوانین جزئی:
نکته:
میانگین متحرک ساده هر روز از چندین فرمول بدست میآید که با یکدیگر تفاوت دارند، اما در این سوال ما از دو روش آن را حساب میکنیم:
در پنج خط اول ورودی، به ترتیب اعداد و و و و آمده است. در خط ششم عدد آمده است که نشاندهندهی تعداد روزهای پیشرو است و در خط اُم پس از آن نیز به ترتیب مقادیر برای روز اُم آمده است.
توضیحات ورودی:
نماد | توضیحات |
---|---|
O | قیمت سهم در زمانی که بازار باز شده است. |
H | بالاترین قیمت معامله انجام شده در روز |
L | پایینترین قیمت معامله انجام شده در روز |
C | قیمت آخرین معامله انجام شده روز |
T | میزان درصد سودی که به محض رسیدن به آن باید از بازار خارج شوید |
S | میزان درصد ضرری که به محض رسیدن به آن باید از بازار خارج شوید |
SMA | تعداد روزهایی است که باید با آن میانگین متحرک کوتاه را محاسبه کنید |
LMA | تعداد روزهایی است که باید با آن میانگین متحرک بلند را محاسبه کنید |
در دو خط خروجی، دو روش را چاپ کنید.
در پارامتر اول هر خط، کد خروجی را مطابق جدول زیر وارد کنید و سپس بعد از کاراکتر فاصله مبلغ سود یا زیان را وارد کنید.
جدول کدها:
کد | معنی |
---|---|
A | خرید و فروش به روش تا انتها بدون توقف سود و ضرر انجام شده است. |
AT | روبات در روش با دریافت سود متوقف شده است. |
AS | روبات در روش با توقف ضرر متوقف شده است. |
B | خرید و فروش به روش H تا انتها بدون توقف سود و ضرر انجام شده است. |
BT | روبات در روش H با دریافت سود متوقف شده است. |
BS | روبات در روش H با توقف ضرر متوقف شده است. |
برای نمایش اعداد خروجی، دو عدد اعشاری شامل میزان سود یا ضرر با دو رقم اعشار نشان دهید. برای اعداد صحیح هم از دو رقم برای نمایش اعشار استفاده کنید. همچنین برای نمایش ضرر از عدد منفی استفاده کنید.
در مثال داده شده، ربات در الگوریتمهای گفته شده به صورت زیر عمل میکند:
روش : در روز ۶ با قیمت میخرد و در روز ۷ به علت ضرر بیش از درصد با قیمت میفروشد و از بازار خارج میشود.
روش : در روز ۶ با قیمت ۱۳ میخرد و در روز ۷ با قیمت ۱۷ به علت سود بیش از درصد میفروشد.
ارزهای دیجیتال قیمتگذای متمرکزی ندارند. دارندگان ارز دیجیتال میتوانند قیمت مورد نظر برای خرید یا فروش را شخصا در قالب یک سفارش مشخص کنند. مثلاً اگر بخواهید ۲۰ واحد ارزی مفروض به نام FirstCoin را به قیمت ۵۰ تومان بخرید، پیغام شما به این شکل خواهد بود ( شناسهی یکتای سفارش خرید شماست که توسط سیستم تولید میشود):
ADD a buy FirstCoin 50.00 20
اگر زمانی قصد فروش مقداری از موجودی ارز دیجیتال خود را داشته باشد، به طور مشابه مقدار و قیمت پیشنهادی خود را به دیگران اعلام میکنید. مثلا برای فروش ۵۰ واحد FirstCoin به قسمت ۴۵ تومان، این پیغام را خواهید فرستاد ( شناسهی یکتای سفارش فروش شماست که توسط سیستم تولید میشود):
ADD b sell FirstCoin 45.00 50
موجودی سفارشها ثابت نمیماند و در صورت لغو سفارش یا انجام معامله ممکن است مقداری از مبلغ آن کم شود. مثلاً در صورت فروش ۳۰ واحد از سفارش پیغام زیر توسط سیستم مخابره خواهد شد:
REM b 30
مجموعه تمامی پیغامهای مخابره شده از این دست را اصطلاحا دفتر سفارشها(Order Book) میگویند.
میخواهیم برنامهای به نام تعیین قیمت بنویسیم که با دریافت دفتر سفارشهای چند ارز دیجیتال، «بهترین قیمت» خرید و فروش برای حجم مشخص و ثابتی از هر ارز را در هر لحظه محاسبه کند. بدیهی است که برای خرید مایلیم کمترین پول ممکن را پرداخت کنیم و هنگام فروش بیشترین پول ممکن را دریافت کنیم. معیار ما برای تعیین «بهترین قیمت» نیز همین است. برنامه مورد نظر، عددی را به عنوان حجم هدف (تعداد واحدهای ارز برای خرید یا فروش) دریافت میکند و سپس پیغامهای دفتر سفارشها را خط به خط خوانده و به محض این که تغییری در بهترین قیمت خرید یا فروش هر ارز در حجم مورد نظر ایجاد شود، آن را در خروجی اعلام میکند.
توجه کنید که سفارشهای یک ارز، کاملاً مستقل از سایر ارزها است. بنابراین تبدیل ارز در دفتر سفارشها معنایی ندارد و قیمتهای اعلام شده در خروجی برنامه صرفاً بر اساس سفارشهای ثبت شده برای یک ارز واحد محاسبه میشوند.
Target CoinCount
coin_1 coin_2 … coin_N
time ADD id type coin price size
نماد | معنی |
---|---|
time | زمان ثبت سفارش به صورت یک عدد |
ADD | یک رشتهی حرف ثابت که مشخص کننده پیغام ثبت سفارش است |
id | یک رشتهی حرفی که شناسهی یکتای سفارش مورد نظر است |
type | یک رشتهی حرفی که نوع سفارش را مشخص میکند و دو مقدار دارد: sell (فروش) و buy (فروش) |
coin | نام یک ارز دیجیتال به صورت یک رشته حرفی (بدون فاصله) |
price | قیمت پیشنهادی برای هر واحد ارز |
size | تعداد واحد ارز موجود در سفارش |
time REM id size
نماد | معنی |
---|---|
time | زمان ثبت سفارش به صورت یک عدد |
REM | یک رشتهی حرف ثابت که مشخص کننده پیغام تغییر موجودی است |
id | شناسهی یکتای سفارش مورد نظر |
size | تعداد واحد کاهش یافته از موجودی سفارش |
خروجی برنامه عبارت است از پیغامهایی به شکل زیر که خط به خط در خروجی چاپ خواهند شد:
time type coin total_price
نماد | معنی |
---|---|
time | زمان تعیین قیمت که باید مساوی با فيلد time در آخرین پیغام دریافت شده باشد |
type | یک رشتهی حرف که نوع معاملهی مربوطه را مشخص میکند و میتواند دو مقدار داشته باشد: buy و sell |
coin | نام ارز دیجیتال |
total_price | بهترین قیمت محاسبه شده برای خرید یا فروش |
نکات تکمیلی:
NA
پر میشود. پس از پیغام اول سفارش جدید برای خرید ثبت شده؛ ولی چون همچنان از حجم هدف کمتر است و تغییری در ارزش حاصل نشده، چیزی در خروجی چاپ نمیشود.
در مرحلهی بعد ۲۵۷ واحد درخواست خرید ثبت شده است. با توجه به قیمتهای پیشنهادی، بهتر است ۱۵۷ واحد را از سفارش (قیمت بیشتر) و ۴۳ واحد از سفارش انتخاب میکنیم که جمعا ۸۸۳۲.۵۶ تومان بهترین قیمت برای فروش محاسبه میشود.
در مرحلهی بعد ۸۰ واحد از مجموع سفارشهای خرید کم میشود و کلا ۱۷۷ واحد باقی میماند. پس فروش ۲۰۰ واحد غیرممکن و مبلغ فروش قبلی نامعتبر است.
در مرحلهی آخر نیز ۱۰۰ واحد از سفارش (قیمت کمتر) و ۱۰۰ واحد از سفارش میخریم که جمعا ۸۸۶۵ تومان پایینترین قیمت فروش محاسبه میشود.