تحديات بايثون 08**

:small_blue_diamond: تحدي “الرقم المتاهة” (Maze Number)

:green_circle: القواعد:

ابدأ بعدد معين .

ابحث عن أكبر رقم بين 2 و9 يقبل القسمة عليه بدون باقي .

اقسم العدد عليه، ثم كرر العملية مع الناتج الجديد .

استمر حتى تصل إلى 1 .

إذا وصلت إلى 1، فهذا يعني أن الرقم يمكنه الهروب من المتاهة! :tada:
أما إذا لم يقبل العدد القسمة علي اي رقم 2-9 فسيبقى الرقم عالقًا في المتاهة! :scream:

:small_blue_diamond: مثال 1: العدد 100

100 ÷ 5 = 20 :white_check_mark: (لأن 5 هو أكبر رقم بين 2 و9 يقبل القسمة عليه)

20 ÷ 5 = 4 :white_check_mark:

4 ÷ 4 = 1 :white_check_mark: :tada: (نجح الرقم في الخروج من المتاهة!)


:small_blue_diamond: مثال 2: الرقم 37

37 ليس له أي قاسم بين 2 و9 :x:

الرقم 37 عالق في المتاهة
المطلوب : ماهي الاعداد التي ستخرج من المتاهة والتي ستبقى عالقة؟ في نطاق عددي اختياري مثلا من 10 - 80.

#challenge08: maze number

def theMaze(start=10, end=55):
    got_out = []
    stuck = []

    for number in range(start, end+1):
        current = number

        while current > 1:

            for divisor in range(9,1,-1):
                if number % divisor == 0:
                    current /= divisor
                    break
            else:
                stuck.append(number)
                break
        else:
            got_out.append(number)
    
    print("\nThese numbers got out from the maze\n",got_out)
    print("\nThese numbers are stuck in the maze\n",stuck)

theMaze()

إعجاب واحد (1)

هذه طريقتي في الحل :

def if_ok (number):
  if number  == 0 : return False 
  ok = []
  for x in range (2, 10) : ok.append (x) if number % x == 0 else ""
  try : ok = ok [-1]
  except : return False 
  return True if number / ok == 1 else if_ok (number / ok)
ok = []
for x in range (10, 81) : ok.append (x) if if_ok (x) else ""
print (ok)
إعجاب واحد (1)