.لینکهای مفید برای شرکت در مسابقه:
میتوانید سوالهای خود را از بخش "سوال بپرسید" مطرح کنید.
ارزهای دیجیتال قیمتگذای متمرکزی ندارند. دارندگان ارز دیجیتال میتوانند قیمت مورد نظر برای خرید یا فروش را شخصا در قالب یک سفارش مشخص کنند. مثلاً اگر بخواهید ۲۰ واحد ارزی مفروض به نام 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
پر میشود. پس از پیغام اول سفارش جدید برای خرید ثبت شده؛ ولی چون همچنان از حجم هدف کمتر است و تغییری در ارزش حاصل نشده، چیزی در خروجی چاپ نمیشود.
در مرحلهی بعد ۲۵۷ واحد درخواست خرید ثبت شده است. با توجه به قیمتهای پیشنهادی، بهتر است ۱۵۷ واحد را از سفارش (قیمت بیشتر) و ۴۳ واحد از سفارش انتخاب میکنیم که جمعا ۸۸۳۲.۵۶ تومان بهترین قیمت برای فروش محاسبه میشود.
در مرحلهی بعد ۸۰ واحد از مجموع سفارشهای خرید کم میشود و کلا ۱۷۷ واحد باقی میماند. پس فروش ۲۰۰ واحد غیرممکن و مبلغ فروش قبلی نامعتبر است.
در مرحلهی آخر نیز ۱۰۰ واحد از سفارش (قیمت کمتر) و ۱۰۰ واحد از سفارش میخریم که جمعا ۸۸۶۵ تومان پایینترین قیمت فروش محاسبه میشود.