A Drop of the Programming Sea

یک قطره از دریای برنامه نویسی: وبلاگ امیرحسین مهدی‌نژاد، برنامه‌نویس، مدرس برنامه‌نویسی و دانشجوی مهندسی کامپیوتر

A Drop of the Programming Sea

یک قطره از دریای برنامه نویسی: وبلاگ امیرحسین مهدی‌نژاد، برنامه‌نویس، مدرس برنامه‌نویسی و دانشجوی مهندسی کامپیوتر

۱۵ مطلب با موضوع «Programming Contest» ثبت شده است

ممد قصد دارد یک رشته کاراکتر را تکه تکه کند!

او یک رشته به نام s و به سایز n و دو عدد p و q در اختیار دارد و میخواهد s را به قطعه هایی به طول های p و q تقسیم کند. برای مثال اگر s را "Hello" در نظر بگیریم، برای p=2 و q=3 او می تواند این رشته را به دو زیر رشته ی "Hel" و "lo" تقسیم کند یا در حالتی دیگر به دو زیر رشته ی "He" و "llo" نیز می تواند.

گفتنی است لزومی ندارد که حتماً از هر دو عدد p و q استفاده کند، می تواند رشته را به تعدادی زیر رشته به طول q تقسیم کند و بلعکس. (به مثال دوم در ادامه مطلب توجه کنید)

در انجام این کار خطیر ممد را مساعدت فرمایید.

۰ نظر موافقین ۰ مخالفین ۰ ۰۳ آذر ۹۵ ، ۱۷:۱۸
Amirhossein Mahdinejad

چرخش‌های خارق‌العاده 

سیاره‌ی دوردست ویژگی‌های خارق‌العاده‌ای دارد. کاوش‌های دانشمندان فضایی نشان می دهد که سیاره‌ی دوردست، برخلاف سایر سیّاره‌ها به شکل مکعب است و بر روی هر وجهِ این سیاره‌ی مکعبی، نامی نوشته شده است. همچنین این سیاره به جای چرخش به دور یک محور، حول سه محور می‌چرخد...

input
2
Front Up Down Left Right Back
2
Z 4
X 4
Front Up Down Left Right Back
3
Z 1
X 1
Y 1
output
Front Up Down Left Right Back
Down Back Front Right Left Up
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۳ ، ۱۷:۳۰
Amirhossein Mahdinejad

در اینجا قصد داریم ماتریسی n × n با استفاده از کاراکترهای "D" و"*" ایجاد کنیم به طوری که یک کریستال لوزی شکل با کاراکترهای "D" در آن قابل رؤیت باشد. نگاه کردن به مثال ها شما را در فهم صورت سؤال یاری می کند...

input
7
output
***D***
**DDD**
*DDDDD*
DDDDDDD
*DDDDD*
**DDD**
***D***
۱ نظر موافقین ۰ مخالفین ۰ ۲۰ شهریور ۹۳ ، ۱۴:۲۶
Amirhossein Mahdinejad

قلی در حال ساخت یک وب سایت است و الآن او روی بخش شماره صفحات پایین صفحه کار می کند. کل سایت n صفحه دارد که از 1 تا n شماره گذاری شده اند و برای کاربری که هم اکنون در صفحه ی p ام سایت باشد، پیمایشگر صفحات (navigation) به صورت زیر خواهد بود:

<< p - k p - k + 1 ... p - 1 (p) p + 1 ... p + k - 1 p + k >>

وقتی کسی بر روی دکمه ">>" کلیک می کند، به صفحه 1 هدایت می شود و زمانی که کسی بر روی دکمه "<< " کلیک می کند به صفحه n هدایت می شود. و البته اگر کسی بر روی اعداد کلیک کند، به صفحه مربوطه هدایت می شود و توجه داشته باشید که فقط k صفحه از راست و k صفحه از سمت چپ صفحه ای که در آن حضور دارد قابل رؤیت است.

● برخی شرایط در navigation وجود دارد :

      اگر صفحه ی 1 قابل رؤیت است، دکمه ">>" نباید چاپ شود.

      اگر صفحه ی n قابل رؤیت است، دکمه "<<" نباید چاپ شود.

      اگر شماره صفحه کوچکتر از 1 یا بیشتر از n است ، نباید چاپ شود .

در پیاده سازی این بخش از وبسایت، او را کمک کنید.

input
9 6 3
output
<< 3 4 5 (6) 7 8 9
۰ نظر موافقین ۱ مخالفین ۰ ۱۷ اسفند ۹۲ ، ۲۲:۲۶
Amirhossein Mahdinejad

قلی برنامه نویس، روشن کردن شمع ها را دوست دارد، بنابراین در این سال او تصمیم گرفت اتاق خود را با شمع روشن نگه دارد. قلی در آغاز a تا شمع دارد. او می داند که با روشن کردن هر شمع، آن شمع یک ساعت روشنایی ایجاد کرده و سپس خاکستر می شود.

از آنجایی که قلی باهوش است، می تواند با هر b تا از خاکسترهای شمع های قبلی، شمع جدیدی مثل همه ی شمع های قبلی بسازد که می توانند همانند قبلی ها استفاده شوند.

به فرض اینکه همه ی a شمع اول و همه ی شمع های ایجاد شده از خاکستر ها کاملاً مشابه باشند، قلی می خواهد بداند در بهترین حالت، تا چند ساعت بعد از روشن کردن شمع اوّل، اتاقش روشن می ماند.

input
6 3
output
8
۰ نظر موافقین ۰ مخالفین ۰ ۰۹ اسفند ۹۲ ، ۲۱:۴۲
Amirhossein Mahdinejad

قلی یک جدول n*n دارد که روی هر خانه از آن با یکی از دو نماد "." یا "#" علامت گذاشته شده است. صلیب، شکلی است که از قرار گرفتن 5 خانه کنار همدیگر به شکل زیر به دست می آید:

قلی می خواهد تعدادی صلیب روی این جدول بکشد (ممکن است صفر باشد) به طوری که هر خانه ی آن، یک نماد "#" را پوشش دهد، در ضمن هیچ دو صلیبی خانه ی مشترک نداشته باشند.

شما وظیفه دارید به او بگویید که آیا می تواند با تعدادی صلیب، تمام "#" های جدول را بپوشاند به طوری که شروط بالا نیز رعایت شوند؟

input
5
.#...
####.
.####
...#.
.....
output
YES
۰ نظر موافقین ۰ مخالفین ۰ ۱۸ بهمن ۹۲ ، ۱۶:۰۹
Amirhossein Mahdinejad

فرض کنید سه نفر به نامهای A و B و C داریم؛ A اندازه ی 20دلار به B، B اندازه ی 20دلار به C بدهکار است. مجموع بدهی ها 40دلار است ولی باید نوعی آنها را سازماندهی کنیم که مجموع بدهی ها کمینه شود، پس اینگونه می نویسیم که A اندازه ی 20دلار به C بدهکار است، CوB به کسی بدهکار نیستند که در اینصورت مجموع بدهی ها 20 بوده و بدهکاری ها، همان حالت قبلی را شکل می دهد.

می خواهیم شکل توسعه یافته ی این مثال را برای nنفر حل کنیم که m بدهکاری بین آنها وجود دارد. به عبارت دیگر، در نهایت برای هر یک از افراد، تفاوت بین کل پولی که باید به او بدهید و پول او باید همان باشد.به ازای هر m و n مطلوب است یافتن کمترین مجموع بدهی هایی که بین آنهاست.

input
4 3
1 2 1
2 3 1
3 1 1
output
0
۰ نظر موافقین ۰ مخالفین ۰ ۰۵ دی ۹۲ ، ۱۶:۴۰
Amirhossein Mahdinejad