شرکت همکاران سیستم قصد دارد برنامههای خود را از.NET
به Golang
تغییر دهد. به همین منظور اخیراً با سندی مواجه شده که پر از رشتههای .NET
است و باید همهی آنها را به Golang
تغییر دهند. برای همین از شما میخواهند برنامهای بنویسید که این کار را انجام دهد.
به طور دقیقتر، رشتهای از کاراکترها به شما داده میشود و باید تمام زیررشتههای متوالی .NET
در آن را به Golang
تغییر دهید. برای درک بهتر به مثالها توجه کنید.
در تنها سطر ورودی، رشتهی شامل حروف بزرگ و کوچک انگلیسی و کاراکترهای .
، ?
و !
است.
در یک سطر، رشتهی تغییر یافته را چاپ کنید.
توجه کنید که سیستم داوری به بزرگ و کوچک بودن حروف حساس است.
رشتهی WeDevelope.NETHere!
دارای یک زیرشتهی .NET
و باید آن را به Golang
تغییر دهیم، بنابراین خروجی به صورت WeDevelopeGolangHere!
است.
رشتهی WeLove.NETandWeUse.NETinHamkaran.
دارای دو زیرشتهی .NET
و باید آنها را به Golang
تغییر دهیم، بنابراین خروجی به صورت WeLoveGolangandWeUseGolanginHamkaran.
است.
رشتهی .NET.ne.net.NeTNET.NNET
دارای یک زیرشتهی .NET
و باید آن را به Golang
تغییر دهیم، بنابراین خروجی به صورت Golang.ne.net.NeTNET.NNET
است.
نیازی نیست چک کنید شرایط گفته شده در ورودی برقرار است یا نه. توضیحات محدودیتها فقط برای آگاهی شما دربارهی تستها و محدودیتهای مسئله است و قطعاً در ورودیهای داده شده به برنامهی شما رعایت میشوند. پس نیازی نیست بنویسید:
شما میتوانید لابهلای دریافت ورودی، خروجی دهید. پس نیازی نیست ابتدا همهی ورودیها را دریافت کنید و در نهایت همهی خروجیها را چاپ کنید. مخصوصاً برای سوالاتی که باید به چندین سوال پاسخ دهید، میتوانید دو قسمت ورودی و خروجی را کاملاً مستقل در نظر بگیرید و مطمئن باشید تداخلی پیش نمیآید.
لطفاً از چاپ کردن موارد اضافه مثل please enter a number
برای دریافت ورودی پرهیز کنید. برای مثال در زبان پایتون نباید بنویسید:
برای زبانهایی مثل جاوا نباید در بالای کد شما آدرس پکیج داده شود. برای مثال در بالای کد خود نباید بنویسید:
Scanner
برای دریافت ورودی
در زبان جاوا، باید فقط یک شئ از جنس Scanner
تعریف کنید و همهی ورودیها را با آن دریافت کنید.
برای آشنایی بیشتر برای نحوهی دریافت ورودی و چاپ کردن خروجی این لینک را مطالعه کنید.
نقشهی کشور فانو مانند شکل زیر است. این کشور از ۷ شهر با شمارههای ۱ تا ۷ تشکیل شده است. بین این شهرها تعدادی جاده مستقیم و دو طرفه وجود دارد.
در یک روز متوجه میشویم که دزدی در شهر وجود دارد و پلیس این کشور در شهر مشغول خدمت رسانی است. بازی دزد و پلیس شروع میشود.
در این بازی، روزها پلیس و شبها دزد حرکت میکند. هر کس در زمان حرکت، یکی از جادههای خارج شده از شهر خودش را انتخاب میکند و به شهر مجاور میرود.
از صبح روز اول این بازی شروع میشود و این کار تا زمانی که پلیس به شهری که دزد در آن قرار دارد برسد و او را دستگیر کند، ادامه پیدا میکند.
فرض کنید هر دوی دزد و پلیس هوشمندانهترین حرکت ممکن را انجام میدهند. یعنی دزد به شهری میرود که در دیرترین زمان ممکن دستگیر شود و پلیس به شهری میرود که در زودترین زمان ممکن دزد را دستگیر کند. پلیس و دزد همیشه جای یکدیگر را میدانند.
حال از شما میخواهیم کمترین تعداد روزی که باید بگذرد تا دزد دستگیر شود را چاپ کنید و یا اعلام کنید دزد هیچوقت دستگیر نمیشود.
در سطر اول ورودی، عدد صحیح آمده که شمارهی شهری که پلیس در آن قرار دارد را نشان میدهد. در سطر دوم ورودی، عدد صحیح آمده که شمارهی شهری که دزد در آن قرار دارد را نشان میدهد.
در تنها سطر خروجی، یک عدد صحیح که برابر کمترین تعداد روزی که باید بگذرد، تا پلیس، دزد را بگیرد را چاپ کنید. اگر دزد هیچوقت توسط پلیس دستگیر نمیشود -1
چاپ کنید.
در این نمونه، پلیس روز اول، از شهر ۲ وارد شهر ۶ میشود و دزد را دستگیر میکند.
در این نمونه، پلیس روز اول، از شهر ۷ وارد شهر ۴ میشود. شب اول دزد به یکی از شهرهای ۲ یا ۳ میرود و در هر کدام از این شهرها که باشد، پلیس روز دوم آن را دستگیر میکند.
در این نمونه، پلیس روز اول، از شهر ۴ وارد شهر ۷ میشود و دزد را دستگیر میکند.
در زبان برنامهنویسی گولنگستان متغیرها حافظههای ۱، ۲، ۳ یا ۴ بایتی دارند. وقتی یک شئ با متغیر به حجمهای تعریف میکنیم. حافظهها با قاعدهی زیر در بستههای ۴ بایتی، پشت سرهم قرار میگیرند.
متغیرها را به ترتیب اضافه میکنیم. اگر متغیری که نوبت اضافه شدن آن است، به انتهای بستهی قبلی میتواند اضافه شود، آن را اضافه میکنیم و به سراغ متغیر بعدی (در صورت وجود) میرویم. اما اگر این متغیر نمیتواند به انتهای بستهی آخر اضافه شود، همهی فضای خالی آن را رها میکنیم و آن بسته را میبندیم (اصطلاحاً به این حافظههای تلف شده padding space میگویند). سپس در یک بستهی ۴ بایتی جدید، حافظه مورد نیاز متغیر بعدی را به بایتهای اول آن اختصاص میدهیم.
برای مثال فرض کنید متغیر داشته باشیم: ، و . در این صورت متغیر در ابتدای یک بسته قرار میگیرد، چون متغیر را نمیتوان به همان بسته اضافه کرد، پس ۳ بایت باقیماندهی بستهی اول را padding space در نظر میگیریم. سپس متغیر را در یک بستهی جدید قرار داده و در نهایت را در بایت اول یک بسته قرار میدهیم. (در آخرین بسته padding space نداریم.)
به این ترتیب وضعیت نوار حافظه به صورت زیر خواهد بود و در مجموع ۳ حافظه تلف شده خواهیم داشت.
حال میدانیم اگر ترتیب این سه متغیر را به این صورت که ، و عوض میکردیم. وضعیت نوار حافظه به این صورت تغییر میکرد و هیچ حافظهای تلف نمیشود.
حال به شما ترتیب اولیه حافظه متغیرها داده میشود از شما میخواهیم ترتیب آنها را طوری تغییر دهید که حافظههای تلف شده (padding space) کمینه شود و در نهایت این کمینه مقدار را چاپ کنید.
در سطر اول ورودی، عدد صحیح و مثبت آمده که تعداد سناریوها را نشان میدهد.
در سطر اول هر سناریو، عدد صحیح که نشان دهندهی تعداد متغیرها است داده میشود.
در سطر دوم هر سناریو، عدد صحیح که مقدار حافظهی متغیرها یعنی را نشان میدهد.
در سطر برای هر سناریو، کمینه حافظهی تلف شده (padding space) در بین تمام ترتیبهای مختلف برای متغیرها را چاپ کنید.
سناریو اول در صورت سوال توضیح داده شده.
یک نمونه از ترتیب بهینه، برای سناریو دوم، با ۱ حافظه تلف شده، به صورت زیر است:
تنها ترتیب ممکن، برای سناریو سوم، با ۰ حافظهی تلف شده، به صورت زیر است:
تنها ترتیب ممکن، برای سناریو چهارم، با ۴ حافظهی تلف شده، به صورت زیر است:
علی همیشه آرایههایش را گم میکند. به همین منظور از روی آرایهها برای خودش یک آرایهی دیگر میسازد. به طور دقیقتر آرایهای از اعداد صحیح مثل را در نظر بگیرید. از روی آن آرایهی را میسازد. به این صورت که برای هر از ۱ تا مقدار از رابطهی زیر بدست میآید.
حال علی پیش از اینکه دنبال آرایهی بگردد، میخواهد از روی آرایهی بررسی کند چند حالت برای آرایهی اولیه وجود دارد.
به علی کمک کنید تا این تعداد را پیدا کند. چون ممکن است پاسخ مسئله خیلی بزرگ شود، باقیمانده این مقدار را به پیمانهی چاپ کنید.
در سطر اول ورودی، عدد صحیح و مثبت داده میشود.
در سطر دوم ورودی، عدد صحیح با فاصله از هم داده میشود.
در تنها سطر خروجی، باقیماندهی تعداد حالتهای ممکن برای دنبالهی را به پیمانهی چاپ کنید.
برای مثال اگر آرایهی برابر باشد، دنبالهی ی داده شده، بدست میآید (۳ آرایهی اولیه دیگر نیز وجود دارد).
آرایهی فقط میتواند باشد.
هیچ آرایهی با یک عنصر وجود ندارد.
امین یک معادله ساده به فرم روی تخته نوشته بود. یک روز مهلا تصمیم میگیرد کاراکترهای +
و =
را پاک کند و سه قسمت ، و را بهم بچسباند. حالا امین به سراغ تخته میآید و میخواهد از روی این رشتهی ارقام معادله را بازسازی کند.
در واقع امین با یک رشته رقمی از ارقام ۱ تا ۹ مواجه است و میخواهد این رشته را به سه بازهی متوالی ، و تقسیم کنیم به طوری که معادلهی برقرار باشد. او از شما میخواهد بررسی کنید آیا انجام چنین افرازی ممکن است یا نه.
در سطر اول ورودی، عدد صحیح و مثبت که تعداد سناریوها را نشان میدهد، داده میشود.
در سطر اول هر سناریو، عدد صحیح و مثبت آمده که طول رشته را نشان میدهد.
در سطر دوم هر سناریو، یک رشته از ارقام 1
تا 9
به نام داده میشود.
تضمین میشود که باشد.
در سطر برای هر سناریو، در صورتی که میتوان چنین تقسیمی انجام داده YES
و در غیر این صورت NO
چاپ کنید.
معادلهی سناریو اول به صورت
بوده است. بنابراین پاسخ YES
میشود.
معادلهای برای سناریو دوم وجود ندارد
معادلهی سناریو سوم به صورت
بوده است. بنابراین پاسخ YES
میشود.
کد شما باید روی PostgreSQL قابل اجرا باشد.
در این سوال، دیتاست مربوط به ورزشکاران و مربیان المپیک ۲۰۱۶ در اختیار شما قرار گرفته است.
دادههای اولیه را از این لینک دانلود کنید.
از نصب بودن PostgreSQL روی سیستم خود اطمینان حاصل کنید.
سپس برای ایمپورت کردن دادههای اولیه میتوانید از یکی از دو روش زیر اقدام کنید:
۱- با استفاده CLI به راحتی دستور زیر را وارد کنید تا دادههای اولیه ایمپورت شوند:
که در این دستور مسیر فایل initial.sql
را به صورت مطلق یا نسبی میتوانید آدرسدهی کنید.
۲- اگر GUI را ترجیح میدهید. پس از نصب دیتاگریپ و اتصال به PostgreSQL با یوزر postgres
، باید روی دیتاسورس و کانکشن postgres
راست کلیک کنید و از منوی SQL Scripts
گزینه Run SQL Script
را انتخاب کنید. سپس فایل initial.sql
را پیدا و تایید کنید. در انتها روی Run
کلیک کنید تا اسکریپت اجرا شود و دادهها وارد دیتابیس quera
شوند.
این دیتاست شامل اطلاعات و نتایج حدود یازده هزار ورزشکار و مربیان آنها در المپیک ریو است و ساختار جدول athletes
مربوط به این دیتاست بهصورت زیر است:
نام ستون | نوع | تعریف |
---|---|---|
id |
integer |
شناسهی منحصر به فرد ورزشکار |
name |
character varying(255) |
نام |
sex |
character(1) |
جنسیت ورزشکار ('M' یا 'F') |
weight |
double precision |
وزن |
team |
character varying(255) |
تیم یا کشور |
sport |
character varying(255) |
ورزش برای مثال کشتی یا Wrestling |
event |
character varying(255) |
منظور از رویداد عنوان دقیق رشته ورزشی است. برای مثال کشتی آزاد سنگینوزن مردان یا Wrestling Men's Heavyweight, Freestyle |
medal |
character varying(10) |
مدالی که ورزشکار کسب کرده (Gold ، Silver ، Bronze ، یا NULL اگر مدالی نگرفته) |
و ساختار جدول coaches
به شکل زیر است:
نام ستون | نوع | تعریف |
---|---|---|
id |
integer |
شناسهی منحصر به فرد مربی (کلید اصلی) |
name |
character varying(255) |
نام مربی |
athlete_id |
integer |
شناسهی ورزشکار مرتبط (کلید خارجی به ستون id از جدول ورزشکاران) |
کوئریهایی بنویسید که خروجیهای مطلوب زیر را بهدست آورد (توجه کنید که هر کوئری نمرهای جداگانه دارد و اگر کوئری یک قسمت را نتوانستید بنویسید، کوئریهایی که حل کردید را بفرستید و کوئری آن قسمت را خالی بگذارید):
نام ستون تعداد مدالها باید medal_count
باشد و مقدار ستون team
این ورزشکاران برابر با Iran
است:
sport | medal_count |
---|
منظور از مرغوبیت مدال یعنی در ابتدا سطرهای شامل مدال طلا، سپس نقره و در نهایت برنز در نتیجه ظاهر شوند. مقدار ستون team
این ورزشکاران برابر با Iran
است. در جدول زیر چون هر دو طلا گرفتهاند بر اساس نام مرتب شدهاند.
name | medal | |
---|---|---|
1 | Hassan Aliazam Yazdanicharati | Gold |
2 | Kianoush Rostami | Gold |
در جدول بالا اولین ستون از سمت چپ نمایانگر شماره ستون در نتایج مورد انتظار است و نیازی به نمایش آن نیست.
فرمول مجموع امتیازات به این شکل است که اگر ورزشکار تحت هدایت مربی موفق به کسب مدال طلا شده باشد ۲۵ امتیاز، نقره ۲۰ و برنز ۱۵ امتیاز به آن مربی تعلق پیدا خواهد کرد. در جدول زیر نمونهای از خروجی مطلوب را مشاهده میکنید:
coach_name | team | gold_medal | silver_medal | bronze_medal | total_point | |
---|---|---|---|---|---|---|
1 | Saypulla Absaidov | Azerbaijan | 0 | 2 | 3 | 85 |
... | ... | ... | ... | ... | ... | ... |
10 | Mohammad Bana | Iran | 0 | 0 | 2 | 30 |
در جدول بالا اولین ستون از سمت چپ نمایانگر شماره ستون در نتایج مورد انتظار است و نیازی به نمایش آن نیست.
اگر هیچ مردی در آن تیم موفق به کسب مدال نشده بود، از آنجا که تقسیم بر صفر معتبر نیست، باید مقدار NULL
در ستون نسبت مدالآوران زن به مرد درج شود و برای این ستون باید مقدار نسبت تا حداکثر دو رقم اعشار محاسبه شود و مابقی ارقام در اعشار گرد شوند. همچنین دقت کنید نام ستونها دقیقا با مثال زیر یکسان باشد.
نمونه خروجی مورد انتظار:
team | female_medalists | male_medalists | female_to_male_ratio | |
---|---|---|---|---|
1 | United States | 95 | 71 | 1.34 |
2 | Russia | 60 | 22 | 2.73 |
... | ... | ... | ... | ... |
21 | Bulgaria | 7 | 0 | <null> |
... | ... | ... | ... | ... |
در جدول بالا اولین ستون از سمت چپ نمایانگر شماره ستون در نتایج مورد انتظار است و نیازی به نمایش آن نیست.
نکته: برای حل کامل سوال و دریافت امتیاز کوئریها حتما توضیحات مربوط به هر کوئری را مطالعه بفرمایید.
پس از پیادهسازی کوئریها، آن را در قالب یک فایل با پسوند .sql
آپلود کنید.
کوئریهای شما باید به صورت زیر باشد و هیچ گونه تغییری در کامنتها ندهید.