بازی زندگی


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

قواعد بازی زندگی (Game of Life) که توسط جان کانوی طراحی شده است، ساده هستند اما رفتارهای پیچیده‌ای را تولید می‌کنند. این بازی در یک شبکه‌ی دو‌بعدی انجام می‌شود که هر خانه می‌تواند دو حالت داشته باشد: زنده (1) یا مرده (0). تغییر وضعیت هر خانه براساس وضعیت همسایه‌های آن رخ می‌دهد. در ضمن در نظر داشته باشید که دو خانه را همسایه می‌گوییم اگر در یک نقطه یا یک ضلع مشترک باشند.

قواعد بازی🔗

  1. هر سلول زنده با کم‌تر از دو همسایه‌ی زنده می‌میرد (تنهایی).
  2. هر سلول زنده با دو یا سه همسایه‌ی زنده، زنده می‌ماند (ثبات).
  3. هر سلول زنده با بیش از سه همسایه‌ی زنده می‌میرد (ازدحام).
  4. هر سلول مرده با دقیقاً سه همسایه‌ی زنده، زنده می‌شود (تولد).
  5. هر سلول مرده با غیر از سه همسایه‌ی زنده، مرده می‌ماند (مرگ).

برنامه‌ای بنویسید که یک جدول n×nn \times n بگیرد، که هر خانه‌ی آن 0 ‍(مرده) یا 1 (زنده) است. این برنامه باید پس از هر مرحله، وضعیت جدید سلول‌ها را با توجه به قواعد بازی زندگی به روز کند و نتیجه را چاپ کند.

ورودی🔗

در سطر اول ورودی، یک صحیح nn داده می‌شود که اندازه جدول را مشخص می‌کند. 1n1001 \leq n \leq 100

در nn سطر بعدی، یک جدول n×nn \times n شامل ‍0 و 1 که وضعیت اولیه‌‌ی بازی را مشخص می‌کند.

خروجی🔗

در nn سطر مانند ورودی، یک جدول از 0 و 1 چاپ کنید که وضعیت جدید جدول پس از یک مرحله بازی را مشخص کند.

مثال‌ها🔗

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

4
0 1 0 0
0 0 1 0
1 1 1 0
0 0 0 0
Plain text

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

0 0 0 0
1 0 1 0
0 1 1 0
0 1 0 0
Plain text

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

3
0 0 1
0 1 0
0 1 0
Plain text

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

0 0 0
0 1 1
0 0 0
Plain text

قهوه چی می‌‌زنی؟


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

کیوکافه که به تازگی آغاز به کار کرده‌ با مشکلات مالی زیادی روبرو است. ما در این کافه nn مشتری داریم که هرکدام سفارشی دارند. سفارش‌های مشتریان شامل مخلوطی از اسپرسو، شیر با درصدهای مختلف است. برای این‌که حجم نهایی نوشیدنی‌ها ثابت باشد، باقی‌مانده‌ی حجم آن را با آب پر می‌کنیم. برای مثال سفارش یک نفر شامل 30%30\% شیر و 60%60\% اسپرسو است و باقی آن با آب پر می‌شود. یا فرد دیگری سفارش شیر 70%70\% و اسپرسو 15%15\% دارد و در نتیجه 15%15\% آب به آن اضافه می‌کنیم.

افراد، به ترتیب دلخواه ما، به یک صف وارد می‌شوند و تا جایی که مواد اولیه برای تهیه نوشیدنی داریم، سفارش‌ها را تحویل می‌دهیم. هر فردی که سفارش او تحویل داده شود، خوشحال و کسی که به او نوشیدنی نرسد، ناراحت می‌شود.

می‌خواهیم کم‌ترین میزان شیر و قهوه‌ی اولیه (در مجموع) را تهیه کنیم که بیش از نصف مشتریان خوشحال باشند. همچنین اگر چند روش مختلف برای تهیه شیر و قهوه وجود دارد روشی را در نظر بگیرید که مقدار شیر مورد نیاز کمینه باشد.

ورودی🔗

در سطر اول ورودی عدد nn، تعداد مشتریان، داده می‌شود. سپس در nn سطر بعدی در هر سطر دو عدد aa و bb داده می‌شود که به ترتیب نشان‌دهنده درصد شیر و درصد قهوه‌ی مورد نیاز است.

1n1000001 \leq n \leq 100 \, 000

0a,b100,1a+b1000 \leq a, b \leq 100, \quad 1 \leq a + b \leq 100

خروجی🔗

در تنها سطر خروجی، دو عدد xx و yy باید چاپ شوند که به ترتیب نشان‌دهنده میزان شیر اولیه و قهوه اولیه برای تهیه است. اگر چند روش مختلف برای تهیه وجود دارد روشی را در نظر بگیرید که مقدار شیر مورد نیاز کمینه باشد.

مثال‌ها🔗

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

3
10 80
75 20
40 60
Plain text

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

85 100
Plain text

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

2
100 0
0 100
Plain text

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

100 100
Plain text

تیم‌های توسعه سخت‌کوش


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

در یک شرکت nn برنامه‌نویس مشغول به کار هستند. هر کدام از این nn نفر در برخی از زمینه‌های Front-end، Back-end یا Product Mangement تخصص دارد.

تخصص‌های هر شخص با یک رشته شامل حروف B، F و P به صورت مرتب‌شده الفبایی به ما داده شده است.

می‌خواهیم با داشتن این تخصص‌ها، حداکثر تعدادی تیم کامل را تشکیل دهیم. منظور از یک تیم کامل تیمی است که در آن برای هر کدام از این سه زمینه حداقل یک متخصص وجود داشته باشد (ممکن است یک نفر باعث برطرف شدن نیاز چند تخصص باشد). توجه کنید باید در این تیم‌بندی هر شخص در حداکثر یک تیم آمده باشد.

حال از شما می‌خواهیم برنامه‌ای بنویسید که این بیش‌ترین تعداد تیم را محاسبه کند. برای بهتر متوجه شدن خواسته‌ی سوال، توضیحات نمونه‌ها را مطالعه کنید.

ورودی🔗

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

1t100001 \leq t \leq 10 \,000

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

1n1001 \leq n \leq 100

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

خروجی🔗

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

مثال‌ها🔗

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

3
5
B F P BFP BF
4
BF BP FP B
2
B BFP
Plain text

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

2
2
1
Plain text

در نمونه‌ی اول تیم‌بندی می‌تواند به صورت زیر باشد: {B,F,P},{BFP}\{B, F, P\},\quad \{BFP\}

در نمونه‌ی دوم تیم‌بندی می‌تواند به صورت زیر باشد: {B,FP},{BF,BP}\{B, FP\}, \quad \{BF, BP\}

در نمونه‌ی سوم تیم‌بندی می‌تواند به صورت زیر باشد: {BFP}\{BFP\}

اطلاعات کاربران


کد شما باید روی PostgreSQL قابل اجرا باشد.


جزئیات پایگاه‌داده🔗

دیتابیسی که در این سوال به آن می‌پردازیم، متشکل از اطلاعات تعدادی کاربر، شرکت و محصولات شرکت‌ها خواهد بود.

داده‌های اولیه را از این لینک دانلود کنید.

ایمپورت کردن داده‌های اولیه

از نصب بودن PostgreSQL روی سیستم خود اطمینان حاصل کنید.

برای ایمپورت کردن داده‌های اولیه می‌توانید از یکی از دو روش زیر اقدام کنید:

۱- با استفاده CLI دستور زیر را وارد کنید تا داده‌های اولیه ایمپورت شوند:

psql -U postgres -f /path/to/initial.sql
Shell

که در این دستور مسیر فایل initial.sql را به صورت مطلق یا نسبی می‌توانید آدرس‌دهی کنید.

۲- اگر GUI را ترجیح می‌دهید، پس از نصب دیتاگریپ و اتصال به PostgreSQL با یوزر postgres، باید روی دیتاسورس و کانکشن postgres راست‌کلیک کنید و از منوی SQL Scripts، گزینه‌ی Run SQL Script را انتخاب کنید. سپس فایل initial.sql را پیدا و تایید کنید. در انتها روی Run کلیک کنید تا اسکریپت اجرا شود و داده‌ها وارد دیتابیس شوند.

توضیحات جداول دیتاست

جدول address (آدرس‌ها)🔗

این جدول اطلاعات مربوط به آدرس‌ها را ذخیره می‌کند.

نام ستون نوع داده توضیحات
id integer شناسه‌ی یکتا برای آدرس (کلید اصلی)
city varchar(100) شهر
country varchar(100) کشور
country_code varchar(100) کد کشور
zip_code integer کد پستی

جدول company (شرکت‌ها)🔗

این جدول اطلاعات مربوط به شرکت‌ها را ذخیره می‌کند.

نام ستون نوع داده توضیحات
id integer شناسه‌ی یکتا برای شرکت (کلید اصلی)
name varchar(100) نام شرکت
address_id bigint شناسه‌ی آدرس مرتبط (کلید خارجی به جدول address)

جدول product (محصولات)🔗

این جدول اطلاعات مربوط به محصولات را ذخیره می‌کند.

نام ستون نوع داده توضیحات
id integer شناسه‌ی یکتا برای محصول (کلید اصلی)
name varchar(100) نام محصول
category varchar(100) دسته‌بندی محصول
price integer قیمت محصول

جدول product_company (شرکت-محصول)🔗

این جدول یک رابطه‌ی چند به چند بین شرکت‌ها و محصولات ایجاد می‌کند.

نام ستون نوع داده توضیحات
id integer شناسه‌ی یکتا برای رابطه (کلید اصلی)
company_id bigint شناسه‌ی شرکت (کلید خارجی به جدول company)
product_id bigint شناسه‌ی محصول (کلید خارجی به جدول product)

جدول user (کاربران)🔗

این جدول اطلاعات مربوط به کاربران را ذخیره می‌کند.

نام ستون نوع داده توضیحات
id integer شناسه‌ی یکتا برای کاربر (کلید اصلی)
first_name text نام کاربر
last_name text نام خانوادگی کاربر
email text ایمیل کاربر
address_id integer شناسه‌ی آدرس مرتبط (کلید خارجی به جدول address)
company_id integer شناسه‌ی شرکت مرتبط (کلید خارجی به جدول company)
username text نام کاربری

این جداول دارای روابطی هستند که به کمک کلیدهای خارجی بین جداول ایجاد شده‌اند. برای مثال، هر شرکت می‌تواند یک آدرس داشته باشد و هر کاربر نیز می‌تواند یک شرکت و یک آدرس داشته باشد.

مطلوبات🔗

کوئری‌هایی بنویسید که خروجی‌های مطلوب زیر را به‌دست آورد (توجه کنید که هر کوئری نمره‌ای جداگانه دارد و اگر کوئری قسمتی را نتوانستید بنویسید، کوئری‌هایی که حل کردید را بفرستید و کوئری آن قسمت را خالی بگذارید):

  1. آیدی، نام کوچک،‌ فامیلی و نام‌ کاربری تمام کاربرانی که نام کوچک (first_name) آن‌ها با حرف s و فامیلی (last_name) آن‌ها با حرف e تمام می‌شود. کوچک یا بزرگ بودن حروف مهم نیست و رکوردها باید براساس آیدی به صورت صعودی مرتب شوند.
نمونه خروجی کوئری اول

ساختار نتیجه‌ی کوئری و سطر اول آن، به شکل زیر است:

id first_name last_name username
6916 Sarah George patrick32
  1. نام شرکت و مجموعه‌ای از محصولاتی که متعلق به آن شرکت هستند. رکوردها براساس تعداد محصولات شرکت به صورت نزولی مرتب می‌شوند، در صورت برابر بودن تعداد محصولات دو شرکت، ترتیب صعودی آیدی آن‌ها اولویت دارد.
نمونه خروجی کوئری دوم

نمونه خروجی کوئری دوم🔗

ساختار نتیجه‌ی کوئری و سطر اول آن، به شکل زیر است:

company_name product_list
Movies {Hair Care Component,Fitness Equipment,Home Improvement Rig,Truck Item,Furniture Whatchamacallit,Music Widget,Party Gear,Mens Device,Aquarium Instrument,Movie Paraphernalia,Camera Attachment,Skin Care Implement,Makeup Gadget,Party Gadget,Personal Implement,Swimming Rig,Gardening Mechanism,Nutrition Component,Book Machine,Party Mechanism}
  1. در این کوئری باید آدرس شرکتی که کاربر در آن حضور دارد و نام‌ کاربری او را برگردانید. در صورتی که کاربر در شرکتی حضور نداشت یا شرکتی که کاربر در آن حضور دارد، آدرسی نداشت، آدرسی را که در جدول کاربران برای کاربر مشخص‌ شده است، برگردانید. خروجی باید به ترتیب صعودی آیدی کاربران مرتب شده باشد. ترتیب قرار گیری آدرس در ستون user_address به صورت روبرو است: Country, City, Zip Code
نمونه خروجی کوئری سوم

ساختار نتیجه‌ی کوئری و سه سطر اول خروجی به شکل زیر است:

username user_address
markbaker Moenstead, Palestine, 4972
garciaamy Murphyton, French Guiana, 5765
jonesandrea Bauchland, Panama, 8125
  1. در این کوئری از شما می‌خواهیم با جست‌و‌جو در جدول محصولات، یک جدول با فیلدها‌ی زیر‌ را برگردانید:
  • نام، قیمت و کتگوری محصول
  • نام و شهرِ شرکت محصول
  • در انتها یک فیلد که در آن اگر قیمت محصول از میانگین قیمت کل محصولات بیش‌تر بود، expensive و اگر قیمت آن از میانگین کل محصولات کم‌تر بود not expensive قرار می‌گیرد.
  • خروجی باید براساس آیدی محصول مرتب شده باشد.
نمونه خروجی کوئری چهارم

سه سطر ابتدایی خروجی به شکل زیر خواهد بود:

product_name product_price product_category company_name company_city price_comparison
Bedding Attachment 14 Home Shoes Corkeryland not expensive
Dining Contraption 112 Home Grocery Hartford expensive
Truck Kit 27 Automotive Tools North Burley not expensive

فایل نهایی🔗

پس از پیاده‌سازی کوئری‌ها، آن را در فایل queries.sql، وارد کرده و سپس این فایل را آپلود کنید. کد شما باید به صورت زیر باشد:

-- Section1
   Your first query here
-- Section2
   Your second query here
-- Section3
   Your third query here
-- Section4
   Your fourth query here
SQL

سفر در زمان (جاوا)


برای این سوال، نسخه‌ی جاوای شما باید ۱۷ باشد.


اندیس

شما به قبل سال 2000 برگشته‌اید، زمانی که فناوری دیتابیس‌ها به تازگی در حال ظهور است و مهندسان در تلاشند تا راه‌حل‌های نوآورانه‌ای برای جستجوی اطلاعات پیدا کنند. بسیاری از آن‌ها از ایده‌های جدید شگفت‌زده شده و دنیای فناوری اطلاعات در آستانه‌ی تغییرات شگرفی است.

شما که از آینده خبر دارید، تصمیم گرفته‌اید سیستم ابتدایی Full-Text Search را پیاده‌سازی کنید. با این اختراع، شما نه تنها دنیای جستجو را متحول می‌کنید بلکه تاریخ را نیز تحت تأثیر قرار خواهید داد و این اختراع را به نام خود ثبت خواهید کرد.

جزئیات پروژه🔗

پروژه‌ی اولیه را از این لینک دانلود کنید. ساختار فایل‌های پروژه به‌صورت زیر است:

index
├── Document.java
├── Index.java
└── Query.java
Java

شما باید سه کلاس Document، Index و Query را مطابق با مواردی که در ادامه مطرح می‌شود، کامل کنید.

کلاس Document🔗

اولین کلاسی که باید تکمیل کنید کلاس Document است. این کلاس بدنه اصلی داکیومنت‌های شما را برای اندیس مشخص می‌کند و باید شامل ویژگی‌های(property) زیر باشد:

نام نوع
id long
text String
date LocalDate

کلاس Query🔗

این کلاس شامل ویژگی‌های کوئری است که قصد دارید طبق این ویژگی‌ها داکیومنت‌هایی را از درون اندیس بازیابی کنید. این کلاس شامل ویژگی‌های زیر می‌شود:

نام نوع
text String
date LocalDate
endDate LocalDate

کلاس Index🔗

این کلاس اصلی‌ترین کلاسی است که باید پیاده‌سازی کنید. این کلاس شامل داکیومنت‌ها و اندیس‌ها(Index) می‌شود. اندیس‌های این کلاس در واقع اندیس‌های معکوس (Inverted index) به هر داکیومنت هستند.

extensionFromNameIndex.java
public class Index {
    private List<Document> documents = new ArrayList<>();
    private Map<String, Set<Long>> textIndex = new HashMap<>();
    private Map<LocalDate, Set<Long>> dateIndex = new TreeMap<>();

    public Index(String filePath) throws Exception {

    }

    public void indexDocument(Document document) {

    }

    public void saveIndexToFile(String filePath) throws IOException {

    }

    public List<Document> search(Query query) {

    }
}
Java

همان‌طور که می‌بینید، دو اندیس textIndex و dateIndex وجود دارند که نحوه ساخت این اندیس‌ها در ادامه آورده شده است. مطابق این فایل، شما در این کلاس باید یک کانستراکتور و سه متد که در ادامه جزئیات آن‌ها ذکر می‌شود را پیاده‌سازی نمایید:

کانستراکتور Index: این کانستراکتور فایلی که در مسیر ورودی دریافت کرده را به صورت ObjectInputStream خوانده و اندیس‌های گفته شده را باید به درستی مقداردهی کند.

متد saveIndexToFile: این متد یه مسیر را دریافت و کل کلاس Index را با تمام مقادیرش به صورت ObjectOutputStream در این مسیر قرار می‌دهد.

متد indexDocument: این متد یک داکیومنت را دریافت می‌کند و اندیس‌های گفته شده را به صورت زیر ایجاد می‌کند:

  • برای ساخت textIndex باید ویژگی text هر داکیومنت براساس کاراکتر‌های غیر کلمه‌ای (حرف، رقم یا _) شکسته شود و داکیومنت‌ها اندیس شوند.
  • برای ساخت dateIndex هر داکیومنت براساس ویژگی date خودش اندیس می‌شود.

متد search: این متد وظیفه دارد تا داکیومنت‌هایی را براساس کوئری ورودی برگرداند. هر کدام از ویژگی‌های کلاس Query می‌تواند نال باشند ولی در صورتی که هر کدام از مقادیر نال نبود باید داکیومنت‌هایی براساس اولویت زیر برگردانده شوند:

  1. متن
  2. بازه زمانی (این به این معنی است که اگر در کوئری بازه زمانی وارد شده بود، این بازه اولویت بیشتری دارد)
  3. زمان دقیق

مثال🔗

مثال‌هایی به صورت تست نمونه در اختیار شما قرار داده شده است که می‌توانید از آن‌ها کمک بگیرید. به عنوان مثال به مورد زیر دقت کنید:

Index index = new Index();
index.indexDocument(new Document(1, "Quera online coding contests", LocalDate.now()));
index.indexDocument(new Document(2, "Quera for programmers", LocalDate.now().minusDays(4)));
index.indexDocument(new Document(3, "Practice coding skills", LocalDate.now().minusMonths(11)));
Query query = new Query("Quera", null, null);
List<Document> result = index.search(query);
Java

خروجی مثال بالا باید داکیومنت‌ها با آی‌دی 1و 2 را برگرداند.

نکات🔗

  • دو کلاس Document و Query باید شامل کانستراکتوری با همه ویژگی‌ها باشند.
  • همه ویژگی‌های دو کلاس Document و Query باید دارای getter متد با نام پیش‌فرض در جاوا باشند.
  • تضمین می‌شود داکیومنت با آی‌دی تکراری وارد نخواهد شد.
  • دقت کنید که ساختار ابتدایی کلاس‌ها را تغییر ندهید.
  • دقت کنید که کلاس‌های شما در صورت لزوم باید قابلیت سریالایز و دسریالایز شدن داشته باشند.

آن‌چه باید آپلود کنید🔗

پس از پیاده‌سازی موارد خواسته‌شده، فقط این سه کلاس را زیپ کرده و آپلود کنید.

[your-solution-file].zip
├── Document.java
├── Index.java
└── Query.java
Java

پردازنده


برای این سوال، نسخه‌ی جاوای شما باید ۱۷ باشد.


پردازنده

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

جزئیات پروژه🔗

پروژه‌ی اولیه را از این لینک دانلود کنید. ساختار فایل‌های پروژه به‌صورت زیر است:

index
├── Core.java
├── Processor.java
├── SelectStrategy.java
├── Task.java
└── Type.java
Java

همان‌طور که در ساختار فایل‌های اولیه مشاهده می‌کنید، شما با چندین کلاس مرتبط با پردازنده سر و کار دارید. کلاس Task دقیقا تسک‌هایی است که به پردازنده شما وارد می‌شود و شما باید آن‌ها را مدیریت کنید. هر تسک نوعی دارد که توسط enum با نام Type مشخص می‌شود. از سوی دیگر، کلاس Core، هر هسته از پردازنده شما را مشخص می‌کند که می‌تواند فقط انواع خاصی از تسک‌ها را هندل کند که با ویژگی(property) types مشخص می‌شود. مقدار لود یا همان تعداد تسکی که هر هسته در حال پردازش دارد نیز با currentLoad مشخص می‌شود.

در این ساختار، رابط (Interface) SelectStrategy نیز به چشم می‌خورد که استراتژی‌های مختلف انتخاب هسته پردازنده برای انجام تسک را مشخص می‌کند.

شما باید کلاس Processor را به همراه سه کلاس دیگر، مطابق با جزئیاتی که در ادامه ذکر می‌شود، کامل و ارسال کنید.

کلاس Processor🔗

اولین کلاسی که باید تکمیل کنید کلاس Processor است. این کلاس اطلاعات هسته‌ها را نگه می‌دارد و وظیفه مدیریت تسک‌ها را برعهده دارد. در اولین گام شما باید سه ویژگی زیر را ایجاد کنید:

نام نوع
cores List<Core>
tasks Queue<Task>
selectStrategy SelectStrategy

همه ویژگی‌های این کلاس باید دارای متد‌های getter و setter با نام پیش‌فرض در جاوا باشد. علاوه بر این متد‌ها، شما باید متد‌های زیر را نیز در این کلاس ایجاد کنید:

متد addCore: این متد، هسته ورودی را به لیست هسته‌های این پردازنده اضافه می‌کند.

متد addTask: این متد، تسک ورودی را به صف تسک‌ها اضافه می‌کند.

توجه کنید که در این کلاس، به محض اضافه شدن تسک به صف تسک‌ها، فرایند انتخاب یک هسته آغاز و تسک برای انجام به یک هسته داده می‌شود.

فرایند انتخاب یک هسته از پردازنده🔗

همان‌طور که گفته شد، کلاس Processor دارای ویژگی با نام selectStrategy است که نگهدارنده استراتژی انتخاب یک هسته است. شما باید سه استراتژی را که در ادامه ذکر می‌شود را پیاده‌سازی کنید:

استراتژی RandomStrategy: این استراتژی، یک هسته را به صورت رندوم انتخاب و برمی‌گرداند.

استراتژی LeastLoadStrategy: در این استراتژی، هسته‌ای که کمترین لود را دارد انتخاب و برگردانده می‌شود.

استراتژی RoundRobinStrategy: این استراتژی، با استفاده از الگوریتم روند رابین (Round Robin) یک هسته را انتخاب و برمی‌گرداند. در این استراتژی تسک‌ها برای اجرا، به صورت چرخشی به هسته‌های پردازنده داده می‌شود.

دقت کنید که هر هسته فقط می‌تواند انواع خاصی از تسک‌ها را پردازش کند.

مثال🔗

مثال‌هایی به صورت تست نمونه در اختیار شما قرار داده شده است که می‌توانید از آن‌ها کمک بگیرید. به عنوان مثال به مورد زیر دقت کنید:

Processor processor = new Processor();
processor.addCore(new Core(1, List.of(Type.IO, Type.NETWORK)));
processor.addCore(new Core(2, List.of(Type.IO)));
processor.addCore(new Core(3, List.of(Type.STORAGE)));
processor.setSelectStrategy(new LeastLoadStrategy());
processor.addTask(new Task(1, Type.IO));
Java

در این نمونه تسک با آی‌دی 1 به اولین هسته یعنی هسته با آی‌دی 1داده می‌شود.

نکات🔗

  • شما فقط مجاز به اعمال تغییرات در کلاس‌های Core و Processor به همراه سه کلاسی که باید ایجاد کنید، هستید.
  • حتما باید برای پیاده‌سازی استراتژی‌های انتخاب از اینترفیس SelectStrategy استفاده کنید.
  • دقت کنید که ساختار ابتدایی کلاس‌ها را تغییر ندهید.

آن‌چه باید آپلود کنید🔗

پس از پیاده‌سازی موارد خواسته‌شده، فقط فایل همه این کلاس‌ها را زیپ کرده و آپلود کنید.