موبایل

حل مسئله رمز گم شده گوشی

به نام خدا

در این آموزش می خوایم یه مسئله جالب حل کنیم.

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

  • رمز ۵ رقمی عه
  • جمع رقم های پنجم و سوم برابر با ۱۴ عه
  • رقم اول، یک واحد از دو برابر رقم دوم کمتر عه
  • رقم چهارم یک واحد از رقم دوم بیشتر عه
  • جمع رقم های دوم و سوم برابر با ۱۰ عه
  • حاصل جمع تمام ارقام برابر با ۳۰ عه

با توجه به این اطلاعات رمز گوشی سینا رو پیدا کنید 🙂

حل مسئله

بسیار خوب در قدم اول باید هر عددی که احتمال می دهیم جواب باشد را تولید می کنیم (یعنی تمام عدد های طبیعی ۵ رقمی)

for ramz in range(100000):
    #code

بعد از ساخت تمام عدد ها باید به رقم های هر رمز دسترسی پیدا کنیم.

برای این کار ramz را به str تبدیل می کنیم تا به صورت یک شی به هر رقم ان دسترسی داشته باشیم.

سپس یک دیکشنری درست می کنیم و هر رقم را جداگونه مقدار دهی می کنیم.

نکته: از تابع zfill برای ۵ رقمی کردن همه رمز ها استفاده می کنیم برای مثال عدد ۱۲۳ تبدیل به ۰۰۱۲۳ می شود.

for ramz in range(100000):
    this_ramz = str(ramz).zfill(5)
    ramz_digits = {}
    ramz_digits['one'] = int(this_ramz[0])
    ramz_digits['two'] = int(this_ramz[1])
    ramz_digits['three'] = int(this_ramz[2])
    ramz_digits['four'] = int(this_ramz[3])
    ramz_digits['five'] = int(this_ramz[4])

حالا که به تمام عدد های احتمالی دسترسی داریم می توانیم چک بکنیم که عدد با شرایطی که قبلا ذکر شده است انطباق دارد یا خیر

برای راحتی کار از یک فانکشن استفاده می کنیم و نام اون رو ramz_is_ok می گذاریم

اگر همه شرط ها را وارد کنیم کد ما شبیه به همچین چیزی می شود

def ramz_is_ok(dic):
    if dic['five'] + dic['three'] == 14:
        if dic['one'] == dic['two'] * 2 - 1:
            if dic['four'] - dic['two'] == 1:
                if dic['two'] + dic['three'] == 10:
                    if dic_sum(dic) == 30:
                        print dic['one'],dic['two'],dic['three'],dic['four'],dic['five']
                        quit()

def dic_sum(dic):
    sum = 0
    for k, v in dic.items():
        sum += v
    return sum

کد کامل

def ramz_is_ok(dic):
    if dic['five'] + dic['three'] == 14:
        if dic['one'] == dic['two'] * 2 - 1:
            if dic['four'] - dic['two'] == 1:
                if dic['two'] + dic['three'] == 10:
                    if dic_sum(dic) == 30:
                        print dic['one'],dic['two'],dic['three'],dic['four'],dic['five']
                        quit()

def dic_sum(dic):
    sum = 0
    for k, v in dic.items():
        sum += v
    return sum

for ramz in range(100000):
    this_ramz = str(ramz).zfill(5)
    ramz_digits = {}
    ramz_digits['one'] = int(this_ramz[0])
    ramz_digits['two'] = int(this_ramz[1])
    ramz_digits['three'] = int(this_ramz[2])
    ramz_digits['four'] = int(this_ramz[3])
    ramz_digits['five'] = int(this_ramz[4])
    ramz_is_ok(ramz_digits)

 

منبع: jadi.net

نظر خود را بگویید

آدرس ایمیل شما منتشر نخواهد شد. قسمت های مورد نیاز علامت گذاری شده است *