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

به مسابقه «مسابقه کداستار ۱۴۰۳ - DevOps» خوش آمدی!

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

  • هرگونه استفاده از ابزارهای تولید کد، مثل chatGPT و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکت‌کنندگان مسابقه حذف می‌شوید.
  • هر گونه ارتباط با سایر شرکت‌کنندگان ممنوع است.
  • می‌توانید سوال‌ها و مشکلات خود را از بخش «سوال بپرسید» با ما در میان بگذارید.
  • در این مسابقه تلاش شده تا مهارت شما هم در سطح توسعه دهنده یا همان developer و هم در سطح operation سنجیده شود. برای همین شما در برخی سوالات مجبور به توسعه و پیاده‌سازی هستید.

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

پرونده‌های بین‌المللی


در حل این سوال بجز پیاده‌سازی صحیح، تمیزی، خوانایی و ساختار صحیح کد شما نیز در ارزیابی و دعوت شما به مصاحبه تاثیرگذار خواهد بود.


شرلوک که وقتش پس از حل پرونده‌های اسکاتلند یارد آزاد شده، تصمیم می‌گیرد به اینترپل کمک کرده و پرونده دیگر سازمان‌های جهان را قبول کرده و به آن‌ها نیز کمک کند. او برای ساده‌تر کردن دریافت پرونده‌ها تصمیم می‌گیرد به API این سازمان‌ها متصل شده و پرونده‌ها را از این راه دریافت کند. اما با توجه به اینکه قرار است به چندین سازمان مختلف متصل شود،‌ در این راه با پیچیدگی‌های مختلفی مواجه می‌شود. به او کمک کنید این پیچیدگی‌ها را حل کرده و به این سازمان‌ها کمک کند. برنامه شما در ابتدا باید با دریافت یک فایل YAML با ساختار زیر که با نام config.yaml در پوشه روت سیستم‌عاملی که کد شما در آن اجرا می‌شود قرار گرفته (یعنی باید فایل را در آدرس \config.yaml بخوانید)، آدرس سازمان‌هایی که شرلوک می‌خواهد به آن‌ها متصل شود را دریافت کند:

organizations:
    vice:
        - Address_1: 65
        - Address_2: 35
        - ...
    arson:
        - Address_3: 30
        - Address_4: 25
        - Address_5: 45
        - ...
YAML

زیربرنامه‌ی اول🔗

در این زیر برنامه، برنامه شما باید با گوش کردن روی آدرس 0.0.0.0:80 با دریافت درخواست‌های GET بر روی اندپوینت / درخواست‌ها را به صورت مساوی و برابر بین سازمان‌های مختلف پخش کرده (به آدرس مشخص شده در فایل YAML درخواست GET ارسال کند) و به شرلوک بازگردانی کند.

زیربرنامه‌ی دوم🔗

شرلوک پس از استفاده از برنامه اول متوجه می‌شود که بررسی پرونده‌ها بدون دسته بندی سخت و پیچیده است. به همین علت تصمیم می‌گیرد با اضافه کردن یک پارامتر کوئری به درخواست‌ها، دسته‌بندی آن‌ها را برای دریافت مشخص کند. برنامه شما باید با گوش کردن روی پورت 0.0.0.0:80 با دریافت درخواست‌های GET بر روی اندپوینت / بر اساس کوئری پارامتر type مشخص شده درخواست‌ها را به صورت مساوی بین آدرس‌های نوع پرونده پخش کنید. برای مثال با دریافت درخواست /?type=vice باید درخواست‌ها بین سازمان‌های ۱ و ۲ به صورت مساوی پخش شود. و اگر تایپ درخواست در بین تایپ‌های موجود در فایل config.yamlنبود، یک پیام با کد HTTP 400 و بدنه The Specified Type is Not Correct برگرداند. در صورتی که درخواستی بدون تایپ به API ارسال شد، شما باید مانند مرحله قبل درخواست‌ها را به صورت مساوی بین همه سازمان‌ها پخش کنید.

زیربرنامه‌ی سوم🔗

پس از بررسی‌های بیشتر، شرلوک متوجه می‌شود که بعضی از سازمان‌ها بیشتر از بقیه نیاز به کمک دارند. برای همین تصمیم می‌گیرد که توجه بیشتری را معطوف به این سازمان‌ها کند. در این زیر برنامه باید زیر برنامه قبلی را طوری تغییر دهید که درخواست‌ها را به جای پخش مساوی، به صورت وزن‌دار و با وزن‌های مشخص شده بین سازمان‌ها پخش کند. تضمین می‌شود که وزن سازمان‌ها عددی صحیح و مجموع آن‌ها در هر نوع برابر ۱۰۰ باشد. برای مشخص کردن اینکه آیا نیاز است درخواست‌ها به طور وزن دار یا بدون وزن تقسیم شوند، یک کوئری پارامتر دیگر با نام weighted اضافه می‌شود که مقدار آن برابر true است. برای مثال با دریافت درخواست /?type=homicide&weighted=true باید درخواست‌ها با وزن ۶۵ و ۳۵ بین سازمان‌های ۱ و ۲ پخش شود. برای پخش درخواست‌ها شما باید کوچکترین چرخه‌ای که می‌تواند درخواست‌ها را با این وزن پخش کند را انتخاب و از آن استفاده کنید. یعنی برای این مثال باید در هر ۲۰ درخواستی که به سمت برنامه ارسال می‌شود، ۱۳ درخواست به سازمان ۱ و ۷ درخواست به سازمان ۲ ارسال شود. در این مرحله در صورتی که درخواستی بدون تایپ به API ارسال شد، شما باید مانند مرحله قبل درخواست‌ها را به صورت مساوی بین همه سازمان‌ها پخش کنید. توجه کنید که در صورتی که کوئری پارامتر weighted وجود نداشت یا هر مقدار دیگری بجز true داشت، برنامه شما باید رفتار قبلی خود را داشته باشد.

زیربرنامه چهارم🔗

شرلوک که از تقسیم بار ورن‌دار خوشش آمده، حالا دیگر نمی‌خواهد نوع درخواست‌ها را مشخص کند. در این مرحله شما باید زیربرنامه سوم را طوری تغییر دهید که در صورتی که درخواستی بدون تایپ و با کوئری پارامتر weighted و مقدار true ارسال شد، درخواست‌ها را در بین تمامی سازمان‌ها بدون توجه به نوع آن‌ها به صورت وزن‌دار پخش کند. در این مرحله نیز شما باید کوچکترین چرخه‌ای که می‌تواند درخواست‌ها را با این وزن پخش کند را انتخاب و از آن استفاده کنید.

نحوه ارسال🔗

برای اجرای کد شما از داکر استفاده می‌شود. برای آشنایی با این ابزار از این لینک کمک بگیرید. شما باید با انتخاب یکی از ایمیج‌های استاندارد کوئرا به عنوان Base Image خود، داکرفایلی بنویسید که پروژه شما را بیلد کند. سیستم داوری کوئرا پس از بیلد کردن پروژه شما، فایل تنظیمات را در آن قرار داده و آن را اجرا کرده و تست می‌کند. برای ارسال پروژه، شما باید پوشه‌ای به شکل زیر ساخته و به صورت فایل ZIP به طوری که پوشه solution درون فایل قرار داشته باشد ارسال نمایید.

solution
├── Dockerfile
└── src
Plain text

کد شما و هر چیز دیگری که برای اجرای کد به آن نیاز دارید، باید در پوشه src قرار بگیرد.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.