محدودیت زمان: ۰.۵ ثانیه
محدودیت حافظه: ۱ مگابایت
عدد فرد n
در ورودی داده میشود و شما باید یک لوزی توخالی با استفاده از کاراکتر ستاره *
و با قطر n
در خروجی چاپ کنید.
فقط یک فایل java. محتوی برنامهتان را ارسال کنید. توجه داشته باشید که برنامه شما در هیچ بسته (package)ای قرار نداشته باشد.
یکی از زبانهای نشانهگذاری و قالببندی متن، markdown است.
یاد گرفتن این زبان ساده است و استفاده از آن سادهتر! حتی با یک ادیتور متنی ساده هم میتوان متنی در این قالب نوشت.
همچنین جالب است بدانید متن این سوال نیز در قالب markdown نوشته شده که در نهایت شما آن را به شکل فعلی میبینید.
برای آشنایی بیشتر با مارکداون میتوانید از این سایت استفاده کنید.
برخی امکانات مارکداون به شرح زیر است:
in yek code ast
حالا برای اینکه با قالب مارکداون آشنا شوید، قسمتی از متن همین سوال را در زیر میبینیم:
در این سوال از شما میخواهیم که یک فایل متنی از ورودی بگیرید و فقط متنهای آن را جدا کنید. به عنوان مثال، برای ورودی بالا چنین چیزی مورد نیاز است:
MarkdownSimpler.java
را باز کرده و تکمیل کنید. java.io.File
است که به یک فایل متنی اشاره دارد. محتوای آن فایل متنی، همان ورودی ما در قالب markdown است. MarkdownSimpler.java
را آپلود کنید. در اسم فایل و کلاس و متدهای موجود هیچ تغییری ندهید.کنترل تلویزیون احمد پس از قطعیهای پیدرپی برق ناگهان از کار افتاد و هیچ دکمهای کار نمیکرد.
سالها پیش زمانی که به تازگی برنامهنویسی جاوا را یاد گرفته بود، کنترل تلویزونش را شخصیسازی کرده بود و برایش برنامهای نوشته بود. حالا تصمیم گرفت به کد قدیمیاش نگاهی بیندازد تا شاید بتواند مشکلش را حل کند.
اما در کمال تعجب دید کل برنامهای که نوشته بوده از حافظه پاک شده است و تنها تستکیسهایی که با استفاده از JUnit نوشته بوده باقی مانده است.
حالا احمد چارهای ندارد جز اینکه تستها را بخواند و از روی آنها کد اصلی را بازنویسی کند.
به او کمک کنید کلاسهای مربوط به کنترل تلویزیون را به گونهای ایجاد و پیادهسازی کند که همه تستها پاس شوند و کنترل بتواند مثل قبل کار کند.
یک فایل زیپ آپلود کنید که در آن بسته ir.mci.tv به صورت زیر وجود داشته باشد:
به صورتی که وقتی فایل زیپ را باز میکنیم، دقیقا شاخه ir را ببینیم که درون آن شاخه mci و درون آن نیز شاخه tv قرار دارد. در داخل tv فایلهایی که ایجاد و پیادهسازی کردهاید باید قرار داشته باشد.
محدودیت زمان: ۱ ثانیه
محدودیت حافظه: ۲۵۶ مگابایت
سارا یک انسان کاملا اجتماعی است و همین موضوع باعث شده است که دایره دوستان وسیعی داشته باشد. اما زیاد بودن دوستان، دردسرهایی را نیز برای او به وجود آورده است. مثلا هر بار که میخواهد در لیست مخاطبین تلفن همراه خود به دنبال شخصی بگردد و اسمی را جستجو کند، مجبور است زمان زیادی را صرف پیدا کردن فرد مورد نظرش کند. او راه حلی برای این مشکل یافته است. راه حل او به این شکل است که مخاطبین را دستهبندی کند.
به نظر او، برای اینکه دو نفر در یک دسته قرار بگیرند باید نام یا نام خانوادگی (و یا هر دو) یکسان داشته باشند. برای درک بهتر این موضوع توضیحات نمونهها را مطالعه کنید.
سارا برنامهنویسی بلد نیست، به همین دلیل این وظیفه را به شما محول کرده است تا با دریافت لیست مخاطبین او تعداد دسته ها و همچنین اندازه بزرگترین دسته را به او نشان دهید.
ورودی شامل خطوط زیادی است که در هر خط مشخصات یک مخاطب با ترتیب: نام، نام خانوادگی و شماره تلفن داده میشود. در آخرین خط کلمه end میآید که نشاندهنده پایان لیست مخاطبین است.
خروجی شامل دو خط است که در خط اول تعداد دستهها و در خط دوم اندازه بزرگترین دسته مشخص میشود.
با توجه به ورودی، چهار دسته خواهیم داشت:
هیچ دو نفری نام یا نام خانوادگی یکسان ندارند و هر فرد در یک دسته مجزا قرار میگیرد.
همه افراد در یک دسته قرار میگیرند و در نهایت تنها یک دسته با اندازه 8 خواهیم داشت.
توجه کنید که همه افرادی که در یک دسته قرار میگیرند، لزوما دو به دو نام یا نام خانوادگی یکسان ندارند. مثلا Anny Ancell و Bert Bradly نام و نام خانوادگی یکسان ندارند اما با Bert Ancell شباهت دارند و به همین دلیل همگی در یک دسته قرار میگیرند.
کافی است یک فایل .java شامل پیادهسازی خود را بدون نیاز به زیپ کردن، ارسال کنید.
در این سوال، به پردازش درخت به صورت سطح به سطح و همراه با موازیکاری میپردازیم.
فایل Source را دانلود کرده و محتوای آن را ببینید. شما باید متد solve
از کلاس Parallelism
را مطابق با توضیحات زیر پیادهسازی کنید.
شما باید پردازش این درخت را از پایینترین سطح (برگها) شروع کرده و به بالاترین سطح که ریشه درخت در آن قرار دارد برسید. هر Node درخت، دارای سه ویژگی اندیس و پدر و تابع است.
پردازش درخت باید به این صورت باشد که:
func
شان اجرا شود)با اجرای متد main
از کلاس Main
خروجی زیر یکی خروجیهای صحیح محتمل است.
درختی که در این مثال داده شده است، چنین ساختاری دارد:
توجه داشته باشید که تمامی D
ها قبل از F
ها و تمامی F
ها قبل از G
ها و تمامی G
ها قبل از H
ها چاپ شدهاند. همچنین هر نود توسط ترد همنام با اندیسش پردازش شده است.
یک فایل زیپ آپلود کنید که در آن بسته ir.mci.parallel به صورت زیر وجود داشته باشد:
به صورتی که وقتی فایل زیپ را باز میکنیم، دقیقا شاخه ir را ببینیم که درون آن شاخه mci و درون آن نیز شاخه parallel قرار دارد. در داخل parallel فایل Parallelism.java باید قرار داشته باشد.
شما قرار است بخشی از بازی چشمک را پیادهسازی کنید. در این نسخه از بازی قوانین زیر وجود دارد.
فایل Source را دانلود کرده، وارد بسته ir.mci.wink
شده و محتوای آن را ببینید:
deal()
دارد که به هر یک از بازیکنها، یک کارت تخصیص میدهد که تنها یکی از آنها علامت چشمک دارد. این واسط توسط ما پیادهسازی میشود.state()
دارد که وضعیت فعلی بازیکن را در قالب یک enum (از نوع PlayerState.State) بر میگرداند.شکل زیر، نمودار وضعیت بازیکن را نشان میدهد. با فراخوانی هر یک از متدها روی شیِ بازیکن، انتقال وضعیت انجام میشود. وضعیتها در واقع همان مقادیر PlayerState.State هستند که توسط متد state()
از بازیکن قابل دریافت هستند.
در بسته ir.mci.wink.example
، یک پیادهسازی ساده از Player و Dealer وجود دارد که در متد main
از کلاس Main استفاده شده است. با پیادهسازی صحیح WinkGameImpl و با اجرای برنامه، خروجی زیر به دست میآید:
باید توجه داشت که در تستها از پیادهسازی پیشرفتهترِ Player استفاده میشود. در این پیادهسازی در فراخوانی متدها، وضعیت فعلی بازیکن چک میشود و در صورتی که طبق نمودار وضعیت نبود، خطای IllegalStateException
پرتاب میشود. این نکته در مورد پیادهسازی Dealer نیز صدق میکند.
join(Player)
: بازیکن ورودی را به بازی ملحق میکند و متد onJoin
این بازیکن را فراخوانی میکند.prepare()
: پس از فراخوانی این متد، دیگر بازیکنی نمیتواند به بازی ملحق شود. همچنین متد onPrepare
برای تمامی بازیکنها فراخوانی میشود.dealing()
: در این متد، به کمک شیِ dealer
، کارتها بین بازیکنها توزیع میشود و بازیکنِ چشمکزن را بر میگرداند. برای تحویل کارت به هر بازیکن، باید متد onDeal(Card)
وی فراخوانی شود.playRound()
: یک مرحله از بازی را انجام میدهد و در صورتی که برنده بازی مشخص شود، وی را برمیگرداند:Playing
)، متد playRound(List<Player>)
فراخوانی شود. ورودیِ این متد باید بازیکنهای در حال بازی (به جز خود بازیکن) باشد.detectedWinker()
از بازیکنها (به غیر از چشمکزن)، بازیکن چشمکزن را (در صورت تشخیص) برمیگرداند؛ اگر تشخیص بازیکنی درست بود: متد onWin()
روی وی، متد onDetected()
روی چشمکزن و متد onFinished()
روی سایر بازیکنها فراخوانی میشود. بازیکن تشخیصدهنده به عنوان برنده برگردانده میشود. اگر تشخیص بازیکن اشتباه بود: متد onWrongDetection()
روی وی فراخوانی میشود.winkedPlayers()
از بازیکنِ چشمکزن، بازیکنهایی که چشمک خوردهاند برگردانده میشود و روی این بازیکنها، متد onWink()
صدا زده میشود.onWin()
روی آن صدا زده میشود و به عنوان برنده برگردانده میشود. همچنین روی بازیکن باقیمانده نیز متد onFinished()
صدا زده میشود.Optional
دارند هیچگاه نباید null
برگردانند، بلکه باید یک Optional
خالی برگردانند.Eliminated
) نمیتوان متد onWink
را صدا زد.یک فایل زیپ آپلود کنید که در آن بسته ir.mci.wink.impl به صورت زیر وجود داشته باشد:
به صورتی که وقتی فایل زیپ را باز میکنیم، دقیقا شاخه ir را ببینیم که درون آن شاخه mci و درون آن شاخه wink و درون آن نیز شاخه impl قرار دارد. در داخل شاخه impl، فقط و فقط فایل WinkGameImpl.java وجود دارد.