طی جلسهای که بین تیم فنی شرکت همراه اول و کدآپ بود و بچههای هر دو تیم داشتند افتخارات خود را برای طرف مقابل شرح میدادند و به هم فخر میفروختند، کمکم حس رقابت و کُریخوانی بین بچههای هر دو تیم بالا گرفت.
همراه اولیها اعتقاد دارن که هیچکس تنها نیست و طرفدارهای بیشتری دارند. کدآپیها هم که مدرسه برنامهنویسان ایران را ساختند، اعتقاد دارند در دل هر برنامهنویسی جا دارند و طرفداراشان بیشتر است. الان هم این دو گروه از همه میخواهند که طرف خود را مشخص کنند. طرفداران کدآپ، C
، طرفداران همراه اول، H
و کسانی که کلا طرفدار هیچکدام نیستند، B
را بهعنوان بیطرف ارسال میکنند.
این دو گروه، بعد از کلی بحث و گفتگو، بالاخره به این نتیجه رسیدند که از شما کمک بگیرند تا بتوانند با شمارش تعداد علاقمندان، تیم محبوب رو پیدا کنند.
شامل یک عدد مانند برای گرفتن تعداد شرکتکنندگان و بعد از آن، حرف برای اینکه مشخص شود کاربر طرفدار کدام تیم است.
تعداد رایها را بشمارید. اگر کدآپ طرفدار بیشتری داشت، عبارت Shir e Codeup
را در خروجی نمایش دهید، اگر همراه اول طرفدار بیشتری داشت، عبارت Shir e Hmrah e Aval
و اگر تعداد رایهای بیطرف بیشتر بود، عبارت Doost bashid
رو نمایش دهید.
متاسفانه یا خوشبختانه، تعداد طرفداران همراه اول و کدآپ، یکسان بود و هر دو گروه نفس راحتی کشیدن که بازنده نبودند و دوباره شروع به کُری خواندن کردند. وسط این کُری خوانیها، مدیرعامل همراه اول چند تا جایزه گذاشت وسط میز و گفت: «حالا که اینطوریه بچههای ما ۴ تا سوال به شما میدن و هرکس زودتر حل کرد جایزهها مال اون میشه.» بچههای کدآپ هم که به عدالت در مسابقه اعتقاد قلبی دارند، شرایط را نامساعد دیدند و گفتند: «اصلا دوئل میذاریم. یک سوال شما بدید یک سوال ما میدیم. هرکس زودتر سوالها را حل کرد جایزهها مال اون میشه...»
بچههای کدآپ، به رسم جوانمردی و برای دستگرمی، سوال اول را آسان دادند که ببینند بچههای همراه اول در چه سطحی هستند.
در این سوال یک آرایه از اعداد داده میشود. حالا باید یک آرایه دیگر تعریف کنیم و خانههای آن را به این صورت پر کنیم:
هر خانه از این آرایه مانند خانه i
، برابر است با حاصل ضرب همه اعداد آرایه اولی به جز عنصر خانه i
ام.
حالا نوبت همراه اولیهاست که به سوال اول کدآپیها جواب دهند.
ابتدا عدد n
برای تعداد خانههای آرایه داده میشود. سپس n
عدد صحیح در ورودی میآید.
n
عدد که هر کدام از آنها، حاصل ضرب همه اعداد وارد شده، به جز خود آن عدد است که با فاصله از هم چاپ میشود.
شرکت همراه اول برای محاسبهی قبضهای تلفن همراه از فرمول خاصی به اسم قبضه روح استفاده میکند. بچههای همراه اول پیادهسازی این فرمول را به عنوان سوال مسابقه انتخاب کردهاند که ببینند بچههای کدآپ چند مرده حلاجند! قبضه روح به برنامهای گفته میشود که دو لیست از اعداد را دریافت کند و صرفا بزرگترین عدد هر لیست را در محاسبات استفاده میکند و بقیه را دور میاندازد. اعمالی که این قبضه روح پشتیبانی میکند به صورت زیر است:
عنوان | علامت | عملیات |
---|---|---|
جریمه | + | a + b |
اینترنت | - | a - b |
مکالمه | * | a * b |
پیامک | // | a // b ( بخش صحیح تقسیم فقط نمایش داده شود) |
مالیات | ^ | a ^ b (a را به توان b میرساند) |
//
عملیات // به این معنی است که حاصل تقسیم دو عدد رو به صورت عدد صحیح نمایش دهید برای مثال:
تضمین میشود در صورتی که ^
در ورودی داده شود عدد بزرگتر در لیست (آرایه) دوم عددی صحیح خواهد بود.
در خط اول دو عدد با یک فاصله وارد می شوند که عدد اول تعداد اعداد در لیست (آرایه) اول و عدد دوم تعداد اعداد در لیست (آرایه) دوم را مشخص میکند. در خط های بعدی دو لیست (آرایه) و یک عملگر ریاضی است. بین هر کدام از اعضای لیست (آرایه) یک عبارت فاصله قرار دارد. اعضای لیست (آرایه) میتوانند اعشاری نیز باشند. ابتدا لیست (آرایه) سپس در خط بعدی عملگر ریاضی و در خط سوم لیست (آرایه) به عنوان ورودی داده خواهد شد.
حاصل عمل ریاضی را همراه با عنوان عملیات انجام شده در خروجی دقیقا با یک رقم اعشار نمایش دهید.
نکته: مثالهای ۱ و ۲ همان تست کیس اول و دوم هستند.
بچههای کدآپ که قبضه روح را با تلاش فراوان حل کردند، (خسته نباشی دلاور!) تصمیم گرفتند حریف را با بخش نام کاربری حساب سایت کوئرا و پردازش ورودی معتبر به چالش بکشند!
در این مسئله میخواهیم برنامهای بنویسیم که با گرفتن نام یک متغیر، بگوید که آیا این نام میتواند بهعنوان نام کاربری یک شخص در سایت استفاده شود یا خیر؟
شرایط معتبر بودن نام کاربری به ترتیب:
نام کاربری فقط میتواند با underscore (_
) یا حروف الفبا شروع شود و در غیر اینصورت پیغام خطای زیر چاپ شود.
Variable name should start with underscore or alphabet!
نام کاربری حتما باید شامل کلمه quera
باشد
Variable name should contain word quera!
نام کاربری فقط میتواند شامل حروف الفبا، اعداد و underscore (_
) باشد و در غیر آن باید پیغام زیر چاپ شود.
Variable name can only contain alpha-numeric characters and underscore!
دقت کنید که شرایط گفته شده به ترتیب باید بررسی شود و اگر یک نام در یک مرحله شرطی را نقض کند، فقط پیغام مناسب آن شرط چاپ میشود و نیازی به بررسی شرطهای بعدی نیست.
یک رشته که نشاندهندهی نام کاربری است.
در صورتی که نام کاربری ورودی معتبر است، عبارت valid
و در غیر آن عبارت invalid
را چاپ کنید و در صورت نامعتبر بودن، مشکل متغیر را نیز چاپ کنید.
شرکت همراه اول شمارههای همراه را بر اساس رُند بودن قیمتگذاری میکند و هر چقدر یک شماره رُندتر باشد، قیمت بالاتری دارد. تیم فنی همراه اول برای تشخص رُند بودن شمارهها، تعداد رقم تکراری را بررسی میکنند و حالا به بچههای کدآپ تعدادی شماره دادهاند و از آنها خواستند غیررُندها را مشخص کنند. اینطوری هم کدآپیها را به چالش کشیدند و هم کار خودشان راحت میشود و دیگر نیازی نیست خودشان شمارهها را بررسی کنند :)
در این سوال باید برنامهای بنویسید که تعدادی عدد از ورودی بگیرد و تعیین کند که چه تعداد از این اعداد هیچ رقم تکراری ندارند.
در خط اول عدد n
و در n
خط بعدی اعداد مورد نظر وارد شود.
در تنها خط خروجی تعداد اعدادی را که هیچ رقم تکراری ای ندارند چاپ کند.
بچههای تیم کدآپ که عرصه را بر خود تنگ دیدند، تصمیم گرفتند این دفعه چالشی را مطرح کنند که در آن کلا ریاضی را از پایه عوض کنند و روح همه ریاضیدانان را در قبر به لرزه در بیارند!
پس با هم فکر روی هم گذاشتند و قوانین ضرب مثبت و منفی را به صورت زیر تغییر دادند:
ورودی شامل دو خط است که در آنها دو رشته از ترکیب کاراکترهای و وجود دارد.
خروجی شامل یک خط است که در آن رشتهای حاصل از واکنش دو رشته ورودی قرار دارد.
در صورتیکه طول دو رشته یکسان نبود به رشته کوتاهتر عناصر خودش را به صورت آیینه ای به انتهای آن اضافه میکنیم تا به طول رشته دوم برسد و اگر با یک بار هم طول دو رشته برابر نشد اینقدر اینکار را تکرار میکنیم تا طول دو رشته برابر شود .
برای مثال : اگر ورودی به شکل زیر باشد:
باید تبدیل به این حالت شود :
برای اینکه به طور کامل متوجه روش گسترش رشته کوچیکتر بشوید با حروف الفبای انگلیسی یک مثال میزنیم :
فرض کنید رشتهها به صورت زیر باشند :
در مرحله اول اضافه کردن به صورت آیینهای رشته ها به شکل زیر تبدیل میشوند:
از آنجایی که هنوز طول دو رشته برابر نیست باز هم باید اینکار را تکرار کنیم تا جایی که طول رشته کوچکتر به طول رشته بزرگتر برسد
دقت کنید این مثال صرفا برای فهمیدن بهتر روش گسترش رشته کوچکتر است
ابتدا ورودی به حالت زیر تبدیل میشود
سپس به ترتیب با هم برخورد میکنند و نتیجه حاصل میشود
ابتدا ورودی به حالت زیر تبدیل میشود
سپس به ترتیب با هم برخورد میکنند و نتیجه حاصل میشود
در بهار ۹۹، بورس تهران پیشرفت چشمگیری داشت طوریکه بسیاری از افراد به آن راه پیدا کردند. بازار سرمایهای که در آن سالی ۱۰۰ هزار کد بورسی صادر میشد، تبدیل شد به بازاری با روزی ۱۰۰ هزار کد!
گروه همراه اول که دیدند شرکتهای خصوصی و غیرخصوصی مختلف سر از بورس درآوردند و فقط سر اینها بیکلاه مانده، سریعا وارد بورس شدند. حالا بعد از گذشت یک سال و نیم میخواهند میزان سود و ضررشان را حساب کنند و چه چیزی بهتر از این که بچههای کدآپی به واسطهی مسابقه این محاسبه را انجام بدهند. به هر حال هم فاله هم تماشا!
آنها میخواهند قیمتی که خرید کردهاند و قیمتی که در حال حاضر ارزش دارد را به شما بدهند و شما سود و زیان آنها را محاسبه کنید.
نحوه درست وارد شدن قیمتها:
عنوان | ویژگی سهامهای خریداری شده |
---|---|
قیمت خریداری شده | |
قیمت فعلی | |
تعداد |
ابتدا برنامهنویسان باید صحت ورودی تمامی این عنوانها را بررسی کنند و در صورتیکه در ورودیها به مشکلی برخوردند، پیغام Invalid Input
را در خروجی چاپ کنند.
نکته : توجه داشته باشید قیمتهای واردشده حتما باید مضربی از ۱۰ باشند و نباید هر مقداری برای آن وارد شود و درصورتیکه این اتفاق افتاد، باید Invalid Input
در خروجی چاپ شود.
ورودیها طبق جدول بالا و به همان ترتیب باید از ورودی گرفته شود و حتما باید به نکته ذکر شده درباره قیمتهای ورودی در بالا توجه کنید.
به ترتیب زیر در خطهای مجزا در خروجی نمایش داده شود:
اگر در این سهم سود کرده باشد، عبارت Profit
و درصورتی که ضرر کرده باشد، عبارت Loss
باید در خروجی نمایش داده شود.
نکته : آنقدر مردم ضرر کردهاند که درصورتی که قیمت تغییر هم نکرده باشد سود تلقی میشود.
درصد سود یا ضرر را حساب کند و در خروجی نمایش دهد. (اگر سود باشد، با علامت مثبت و اگر ضرر باشد، با علامت منفی در کنار آن نمایش داده شود.)
نکته : مقدار سود تا دو رقم اعشار باید محاسبه شود. برای این کار باید از روش قطع کردن استفاده کنید.
در آخرین خط خروجی باید عبارتی با درنظر گرفتن شرطهای زیر چاپ شود:
اگر جمع میزان سرمایهگذاری و سود بیشتر از و درصد سود آن بیشتر از درصد باشد، در خروجی عبارت Lucky
را نمایش دهد.
در غیر این صورت اگر جمع میزان سرمایهگذاری و سود کمتر و یا مساوی یا درصد سود آن کمتر یا مساوی درصد بود، در خروجی عبارت Normal
را نمایش دهد.
درغیر این صورت اگر میزان سرمایهگذاری و ضرر کمتر از و درصد ضرر آن کمتر از درصد باشد، در خروجی عبارت Chance
را نمایش دهد.
در غیر این صورت اگر جمع میزان سرمایهگذاری و ضرر بیشتر و یا مساوی یا درصد ضرر آن بیشتر و یا مساوی درصد باشد، در خروجی under the coverage
را نمایش دهد.
نکته : باید توجه داشته باشید وقتی میگوییم درصد سود کمتر از درصد، یعنی باید از بزرگتر باشد.
بچههای کدآپ از سوال قبل و بورس و مورس خیلی شاکی شدند... آخه خدا را خوش میاد سوال با این همه جزئیات و سختی؟! پس گفتند: «که این تو بمیری از اون تو بمیریا نیست» و کمر همت را بستند تا یک سوال سخت و اساسی طرح کنند و چون ذاتاً به ریاضیات و روح در عذاب همه ریاضیدانان علاقهمند هستند، به عدد فرد خوشگل رسیدند!
عدد فرد خوشگل به عددی فرد گفته میشود که تعداد مقسوم علیههای اول آن، خود نیز مقسومعلیه اول آن عدد باشد. به طور مثال، ۳۹۹ فرد خوشگل است. چون تعداد مقسومعلیههای اول آن، ۳ تا است و ۳ خودش مقسومعلیه اول است.
برنامهای بنویسید که با دریافت از ورودی، جمع اعداد فرد خوشگل در بازه (یعنی همه اعداد از ۱ تا خود عدد طوریکه ۱ و خود عدد هم بررسی شوند) را به صورت مقلوب چاپ کند.
ورودی تنها شامل یک عدد فرد خواهد بود.
جمع اعداد فرد خوشگل در بازهی به صورت مقلوب چاپ خواهد شد. در صورتی که هیچ عدد فرد خوشگلی در بازهی مورد نظر نبود، عبارت NOT FOUND!
در خروجی نمایش داده شود.
پس از کِشمَکِشها و چالشهای فراوان، مدیرعامل شرکت همراه اول متوجه شد که هر دو تیم در زمینهی برنامهنویسی خیلی قدرتمندند و اینطوری این مسابقه الی الابد (یعنی تا ابد) ادامه دارد! از آنجایی که حوصلهی مدیرعامل سر رفته، طی یک اقدام یِهویی، یک بازی دوز گذاشت بین دو گروه و گفت: «اصلا برنامهنویسی تعطیل! برندهی نهایی مسابقه با این دوز مشخص میشه!»
می توانید برای آشنایی بیشتر با بازی دوز از طریق این لینک به صورت آنلاین آن را بازی کنید.
در حال حاضر کلی شرکتکننده داریم و کلی مسابقهی دوز! برای همین جسارتاً رویمان به دیوار! از شما کمکی میخواهیم که برندهها را مشخص کنید. برای این کار باید برنامهای را بنویسید که حرکات هر بازیکن در بازی دوز را از ورودی دریافت کرده و در خروجی، صفحه نهایی بازی و برندهی آن را چاپ کند.
در خط اول ورودی عدد که تعداد همهی حرکات بازی است داده میشود. این حرکتها از بازیکن قرمز شروع میشود. یعنی اگر تعداد ۷ حرکت دادهشد به این معنی است که بازیکن قرمز ۴ حرکت و بازیکن زرد ۳ حرکت داشتهاست. خانهها از چپ به راست با اعداد یک تا هفت شمارهگذاری شدهاند. در خط بعدی ورودی عدد بین ۱ تا ۷ داده میشود که شماره ستونی است که بازیکن صاحب نوبت مهرهاش را درون آن میاندازد. (صفحه بازی دوز همیشه دارای ۶ سطر ۷ ستون است)
در خروجی برنامه، شما باید نام بازیکن برنده و صفحه نهایی بازی را چاپ کنید.
برای آشنایی بیشتر با فرمت های ورودی و خروجی برنامه به مثال های نمونه دقت کنید.
نکات مهم بازی:
مدیرعامل شرکت همراهاول، از این همه استقبال و شور و هیجان در روند مسابقه بسیارررررر متعجب و بهتزده و در عین حال خیلی خوشحال است و میخواهد که تجربهای شیرین برای شرکتکنندگان مسابقه رقم بزند. پس این لیست جایزه را بزرگتر کرده و در نظر دارد برای هریک از شرکتکنندگان بیشترین جایزهی ممکن را در نظر بگیرد (میبینم که اسم جایزه اومد و گل از گلتون شکفت! :))) ). با توجه به تعداد شرکتکنندگان باید برای این کار اون را یاری کنید.
در این برنامه باید با به هم چسباندن اعداد لیست ورودی، بزرگترین عدد ممکن را بسازید.
در خط اول تعداد اعداد ورودی داده می شود و خط بعدی که در آن اعداد روی هر کارت با یک از هم جدا شدهاند.
خروجی شامل یک عدد است که بزرگترین عدد قابل ساخت با کارتهای مسابقه میباشد.