کامل بودن یا نبودن/Python


  • محدودیت زمان: ۲ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

برنامه‌ای بنویسید که عددی مانند NN را از کاربر دریافت کند و در صورتی که خاصیت کامل بودن را داشته باشد، یعنی مجموع مقسوم‌علیه‌های آن (غیر از خودش) برابر با آن عدد باشد، YES و در غیر این صورت NO را چاپ کند.

ورودی🔗

در یک خط عدد NN به شما داده می‌شود. 1N200 000 1 \le N \le 200\ 000

خروجی🔗

چنانچه عدد کامل بود YES در غیراینصورت NO چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

27
Plain text

خروجی نمونه ۱🔗

NO
Plain text

ورودی نمونه ۲🔗

6
Plain text

خروجی نمونه ۲🔗

YES
Plain text

کتابخونه‌ی میثم/Django


کارها:

  • اضافه کردن view قرض دادن کتاب
  • اضافه کردن view پس دادن کتاب
  • اضافه کردن view افرادی که یک کتاب را قرض گرفته‌اند.

تعریف پروژه: در این پروژه یک مدلِ کتاب داریم. این مدل دو تابع borrow_book و return_book دارد. اولی برای قرض گرفتن کتاب و دومی برای پس دادن کتاب استفاده می‌شود.

پروژه اولیه را از اینجا دانلود کنید.

از شما خواسته شده که تسک زیر را انجام دهید.

  • با صدا زدن آدرس /get_book_users/<book_id>/ پاسخی مانند زیر دریافت شود که تاریخچه زمانی افرادی است که تاکنون کتاب را قرض گرفته‌اند. تاریخ به صورت iso_format نشان داده شود که تاریخ قرض گرفته شدن کتاب را نشان می‌دهد. در صورتی که کتابی وجود نداشت لیست خالی برگردانده شود.
[
    { "username": "user_name_1", "date": "2018-02-08T14:13:22.142497"},
]
Plain text
  • آدرس /borrow_book/<book_id>/<user_name>/ صدا زده شد پاسخ‌های زیر برگردانده شود. ‍‍‍

    { "status": status_code }
    Plain text

    مقادیر status_code (ترتیب مهم است):

    • در صورتی که کتاب قبلا قرض داده شده بود ۱ باشد.
    • در صورتی که قرض گیرنده قبلا کتاب قرض گرفته است ۲ باشد.
    • در صورتی که کتاب یا کاربر وجود ندارد مقدار ۳ باشد.
    • در صورت هر غلط دیگر مقدار ۴ باشد.
    • در صورت انجام صحیح مقدار ۰ باشد.
  • آدرس /return_book/<book_id>/ صدا زده شد پاسخ‌های زیر برگردانده شود. ‍‍‍

    { "status": status_code }
    Plain text

    مقادیر status_code (ترتیب مهم است):

    • در صورتی که کتاب قبلا پس داده شده بود ۱ باشد.
    • در صورتی که کتاب وجود ندارد مقدار ۲ باشد.
    • در صورت هر غلط دیگر مقدار ۳ باشد.
    • در صورت انجام صحیح مقدار ۰ باشد.

روش ارسال:

توجه کنید که manage.py باید مستقیما در ریشه فایل zip قرار بگیرد.

<your-zip-name>.zip
  ├── app
  │   ├── views.py
  |   └── ...
  ├── library
  │   ├── __init__.py
  │   ├── settings.py
  │   ├── urls.py
  │   └── wsgi.py
  └── manage.py
Plain text

زمانبند پوشالی/Python


کارها:

  • حذف یک تاریخ که در آن هیچ کاری اجرا نمی‌شود.(احترام به درگذشتگان)
  • تغییر تعریف یکی از قابلیت‌های کتابخانه
  • تغییر یکی از کلمه‌ها در خروجی تابع __repr__

تعریف پروژه: برنامه‌ای برای زمانبندی کار‌ها به زبان پایتون نوشته شده است (لینک گیت‌هاب) میخواهیم بدون آنکه کدی از کتابخانه اصلی را تغییر دهیم(توجه داشته باشید که کد را از لینک زیر دریافت کنید و کاری به پروژه در آدرس گیت‌هاب نداشته باشید زیرا تغییرات جزئی در کد کتابخانه انجام شده است.) با امکاناتی که در اختیار داریم (فایل wrapper.py) کارایی کد پایتون نوشته شده را تغییر دهیم.

پروژه اولیه را از این آدرس دریافت کنید.

توجه: تنها فایل wrapper.py را میتوانید تغییر دهید.

شرح کارهایی که باید انجام دهید به صورت زیر است:

  • اگر اکنون در تاریخ datetime(2010, 1, 6, 13, 16) هستیم و تابع should_run صدا زده شد باید خروجی این تابع حتما False باشد.
  • طبق کارایی کتابخانه گفته شده است در صورتی که every(A).to(B) داریم تابع در هر N ثانیه/دقیقه/... به صورتی که ‍A <= N <= B است اجرا می‌شود شما آنرا به B <= N <= A+B تغییر دهید.
  • در توصیف __repr__ برای Job هیچگاه کلمه ‍Every‍‍‍ به کار نرود به جای آن کلمه ‍Har به کار رود.

فایل ارسالی: فایل ارسالی شما باید به صورت زیر باشد.

<your-zip-name>.zip
    └── schedule
         └── wrapper.py
Plain text

شفاف سازی/Django


کارها:

  • ثبت‌کامنت
  • نمایش کامنت‌ها

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

ابتدا کد ها را خوانده و به فهم نسبی از پروژه برسید. در این سوال قصد داریم در قسمت Questions کار کنیم.

این قسمت از سایت، یک سایت پرسش و پاسخ مانند سایت Stack overflow است که در آن پرسش و پاسخ صورت می‌گیرد.

در این قسمت اگر ابهامی در سوال وجود داشته باشد، افرادی که می‌خواهند به سوال پاسخ دهند باید بتوانند سوال خود را بپرسند تا کسی که سوال را مطرح کرده است ابهام سوال را برطرف کند. برای این کار در سایت Stack overflow بخشی برای گذاشتن کامنت روی سوال ها وجود دارد که در سیستم مورد بحث سوال در نظر گرفته نشده است.
حال از شما می‌خواهیم این قابلیت را به سایت اضافه کنید.

۱. ثبت کامنت:🔗

میخواهیم یک url وجود داشته باشد تا کامنت های خود را به آن ارسال کنیم. آدرس Url باید به شکل زیر باشد.

/questions/question/comment
Plain text
  • این url باید فقط کامنت هایی را بپذیرد که با متد POST ارسال شده اند.
  • قرار است این url با استفاده از Ajax فراخوانی شود.
  • در دیکشنری داده های POST کلید های question و comment باید وجود داشته باشد که به ترتیب id سوالی که روی آن کامنت می‌گذاریم و متن کامنت است.
  • کاربر ای که روی سوال کامنت گذاشته است همان کاربری است که در حال حاضر در سایت لاگین است. بنابراین کاربرانی که login نکرده اند نباید بتوانند روی سوال کامنت بگذارند.
  • این تابع باید یک json به شکل زیر بازگرداند که مشخص کننده وضعیت ثبت کامنت است.
{ "status": <status-code> }
Plain text
  • در صورتی که ثبت کامنت موفقیت آمیز بود، کد وضعیت 0 بازگردد.
  • در صورتی که متن کامنت خالی بود یا فقط شامل white space بود این کامنت نباید ثبت شود و کد وضعیت 1 بازگردد.
  • در صورتی که سوالی با id فرستاده شده وجود نداشت کد وضعیت 2 بازگردد.
  • در صورتی که متد ارسالی به url مورد نظر POST نبود، کامنت ثبت نشود و کد وضعیت 3 بازگردد.

نمایش کامنت ها:🔗

تمام کامنت های مربوط به یک سوال باید در صفحه‌ی مربوط به سوال، یعنی url /questions/<question-id> نمایش داده شوند.

  • کنار هر کامنت باید username کسی که کامنت گذاشته نیز نمایش یابد.

تذکرات:🔗

  • تذکر: قابلیت‌ها فعلی سایت نباید تغییری کند!
  • از اهداف این سوال این است که بتوانید یک پروژه را با توجه به توضیحات ارائه دهنده ی پروژه اجرا کنید. بنابراین اجرا نشدن پروژه به معنای اشتباه بودن کد نیست.

فایل آپلودی

کل پروژه را zip کرده و ارسال کنید. فقط توجه کنید که فایل manage.py باید مستقیما در ریشه‌ی فایل zip باشد و در هیچ پوشه دیگری نباشد. یعنی ساختار فایل zip باید مانند زیر باشد.

<Your-zip-name>.zip
    ├── bootcamp
    │   ├── activities
    │   │   ├── __init__.py
    │   │   ├── migrations
    │   │   ├── models.py
    │   │   ├── static
    │   │   ├── templates
    │   │   ├── tests
    │   │   └── views.py
    │   ├── articles
    │   │   ├── forms.py
    │   │   ├── __init__.py
    │   │   └──  ...
    │   ├── authentication
    │   │   ├── forms.py
    │   │   └──  ...
    │   ├── core
    │   │   └──  ...
    │   ├── decorators.py
    │   ├── feeds
    │   │   └──  ...
    │   ├── __init__.py
    │   ├── locale
    │   │   ├── es
    │   │   ├── fr
    │   │   ├── jp
    │   │   ├── pt_BR
    │   │   └── zh_CN
    │   ├── messenger
    │   │   └──  ...
    │   ├── questions
    │   │   └──  ...
    │   ├── search
    │   │   ├── __init__.py
    │   │   ├── migrations
    │   │   └──  ...
    │   ├── settings.py
    │   ├── static
    │   │   ├── css
    │   │   ├── img
    │   │   └── js
    │   ├── templates
    │   │   ├── 400.html
    │   │   ├── 403.html
    │   │   ├── 404.html
    │   │   ├── 500.html
    │   │   ├── base.html
    │   │   ├── markdown_editor.html
    │   │   └── paginator.html
    │   ├── urls.py
    │   └── wsgi.py
    ├── LICENSE
    ├── manage.py
    ├── README.md
    ├── requirements.txt
    ├── runtime.txt
    └── setup.cfg
Plain text

فرم ثبت نام/Django


کارها:

  • نمایش رشته راهنمایی ثبت‌نام در کنار فیلد مربوطه
  • نمایش خطای مناسب
  • پیشنهاد کلمه کاربری مناسب

تعریف پروژه: در این سوال قصد داریم تا مهارت خواندن و تغییر کد های موجود را بسنجیم. بدین منظور یک پروژه موجود را از Github درنظر گرفته‌ایم. شما می‌توانید از این لینک پروژه را دانلود کنید و از آن به عنوان مبنا توسعه کد استفاده کنید. این فایل یک ورژن خاص از این پروژه در گیت هاب است. برای توضیحات بیشتر و توضیح نحوه اجرای پروژه به این صفحه مراجعه کنید.

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

مشاورین برندیگ کوئرا پیشنهاد دادند که کاربران را مجبور کنیم در نام کاربری خود از کلمه quera استفاده کنند. بنابراین ما از شما می‌خواهیم پس از خواندن کد های پروژه تغییرات زیر را در آن اعمال کنید.

۱. تمام کاربران جدید هنگام ثبت‌نام باید ازین امر مطلع شوند. بنابراین رشته‌ی Usernames must contain the word "Quera" را عینا در کنار فیلد مربوط به username نمایش دهید تا کاربر قبل از وارد کردن نام کاربری برای خود از این امر مطلع شود.

۲. اگر کاربری username ای را وارد کرد که شرط مورد نظر راجع به آن صدق نمی‌کرد، بعد از ارسال فرم، یک خطا با رنگ قرمز و با متن دقیقا Username does not contain quera به کاربر نمایش داده شود.

۳. در تمام حالت هایی که برای فیلد username خطا گرفته می‌شود باید به شکل زیر یک نام کاربری معتبر جدید به کاربر پیشنهاد دهید. نام کاربری ای معتبر است که شامل کلمه quera باشد، در سیستم موجود نباشد و فقط شامل کارکتر های مجاز (حروف A تا Z انگلیسی به صورت بزرگ و کوچک، اعداد، نقطه و underline) باشد.

برای بدست آوردن نام کاربری برای پیشنهاد باید مراحل الگوریتم زیر را به ترتیب انجام دهید:

  • اگر نام کاربری وارد شده توسط کاربر شامل یک یا بیشتر کارکتر غیر مجاز بود، کارکتر های غیر مجاز را از رشته ورودی حذف کنید. برای مثال رشته‌ی 'ab+bas' یک نام کاربری با کارکتر غیرمجاز '+' است که خروجی این مرحله رشته abbas است.

  • اگر نام کاربری بدست آمده از مرحله قبل شامل کلمه quera نبود، کلمه quera_ را به اول نام کاربری پیشنهادی اضافه کنید. برای مثال خروجی این مرحله رشته quera_abbas خواهد شد.

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

    • اگر در انتهای نام underline یا underline و یک عدد وجود داشت آن ها را حذف کنید.(توجه کنید که تنها یک underline یا یک underline عدد را حذف کنید. به مثال های زیر توجه کنید.)
    • به انتهای نام پیشنهادی یک underline و یک عدد اضافه کنید. به این صورت که در ابتدا _1 را به انتهای نام اضافه کنید. اگر در سیستم وجود داشت، _2 را اضافه کنید و به همین ترتیب تا نامی یافت شود که معتبر باشد.

نکته مهم: توجه کنید که اگر در انتهای نامی که کاربر وارد کرده است یک underline و عدد وجود داشت ولی در سیستم موجود بود، شما نباید یک underline و عدد دیگر به آن اضافه کنید، بلکه باید تنها عدد را تغییر دهید و کوچکترین عددی را بگذارید که در سیستم موجود نیست! الگوریتم بالا این نکته را تضمین می‌کند.

  • نام پیشنهادی بدست آمده باید بعد از کلمه‌ی Suggest: و در بین دو کارکتر '*' در فرم ثبت‌نام زیر فیلد مربوطه نشان داده شود.

برای مثال:

  • اگر کاربر نام کاربری را Ali وارد کرد که دارای Quera نیست، سیستم نام quera_Ali را در صورتی که قبلا در سیستم وجود نداشت به کاربر پیشنهاد دهد.

  • اگر کاربر Quera10 وارد کرد که قبلا وجود داشت سیستم می‌تواند کلمه Quera10_1 را پیشنهاد دهد ولی اگر کاربر رشته Quera_10 را وارد کرد و در سیستم موجود بود شما نباید نام Quera_10_1 را پیشنهاد دهید، بلکه باید نام Quera_1 را در صورت معتبر بودن پیشنهاد دهید.

  • اگر کاربر رشته Quera__ را وارد کرد که از قبل در سیستم موجود بود، سیستم باید نام Quera__1 را پیشنهاد دهد. همچنین برای رشته Quera__1 نیز رشته Quera__2 را پیشنهاد دهید.

  • همچنین اگر کاربر کلمه ای مانند ab+bas وارد کرد که شامل کارکتر غیرمجاز است، سیستم ممکن است نام quera_abbas_1 را در صورت معتبر بودن پیشنهاد دهد. به تصویر زیر توجه کنید:

توضیح تصویر

  • برنامه نباید به بزرگی و کوچکی کلمه quera حساس باشد. یعنی اگر کلمه QuErA نیز در نام‌کابری بود نباید خطایی گرفته شود.
  • تذکر: کارایی فعلی سایت نباید تغییری کند! برای مثال در صورت موجود بودن نام کاربری فعلی در سیستم، رشته User with this Username already exists یا برای نام کاربری هایی که کارکتر های غیر مجاز دارند رشته Enter a valid username نشان داده می‌شود که این کارایی نباید از بین برود.
  • از اهداف این سوال این است که بتوانید یک پروژه را با توجه به توضیحات ارائه دهنده ی پروژه اجرا کنید. بنابراین اجرا نشدن پروژه به معنای اشتباه بودن کد نیست.

فایل آپلودی

کل پروژه یا تنها فایل هایی که تغییر داده اید را zip کرده و ارسال کنید. فقط توجه کنید که فایل manage.py باید مستقیما در ریشه‌ی فایل zip باشد و در هیچ پوشه دیگری نباشد.
توجه کنید که اگر همه فایل ها را ارسال نمی‌کنید ساختار فایل ها را تغییر ندهید. یعنی ساختار فایل فشرده حتما باید مانند زیر باشد.

<Your-zip-name>.zip
    ├── bootcamp
    │   ├── activities
    │   │   ├── __init__.py
    │   │   ├── migrations
    │   │   ├── models.py
    │   │   ├── static
    │   │   ├── templates
    │   │   ├── tests
    │   │   └── views.py
    │   ├── articles
    │   │   ├── forms.py
    │   │   ├── __init__.py
    │   │   └──  ...
    │   ├── authentication
    │   │   ├── forms.py
    │   │   └──  ...
    │   ├── core
    │   │   └──  ...
    │   ├── decorators.py
    │   ├── feeds
    │   │   └──  ...
    │   ├── __init__.py
    │   ├── locale
    │   │   ├── es
    │   │   └── ...
    │   ├── messenger
    │   │   └──  ...
    │   ├── questions
    │   │   └──  ...
    │   ├── search
    │   │   ├── __init__.py
    │   │   ├── migrations
    │   │   └──  ...
    │   ├── settings.py
    │   ├── static
    │   │   ├── css
    │   │   ├── img
    │   │   └── js
    │   ├── templates
    │   │   ├── 400.html
    │   │   ├── 403.html
    │   │   └── ...
    │   ├── urls.py
    │   └── wsgi.py
    ├── LICENSE
    ├── manage.py
    ├── README.md
    ├── requirements.txt
    ├── runtime.txt
    └── setup.cfg
Plain text