توضیحات کلی


این نکات را در تمامی سوال‌های این مسابقه رعایت کنید؛ رعایت نکردن این نکات ممکن است باعث شود کد ارسالی شما حتی اگر درست هم باشد نمره‌ی کمی دریافت کند.

  • پروژه‌ای که آپلود می‌کنید بصورت اتوماتیک توسط سیستم داوری می‌شود، پس تلاش کنید تمام نکات گفته‌شده داخل صورت سوال را رعایت کنید و دقیقاُ آن‌چه گفته شده را پیاده‌سازی کنید.

  • پروژه مربوط به هر سوال را از لینک داخل صورت آن سوال دریافت کنید و با توجه به صورت سوال، taskهای معرفی شده را پیاده سازی کنید تمامی فایل‌های موردنیاز برای اجرای پروژه را باتوجه به توضیحات صورت سوال ارسال کنید.

  • برای ارسال، پوشه‌ی App از پروژه را زیپ کرده و در محل مشخص شده آپلود نمایید.

  • پس از آن که کد را ارسال کردید و نمره‌دهی انجام شد، شما می‌توانید روی نمره ارسال خود در بخش همه‌ ارسال‌ها کلیک کنید و از راهنمایی‌ها و جزئیات نمره‌ای که دریافت کردید باخبر شوید.

  • لطفا پروژه را یک بار در رایانه شخصی خود اجرا کرده و پس از اطمینان از اجرا شدن برنامه آن را برای داوری ارسال نمایید.

  • تنها فایل‌های مشخص شده در صورت سوال را تغییر داده و در بقیه قسمت‌های پروژه تغییری ایجاد نفرمایید.

  • اضافه کردن فایل جدید درصورتی که در پوشه main یا زیرپوشه‌های آن قرارگیرد، مشکلی ایجاد نمی‌کند و بلامانع است.

  • در صورتی که در حین مسابقه راجع به صورت سوال‌ها به ابهامی برخوردید، می‌توانید در بخش سوال بپرسید از پشتیبانی مسابقه مورد را جویا شوید.

  • رتبه‌بندی مسابقه به ترتیب مجموع نمره‌ای است که از سوال‌ها دریافت می‌کنید؛ شرکت‌کننده‌ی با نمره‌ی بیشتر رتبه‌ی بهتری کسب می‌کند. شرکت‌کنندگان با رتبه‌ی برابر بر اساس مجموع زمان ارسال‌های نهایی رتبه‌بندی می‌شوند.

فرم


لینک دانلود پروژه اولیه

گروه کوه دانشگاه شریف تصمیم به گرفتن اعضای جدید کرده است. آن‌ها می‌خواهند فرمی را درست کنند تا متقاضیان بتوانند اطلاعات خود را در آن وارد نمایند. برای این‌کار از شما کمک می‌خواهند. فرم شامل فیلد های نام، شماره دانشجویی و سال ورود به دانشگاه می‌باشد. هر کدام از فیلد ها دارای شرایطی هستند:

  • در فیلد نام باید حرف اول اسم را بزرگ نوشت. در غیر اینصورت عبارت name is invalid در فیلد TextView که بالای صفحه قراردارد، نمایش داده می‌شود.
  • در فیلد شماره دانشجویی باید تعداد ارقام برابر با 8 باشند در غیر اینصورت عبارت student number is invalid در فیلد TextView که بالای صفحه قراردارد، نمایش داده می‌شود.
  • در فیلد سال ورود باید دو رقم ابتدای شماره دانشجویی با سال ورود برابر باشد (به طور مثال اگر شماره دانشجویی برابر با 94000000 باشد، در فیلد سال ورود نیز باید عدد 94 وارد شود) در غیر اینصورت عبارت entrance year is invalid در فیلد TextView که بالای صفحه قراردارد، نمایش داده می‌شود.
  • اگر همه فیلد ها درست پر شده بود باید عبارت you submit successfully در فیلد TextView که بالای صفحه قراردارد، نمایش داده می‌شود.

نکات مهم:🔗

  • پیغام‌ها پس از فشردن کلید نمایش داده شوند.
  • اگر بیشتر از یک فیلد اشتباه پر شده بود، ارورهای آن به ترتیب در TextView نمایش داده می‌شوند.
  • هنگام نمایش پیغام‌ها دقت کنید که کاراکتر‌های نامرئی مانند \n که بکار برده‌اید، به تعداد کافی باشند. (عدم استفاده از \n برای جداکردن خطوط، درج \n قبل از خط اول یا بعد از خط آخر از خطاهای متداول هستند.)
  • درصورت خالی ماندن هریک از فیلد‌ها، پیغامی چاپ نمی‌شود، اما برنامه شما در اینصورت نباید با فشردن دکمه موجود از کار بیفتد.
  • ورودی ها بصورت ارقام و حروف انگلیسی وارد می‌شوند.
  • به هیچ وجه در بخش‌های دیگر پروژه تغییری اعمال نکنید.
  • برای ارسال پاسخ، دقت کنید پوشه app موجود در ریشه فایل‌های پروژه، باید در ریشه فایل زیپ ارسالی قراربگیرد.

ساختار فایل ارسالی(فایل‌هایی که باید تغییر دهید با ----> نمایش داده شده اند):

<Your-zip-name>.zip
app
│   .gitignore
│   app.iml
│   build.gradle
│   proguard-rules.pro
│
└───src
    └───main
        │   AndroidManifest.xml
        │
        ├───java
        │   └───com
        │       └───example
        │           └───mahsa_pc
        │               └───form
        │                       MainActivity.java       <----
        │
        └───res
            ├───drawable
            ├───layout
            │       activity_main.xml                   <----
            │
            ├───mipmap-hdpi
            │
            ├───mipmap-mdpi
            │
            ├───mipmap-xhdpi
            │
            ├───mipmap-xxhdpi
            │
            ├───mipmap-xxxhdpi
            │
            └───values
                    colors.xml
                    strings.xml
                    styles.xml
Plain text

گوبرا


دانلود فایل پروژه

مهدیار به عنوان مدیر داخلی شرکت «گوبرا» انتخاب شده است. او پس از چند روز که از شروع کارش گذشت و مشخصات کارمندان شرکت را در کاغذ وارد کرد، احساس خستگی کرد. مهدیار از عطا خواست که برایش برنامه‌ی اندرویدی بنویسد که بتواند با کمک آن لیست کارمندان شرکت را مدیریت کند. عطا هم از فرط خستگی، پروژه را ناتمام گذاشته و زحمت اتمام کار بر دوش شماست.برنامه دو قسمت اصلی دارد؛ ثبت کارمند جدید و گرفتن گزارش کارمندان. در بخش ثبت کارمند جدید(Register)، باید مشخصات کارمند جدید دریافت شود. هر کارمند مشخصات زیر را دارد:

  1. کد کارمندی
  2. نام
  3. نام خانوادگی
  4. حقوق(به ازای هر ساعت)
  5. ساعت کار ماهانه
  6. منصب(مدیر، توسعه‌دهنده، کارمند)

در بخش گزارش(Report)، چند نوع گزارش می‌توان تهیه کرد.

  1. محاسبه‌ی کل پرداختی ماهانه‌ی شرکت برای هر گروه شغلی(مدیر، توسعه‌دهنده، کارمند، همه)
  2. گرفتن مشخصات کارمند با واردکردن کد کارمندی
  3. مشاهده‌ی nامین کارمند شرکت از نظر بیشترین درآمد ماهانه. (رتبه هر کارمند به اینصورت محاسبه می‌شود: درصورتی که کارمندان را بصورت نزولی براساس حقوق دریافتی ماهانه مرتب کنیم، کارمند با بیشترین دریافتی رتبه یک را دریافت می‌کند و با کاهش حقوق، به ترتیب رتبه افزایش می‌یابد.)

شما باید تغییرات زیر را در پروژه ایجاد کنید:

  • با اجرای برنامه، MainActivity اجرا شود و activity_main را نمایش دهد. همچنین در اولین اجرای برنامه بر روی دستگاه، پایگاه داده‌ای با نام company (دقیقا به همین نام و بدون هیچ پسوند، پیشوند یا فرمت فایل) ساخته شود و جدولی به اسم Staff با ستون‌های زیر در آن قرار گیرد: شماره‌ی کارمندی (ستون ID) نام (ستون FirstName) نام خانوادگی (ستون LastName) درآمد هر ساعت (ستون Salary) ساعات کار ماهانه (ستون Hour) منصب (ستون Position)

  • با زدن دکمه‌ی Register، کلاس RegisterActivity و با زدن دکمه‌ی Report، کلاس ReportActivity اجرا شود و به ترتیب activity_register و activity_report نمایش داده شوند.

  • در activity_register، داخل edit_code، edit_hour و edit_salary فقط باید بتوان عدد وارد کرد.

  • در activity_register، پس از فشرده‌شدن btn_submit اگر هر کدام از EditText ها خالی بود، رنگ پیغام راهنمای آن باید با استفاده از ثابت Color.RED یا کد رنگ معادل آن، به قرمز تغییر کند. در غیر این‌صورت، اطلاعات واردشده باید به جدول Staff اضافه شوند. در صورتی که کد کارمندی واردشده تکراری بود، نباید اطلاعات اضافه شوند و پیغام ‍‍‍‍‍‍Duplicate Personal Code داخل txt_result نمایش داده شود. در صورت موفقیت‌آمیز بودن هم پیغام Registration successful داخل txt_result نمایش داده شود و همه EditText ها به حالت اولیه (بدون متنی که کاربر وارد کرده و با کد رنگ پیش‌فرض برای متن راهنما) برگردند.

  • در activity_report، با فشرده‌شدن btn_payment باید کل حقوق ماهانه‌ی همه کارمندان گروهی که در drop_report_position انتخاب شده‌اند، در txt_report نمایش داده شود.(کل حقوق ماهانه‌ی یک کارمند برابر با حاصلضرب تعداد ساعات کار در حقوق ساعتی است.)

  • در activity_report، با فشرده‌شدن btn_person، باید نام و نام خانوادگی کارمندی که شماره‌ی کارمندی او در edit_get_code وارد شده است، در txt_report نمایش داده شود. توجه کنید که بین نام و نام خانوادگی باید دقیقا یک فاصله (space)باشد. همچنین اگر کارمندی با شماره واردشده وجود نداشت، پیغام Not found در txt_report نمایش داده شود. همچنین اگر edit_get_code خالی بود، پیغام راهنمای آن باید با استفاده از ثابت Color.RED یا کد رنگ معادل آن، به رنگ قرمز تغییر کند. توجه شود که ورودی edit_get_code فقط باید عدد باشد و غیر عدد را نباید بتوان وارد کرد.

  • در activity_report، با فشرده‌شدن btn_top، باید کارمندی که در رتبه‌ی متناظر با عدد واردشده در edit_top قرار دارد، در txt_report نمایش داده‌شود؛ (کارمندان براساس حقوق دریافتی بصورت نزولی مرتب می‌شوند و بالاترین حقوق، بالاترین رده یعنی رذه یک را دریافت می‌کند) باید نام، نام خانوادگی و درآمد ماهیانه در txt_report نوشته شود (موارد باید با دقیقا یک کاراکتر space از هم جدا می‌شوند.) اگر عدد واردشده از تعداد کارمندان شرکت بیشتر بود، عبارت Not found در txt_report نوشته شود. همچنین اگر edit_top خالی بود، پیغام راهنمای آن با استفاده از ثابت Color.RED یا کد رنگ معادل آن، به قرمز تغییر کند. توجه شود که ورودی edit_top فقط باید عدد باشد و غیر عدد را نباید بتوان وارد کرد.

نکات مهم:🔗

  • برای پیاده‌سازی خواسته‌های مسئله (بخصوص ساخت و پیاده‌سازی دیتابیس)، هیچگونه دسترسی یا permision جدیدی نباید به فایل پروژه اضافه شود. درصورت استفاده از روش‌هایی که نیاز به افزودن دسترسی به پروژه دارند، بخشی از نمره راه‌حل ارسالی کسر می‌گردد و یا نمره‌ای به راه‌حل ارسالی شما تعلق نمی‌گیرد.

ساختار فایل ارسالی(فایل‌هایی که باید تغییر دهید با ----> نمایش داده شده اند):

F:.
└───app
    │   .gitignore
    │   app.iml
    │   build.gradle
    │   proguard-rules.pro
    │
    ├───libs
    └───src
        ├───androidTest
        │   │   androidTest.iml
        │   │
        │   └───java
        │       └───ir
        │           └───quera
        │               └───companymanager
        │                       ExampleInstrumentedTest.java
        │
        ├───main
        │   │   AndroidManifest.xml
        │   │   main.iml
        │   │
        │   ├───gen
        │   ├───java
        │   │   └───ir
        │   │       └───quera
        │   │           └───companymanager
        │   │                   MainActivity.java           <----
        │   │                   RegisterActivity.java       <----
        │   │                   ReportActivity.java         <----
        │   │
        │   └───res
        │       ├───drawable
        │       ├───layout
        │       │       activity_main.xml
        │       │       activity_register.xml
        │       │       activity_report.xml
        │       │
        │       ├───mipmap-hdpi
        │       │       ic_launcher.png
        │       │       ic_launcher_round.png
        │       │
        │       ├───mipmap-mdpi
        │       │       ic_launcher.png
        │       │       ic_launcher_round.png
        │       │
        │       ├───mipmap-xhdpi
        │       │       ic_launcher.png
        │       │       ic_launcher_round.png
        │       │
        │       ├───mipmap-xxhdpi
        │       │       ic_launcher.png
        │       │       ic_launcher_round.png
        │       │
        │       ├───mipmap-xxxhdpi
        │       │       ic_launcher.png
        │       │       ic_launcher_round.png
        │       │
        │       └───values
        │               colors.xml
        │               strings.xml
        │               styles.xml
Plain text

تماس عجیب


لینک دانلود پروژه اولیه

مرور وظایف:🔗

  • پیاده‌سازی الگوی ارقام [0,1,2,3,4,5,6,7,8,9] ۲۵٪ امتیاز سوال (پیاده‌سازی هر عدد ٪۲.۵)
  • پیاده‌سازی انیمیشن برای الگوی نادرست ۱۵٪ امتیاز سوال
  • پیاده‌سازی روش صحیح وارد کردن اعداد (مشابه با وارد کردن الگو برای بازکردن قفل صفحه) ۵۰٪ امتیاز سوال
  • غیرفعال کردن صفحه ورود اعداد هنگام نمایش انیمیشن ۱۰٪ امتیاز سوال

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

برنامه بدین صورت است که:

  • صفحه ای که نمایش داده می‌شود دارای دکمه های سفید با کد رنگ #FFFFFF است که با لمس شدن، به رنگ مشکی با کد رنگ 000000# تغییر رنگ می‌دهند.

  • برای نوشتن هر عدد باید باید دکمه هایی که در کنار هم آن عدد را شکل می‌دهند، با لمس کردن به رنگ مشکی درآیند. وارد کردن عدد به این صورت است که کاربر، دست خود را برروی صفحه نمایش قرار می‌دهد و با کشیدن الگوی عدد موردنظر روی صفحه نمایش (بدون جدا شدن دست از صفحه نمایش)، مسیر متناظر با حرکت دست روی صفحه، به رنگ مشکی با کد رنگ 000000# تغییر رنگ می‌دهند (مشابه با وارد کردن الگو برای باز کردن قفل صفحه گوشی) و در صورت برداشتن دست از روی صفحه نمایش:

    • درصورتیکه الگوی رسم شده معتبر باشد، عدد متناظر به TextView سبز رنگ، در پایین صفحه اضافه می‌شود و همه دکمه ها به رنگ سفید اولیه باز می‌گردند.
    • درصورتیکه الگوی رسم شده، متناظر با هیچ‌یک از ارقام [0,1,2,3,4,5,6,7,8,9] نباشد، رنگ زمینه تمام پانزده دکمه، همراه با انیمیشنی به مرور تغییر رنگ داده و مجددا به رنگ سفید بازمی‌گردند.

شمای کلی پروژه پس از تکمیل:🔗

پروژه کامل

لینک دانلود درصورت بروز مشکل در نمایش گیف

نکات مهم:🔗

  • الگو را برای اعداد انگلیسی طراحی کنید و نه اعداد فارسی
  • برای ارسال پاسخ، دقت کنید پوشه app موجود در ریشه فایل‌های پروژه، باید در ریشه فایل زیپ ارسالی قراربگیرد.
  • انیمیشن را به اندازه کافی، طولانی درنظر بگیرید. برای اطمینان می‌توانید از مقدار ۴ ثانیه برای تکمیل انیمیشن استفاده کنید.

ساختار فایل ارسالی(فایل‌هایی که باید تغییر دهید با ----> نمایش داده شده اند):

<your-zip-name>.zip
├── app
│   ├── java
│   │   └── MainActivity <----
│   ├── res
│   │   ├── drawable
│   │   ├── layout
│   │   ├── mipmap
│   │   └── values
Plain text

بیست سوالی


لینک دانلود پروژه اولیه

خلاصه وظایف🔗

  • ارتباط با سرور و فرستادن رکوئست به آن ۸٪ امتیاز سوال
  • encode کردن صحیح داده‌های ارسالی به سرور ۸٪ امتیاز سوال
  • گرفتن پاسخ صحیح از سرور و نمایش آن در جای مناسب ۸٪ امتیاز سوال
  • امکان پردازش چند درخواست بطور همزمان ۱۶٪ امتیاز سوال
  • پایداری ارتباط با سرور درصورت تغییر وضعیت دستگاه (مانند چرخش) ۴۴٪ امتیاز سوال
  • پایداری محتوای مورد نمایش در رابط کاربری درصورت تغییر وضعیت دستگاه (مانند چرخش) ۱۶٪ امتیاز سوال

در این سوال شما باید یک بازی شبیه به بازی بیست سوالی (بدون محدودیت سوال) را پیاده‌سازی کنید. به این صورت که شما سوالات خود را تایپ و ثبت می‌کنید، سپس سوال خود را به آدرس سرور ‌ارسال می‌کنید و پس از پردازش سوال، پاسخی متناسب از طرف سرور به شما برمی‌گردد (پاسخ سرور صرفا شامل یک رشته بعنوان پاسخ سوال ارسالی است و هیچ ساختار خاصی ندارد). شما باید سوالات و پاسخ ها را در قسمت بالایی صفحه، بصورت گزارشی از تاریخچه عملکرد نمایش دهید؛ به این صورت که هر سوال بلافاصله پس از لمس دکمه submit به لیست افزوده می‌شود، آخرین پاسخ ارسالی در last_answer_tv نمایش داده می‌شود و با رسیدن پاسخ جدید از سمت سرور، متن موجود در last_answer_tv، به history_tv منتقل می‌شود و پاسخ جدید در last_answer_tv نمایش داده می‌شود.

موارد مورد انتظار جهت پیاده‌سازی🔗

۱- سوال کاربر باید در EditText با آیدی question_et تایپ شود و با لمس دکمه Submit برای پردازش،‌ به سرور ارسال شود تا پاسخ سرور را در قالب یک رشته دریافت کند. دقت کنید متن سوال نمی‌تواند خالی باشد. نمونه درخواست ارسالی به سرور برای پرسیدن سوال ?what is length of the word

<YOUR_URL>?q=what+is+length+of+the+word%3F
Plain text

نمونه پاسخ ارسالی سرور:

it contains 10 characters
Plain text

۲- آخرین پاسخ دریافت شده از سرور باید در TextView با آیدی last_answer_tv نمایش داده شود.

۳- لیست تاریخچه سوالات کاربر و پاسخ های سرور (بجز آخرین پاسخ سرور) باید در TextView با آیدی history_tv نمایش داده شود.

۴- برنامه شما باید با تغییر جهت دستگاه، وضعیت فعلی خود (شامل اطلاعات نمایش داده شده به کاربر و اطلاعات موردنیاز جهت ادامه فعالیت بصورت صحیح) را حفظ کند.

۵- درصورتی که در هنگام ارتباط با سرور و انتظار برای پاسخ سرور، جهت دستگاه تغییر کرد (دستگاه rotate شد)، نباید خللی در ارتباط با سرور و دریافت پاسخ بوجود آید.

۶- درصورتی که کاربر سوالی را با استفاده از کلید Submit ثبت کند و پیش از پاسخگویی سرور، سوال (یا سوالات) دیگری را ثبت کند، ارسال سوالات به سرور باید در لحظه ثبت انجام شود (نباید ارسال سوال جدید و انتظار برای گرفتن پاسخ، تا زمان پاسخگویی سرور به سوال قبلی، به تعویق بیافتد).

موارد مورد توجه هنگام پیاده‌سازی:🔗

  • درخواست ها به سرور توسط متد GET ارسال می‌شوند.

  • آدرس پایه‌ای سرور را حتما در متغیر url که عضو ثابت کلاس BaseURL می‌باشد،‌قرار دهید و زمانی که به آن نیاز داشتید، از BaseURL.url استفاده کنید. (از بکار گیری آدرس پایه بطور مستقیم در کد، جدا خودداری کنید).

  • به هیچ وجه آیدی (id) های موجود در فایل activity_main.xml را تغییر ندهید.

[ فرمت فایل ارسالی ]🔗

توجه کنید که🔗

+برای بررسی کدهای خود می‌توانید از سرور محلی یا کتابخانه‌های موجود برای اندروید جهت شبیه‌سازی سرور استفاده کنید.

  • برای ارسال پاسخ، دقت کنید پوشه app موجود در ریشه فایل‌های پروژه، باید در ریشه فایل زیپ ارسالی قراربگیرد.
  • نوع، نام و محتویات اولیه کلاس‌های موجود در فایل پایه را به هیچ وجه تغییر ندهید/حذف نکنید. (اضافه کردن بلامانع است.)
  • پروژه ارسالی شما می‌تواند فایل های اضافه بر فایل‌های موجود در پروژه پایه داشته باشد؛ این فایل ها باید بطور مستقیم یا غیر‌مستقیم در پوشه main قرارگرفته باشند.
  • امکان تغییر در فایل manifest وجود دارد.
  • درصورت استفاده از کتابخانه‌های ثالث جهت ارتباط با سرور، کد شما توسط سیستم داوری مردود اعلام می‌شود.

ساختار فایل ارسالی(فایل‌هایی که باید تغییر دهید با ----> نمایش داده شده اند، همچنین امکان افزودن فایل به ساختار ارسالی زیر وجود دارد اما از اعمال تغییر در محتویات پوشه layout جداً خودداری کنید):

<your-zip-name>.zip
  └───app
    ├───libs
    └───src
        └───main
            │   AndroidManifest.xml
            │
            ├───java
            │   └───quera
            │       └───androidchallenge
            │           └───com
            │               └───onlineguessword
            │                   │   MainActivity.java   <------
            │                   │
            │                   └───models
            │                           BaseURL.java
            │
            └───res
                ├───drawable
                │
                ├───drawable-v24
                │
                ├───layout
                │       activity_main.xml
                │
                ├───mipmap-anydpi-v26
                │
                ├───mipmap-hdpi
                │
                ├───mipmap-mdpi
                │
                ├───mipmap-xhdpi
                │
                ├───mipmap-xxhdpi
                │
                ├───mipmap-xxxhdpi
                │
                └───values
                        colors.xml
                        strings.xml
                        styles.xml
Plain text