برای آشنایی با قالب صورت سوال در Quera اینجا را مشاهده کنید و برای آشنایی با نحوه‌ی کار با ورودی و خروجی استاندارد (stdin و stdout) در زبان‌های مختلف، اینجا را ببینید.

در مورد سوالات پروژه‌ای می‌توانید انتخاب کنید که کدتان را به یکی از زبان‌های پایتون یا جاوا بزنید و در سوال مربوطه می‌توانید راه‌حلتان را ارسال کنید.

پروژه‌ای - واحد حفاظت و امنیت - پایتون


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

فایل source را دانلود کرده و کلاس Security را ببینید. در این کلاس سه متد وجود دارد که مطابق با توضیحات داده‌شده باید آن‌ها را پیاده‎سازی کنید:

متد encrypt(self, s)🔗

یک رشته به عنوان ورودی این متد داده می‌شود و معادل رمزنگاری‌شده آن در خروجی برگردانده می‌شود.

با توجه به توضیحات زیر، معادل رمز‌نگاری‌شده ورودی را محاسبه کنید.

  • ابتدا رشته به زیررشته‌های یونیفورمش تقسیم می‌شود و سپس مقدار رمزنگاری شده رشته اصلی از به هم چسباندن مقدار رمزنگاری شده رشته‌های یونیفورم به دست می‌آید.
  • با در کنار هم قرار دادن وزن تمام زیر‌رشته‎های یونیفرمِ یک رشته، یک عبارت عددی به دست می‌آید که همان معادل رمز‌نگاری‌شده رشته ورودی است.
  • رشته یونیفرم رشته‎ای است که تمام کاراکتر‌هایش با هم یکسان باشند. مانند c یا aa یا ccc
  • برای یک رشته یونیفورم مقدار رمزنگاری این گونه به دست می‌آید که به ازای هر کاراکتر مقدار رشته‌ای ضرب وزن آن کاراکتر در تعداد کاراکترهایی که قبلش آمده به علاوه یک را به انتهای جواب اضافه می‌کنیم. (این کار را از اول رشته ضروع می‌کنیم و تا آخر آن طی می‌کنیم.)
  • برای مثال مقدار رمزنگاری رشته یونیفورم cccc برابر یا 36912 است.
  • وزن یک کاراکتر برابر است با کد عددی آن کاراکتر منهای عدد 96. مثلا کد کاراکتر a برابر 97 و وزن آن برابر با 9796=197-96=1 است.

    مثال🔗

ورودی

abcccdd
Plain text

خروجی

1236948
Plain text

توضیح🔗

کلیه زیررشته‌های یونیفرم حاصل از رشته ورودی و وزن آن‌ها در ادامه لیست شده:

وزن زیررشته یونیفرم
1 a
2 b
369 ccc
48 dd

که با در کنار هم قرار دادن وزن آن‌ها، به عبارت 1236948 می‌رسیم.

متد is_social_account_info(self, param)🔗

این متد یک رشته به عنوان پارامتر ورودی دریافت کرده و در خروجی مشخص می‌کند که آیا این رشته حاوی آدرس مربوط به یک اکانت شبکه اجتماعی هست یا نه. در زمان استخدام، واحد حفاظت و امنیت، آدرس کلیه اکانت‌های عمومی (public) افراد را پرسیده و به شکل زیر در اسناد ذخیره کرده است:

[Social Network Name]:www.[domain]/[Account Name]

برای مثال آدرس اکانت توییتر علی به این صورت ذخیره شده است:

Twitter:www.twitter.com/javalover1990

نکات

  1. اسم شبکه اجتماعی همواره با حرف بزرگ انگلیسی شروع می‌شود.
  2. دامنه فقط شامل حروف کوچک انگلیسی و عدد و کاراکتر . است.
  3. آدرس اکانت شامل حرف یا عدد یا علامت زیرخط (_) است.

    مثال🔗

ورودی

Instagram:www.instagram.com/javafan
Plain text

خروجی

True
Plain text

متد secure(self, info)🔗

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

  1. با استفاده از متد is_social_account_info بخش‌هایی که مربوط به اطلاعات حساب‌های کاربری است را پیدا کنید.
  2. با استفاده از متد encrypt بخش Account Name را رمزنگاری کنید.

    مثال🔗

ورودی

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

FirstName:Ali, LastName:Alavi, BirthDate:1990/02/02 Gender:male Instagram:www.instagram.com/aalavi Degree:Master Twitter:www.twiter.com/alaviii imdb:www.imdb.com/alavi
Plain text

خروجی

FirstName:Ali, LastName:Alavi, BirthDate:1990/02/02 Gender:male Instagram:www.instagram.com/12121229 Degree:Master Twitter:www.twiter.com/11212291827 imdb:www.imdb.com/alavi
Plain text

آنچه باید آپلود کنید:🔗

یک فایل zip که وقتی آن را باز می‌کنیم، فقط فایل security.py را ببینیم.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.