همینک در محله کوئرا هزاران نفر در صف نان ایستاده اند که نان بخرند، و به دلیل تعداد زیاد، صف به هم ریخته و ترتیبی وجود ندارد! در نتیجه امکان ارائه نان هم وجود ندارد. شاطر محله که برنامه نویسی مسلط است تصمیم گرفت سریعا برنامه ای به زبان PHP
بنویسد تا دوباره به مشتری ها ترتیب ببخشد!
ترتیب مدنظر او به این صورت است که علی در صف جلو تر از رضا است اگر سن علی کمتر باشد، و در صورت برابر بودن سنها، اگر قدش کوتاهتر باشد. فرض کنید شما شاطر برنامه نویس هستید و این برنامه را بنویسید.
شما باید یک فایل PHP
دارای موارد زیر نوشته و ارسال کنید:
MyClass
my_sort
MyClass
خواهد بود. my_sort
: تضمین می شود که هیچ ۲ نفری وجود ندارند که هم سن یکسان و هم قد یکسانی داشته باشند.
آنچه باید آپلود کنید:
یک فایل zip که در آن فایل submission.php
قرار دارد و در این فایل یک تابع my_sort
و یک کلاس MyClass
قرار دارد.
بانک شهر سوییشرت بالا (همسایه شهر باب اسفنجی اینا) تصمیم گرفته که خیلی آهسته به سمت الکترونیکی شدن پیش بره! اولین گامی که در این راستا میخواد برداره اینه که عملیاتهای ابتداییشون مثل ایجاد حساب و انجام تراکنش رو الکترونیکی انجام بدن. برای این کار از عبدالله پسر ایمان (عبدالله بن ایمان) کمک خواستند و عبدالله پسر ایمان (Abdollah Pesar Iman) سیستمی طراحی کرد که این کار رو براشون انجام بده و اسمش رو به صورت مخفف نام خودش گذاشت، API.
از خوش مزه بازی که بگذریم، این API قراره این ۳ تا متد (Method) رو داشته باشه:
add_account
این متد یک نام ورودی میگیره و یک حساب برای شخصی با اون نام ایجاد میکنه. در خروجی هم آیدی - id
اون حساب رو بر میگردونه.
آیدی حساب ها چیزی هست که در بقیه متد ها ازش استفاده میشه و طبیعتا باید یکتا باشه. یعنی هیچ ۲ نفری آیدی یکسانی نداشته باشند. اما لزومی نداره آیدی ها ترتیب خاصی داشته باشند...
add_transaction
این متد یک آیدی حساب و یک مقدار عددی (بین -۵۰ تا +۵۰) ورودی میگیره و کاری که انجام میده اینه که اون مقدار پول به حساب اون آدم اضافه می کنه. (یا اگه مقدار منفی باشه، کم میکنه) و id
تراکنش را برمیگرداند. تراکنشها به ترتیب ایجاد شدن، id
های ۱ و ۲ و ۳ و ... میگیرند.
get_info
این متد یک آیدی حساب میگیره و میزان پولی که در حال حاضر در حساب اون شخص وجود داره رو چاپ می کنه.
برای توضیحات کامل تر نام ورودی های متد ها پاراگراف پایین را ملاحظه کنید.
در فایل env.php
کدی مشابه کد زیر است (متغییر URL
میتواند مقادیر متفاوتی داشته باشد).
در این صورت، یک متغیر با نام $URL
(با حروف بزرگ) در برنامه تان قابل استفاده خواهد بود. این متغیر حاوی url
از بعد از نام دامنه خواهد بود.
مثال هایی از مقادیر $URL
که به برنامه ورودی داده می شود:
در این مثال خط اول 157 را به عنوان خروجی چاپ کرده است. خط دوم آیدی تراکنش را (مثلا 10) چاپ کرده است. و خط سوم 44 چاپ کرده است.
در این سوال دیتابیس در اختیار ندارید و همچنین نمی توانید از متغیر های درون برنامه استفاده کنید زیرا برای هر url مانند یک کد php
واقعی، برنامه بسته و مجددا اجرا خواهد شد. برای ذخیره اطلاعات می توانید از فایل استفاده کنید و فایل ایجاد کنید.
آنچه باید آپلود کنید:
یک فایل zip که در آن فایل solution.php
قرار دارد و در این فایل خواستههای مسئله را پیاده سازی نمایید (توجه نمایید که در خط اول برنامه include 'env.php';
را قرار داده باشید).
داستان از این قرار می باشد که یک پروژه لاراول موجود است. این پروژه یک وبلاگ است، یعنی مدیران می توانند در آن پست قرار دهند و کاربران پست ها را مشاهده کنند و برای آن ها کامنت بگذارند.
حال قرار است شما یک امکان به آن اضافه کنید، این که کاربران بتوانند پست ها را لایک هم بکنند. پروژه به صورت کامل در اختیار شما قرار خواهد گرفت، تغییراتی در آن ایجاد کنید که بتوان در آن پست لایک کرد، و برای هر پست مشاهده کرد که چند لایک دارد. در هیچ مرحله ای لازم نیست با محیط گرافیکی پروژه درگیر شوید و یک خط کد HTML بزنید. همه فرايند از طریق URL و خروجی شما هم JSON خواهد بود.
در پروژه هر پست یک آدرس دارد که به صورت زیر میشود پست را با آن نمایش داد:/blog/post-address
برای لایک پروژه باید URL زیر را ایجاد کنید:/add_like/post-address
و برای مشاهده تعداد لایک های پروژه:/get_post_likes/post-address
کاربر برای لایک کردن و مشاهده تعداد لایک ها باید لاگین کرده باشد، پس اگر کاربر مهمان قصد انجام لایک یا مشاهده تعداد لایک ها را داشته باشد باید با خطا مواجه شود.
همانطور که پیش تر گفته شد، هر درخواست باید با یک خروجی JSON همراه باشد، که شامل فیلدهای زیر است:
فیلد result
یا برابر ok خواهد بود یا not_ok که اولی به معنای این است که عملیات بدون خطا انجام شد، و دومی به این معنا که خطایی وجود دارد. حالاتی که خطایی وجود ندارد و خروجی باید ok باشد در ادامه توضیحات داخل پرانتز گفته شده است.
در فیلد message
توضیحات بیشتری برای عملیات داده شود. این رشته باید برابر یکی از رشته های زیر باشد:
Liked
در صورتی که پست بدون مشکل لایک شد. (حالت بدون خطا) LikeExists
در صورتی که کاربر قبلا پست را لایک کرده است و لایک تکراری است. NotLoggedIn
در صورتی که کاربر وارد سایت نشده است. اگر کاربر در حال مشاهده تعداد لایک های یک پست است و مشکلی وجود ندارد، در فیلد count
تعداد لایک ها نمایش داده خواهد شد (حالت بدون خطا) ، در غیر این صورت این فیلد می تواند وجود نداشته باشد یا مقداری دلخواه داشته باشد.
فیلد redirect
نشان دهنده URL ای خواهد بود که کاربر به آن جا فرستاده خواهد شد و مقادیر آن به صورت زیر است.
redirect
باید از نام route ها استفاده کنید که می توانید آن ها را در پروژه بیابید. برای مثال نام route لاگین، login
است.http://bayanbox.ir/info/1317224463893997395/challenge
ابتدا پروژه را Extract کنید،
بعد از Extract کردن، دستورات زیر را در دایرکتوری پروژه اجرا کنید:
دستوراتی که با (!) مشخص شده اند، دیتابیس را حذف می کنند و دوباره می سازند. شاید در ابتدا نیازی به انجام این کار نباشد ولی برای تست کردن مکرر برنامه تان، احتمالا بخواهید این کار را انجام دهید. (می توانید هم migration ها را rollback کنید)
علامتهای (!) در دستورات نوشته شده بخشی از دستورات نیستند و نباید آن ها را وارد کنید! صرفا برای مشخص شدن در متن صورت سوال هستند.
این سوال به صورت دستی پس از مسابقه تصحیح خواهد شد و نمره نمایش داده شده در جدول امتیازات ملاک نمیباشد.
فایل : دانلود فایل پروژه
شرکت Quera به دنبال تولید اپلیکیشن موبایل اندروید برای سایت خود است، اولین قدم برای این منظور تولید صفحه ورود کاربران است. برای این منظور طراح گرافیکی این شرکت یک قالب اولیه برای این صفحه آماده کرده و بر روی ساختار XML پیاده سازی کرده است، وظیفه شما آن است که فرآیند submit را پیاده سازی نمایید. ابتدا باید کنترل صحت داده های ورودی بررسی شود. کنترل صحت داده ها به این صورت می باشد که:
هر کدام از ورودی ها باید مقدار داشته باشد در غیر این صورت پیام راهنمایی درون آن به Enter <FieldName> با رنگ #FF0000 تغیر می کند.
مقدار وارد شده در ورودی Email باید آدرس یک ایمیل بر اساس استاندارد RFC 5322 باشد.
مقدار وارد شده در Password باید حداقل ۸ کاراکتر باشد، این کارکاتر ها می توانند حروف کوچک و بزرگ، عدد و علائم @#$%& باشد که در هر پسورد حداقل یک حرف کوچک، یک حرف بزرگ، یک عدد و یکی از علائم مجاز باید حضور داشته باشد.
در صورت مغایرت مقدار وارد شده درون هر ورودی با شرایط فوق پیام خطای <FieldName> is not valid در بالای صفحه و در قسمت تعیین شده نمایش داده می شود. توجه کنید که در صورت اشتباه بودن هر دو ورودی هر دو پیام باید نمایش داده شوند و با کاراکتر \n از هم جدا شوند (ترتیب اهمیتی ندارد).
پس از بررسی صحت ورودی ها در صورت صحیح بودن آنها یک درخواست HTTP به یک سرور خارجی ارسال می شود. این درخواست از نوع POST می باشد که در بدنه آن یک JOSN شامل کلید های email و password به همراه مقادیر وارد شده می باشد. این درخواست به آدرس quera.ir/accounts/login ارسال می شود و پیام بازگردانی شده با فرمت HTTP درون ResultActivty نمایش داده می شود. برای ارسال این درخواست حتما از HttpURLConnection استفاده نمایید.
برای پاسخ به این سوال ابتدا فایل زیپ مربوط به این سوال را دانلود نمایید، داخل این فایل یک پروژه جاوا وجود دارد، پس از انجام تغییرات فوق پروژه جاوا را دوباره زیپ نموده و بر روی سایت بارگذاری نمایید. توجه نمایید که بجز فایل های مشخص شده به دیگر فایل های موجود در پروژه دست نزنید.**
این سوال به صورت دستی پس از مسابقه تصحیح خواهد شد و نمره نمایش داده شده در جدول امتیازات ملاک نمیباشد.
در این سوال می خواهیم اپلیکیشنی برای دریافت پیام های SMS پیاده نماییم.
در قدم اول باید پیاده سازی های لازم را طوری انجام دهید که به هنگام رسیدن یک پیام جدید نمونه ای از کلاس SMSReceive پیام را دریافت نماید.
در قدم بعد شما باید نمونه ای از MainActivity را از فرا رسیدن این پیام باخبر سازید (توجه نمایید که ممکن است اپلیکیشن در حالت اجرا شده قرار نداشته باشد)، برای انجام این کار از فراخوانی به وسیله Intent استفاده نمایید و درون مقادیر ارسالی آن یک نمونه از کلاس QueraMessage را با کلید QueraMessage ارسال نمایید.
پس از مطلع شدن نمونه ی MainActivity از رسیدن پیام جدید نام فرستنده آن را از درون مخاطبان ذخیره شده بر روی تلفن همراه پیدا کنید (در صورت عدم وجود مخاطب مورد نظر شماره تلفن فرستنده را به جای نام فرستنده قرار دهید).
و در انتها با کامل نمودن کلاس MessageAdapter پیام ارسال شده رو درون لیست نمایش دهید.
برای پاسخ به این سوال ابتدا فایل زیپ مربوط به این سوال را دانلود نمایید، داخل این فایل یک پروژه جاوا وجود دارد، پس از انجام تغییرات فوق پروژه جاوا را دوباره زیپ نموده و بر روی سایت بارگذاری نمایید. توجه نمایید که بجز فایل های مشخص شده به دیگر فایل های موجود در پروژه دست نزنید.