منتديات الجلفة لكل الجزائريين و العرب - عرض مشاركة واحدة - فتح لغز الشيخ الذي خلف 81 نخلة و 9 أولاد بالبايثون
عرض مشاركة واحدة
قديم 2016-06-20, 21:26   رقم المشاركة : 1
معلومات العضو
nedjoui
عضو مجتهـد
 
الصورة الرمزية nedjoui
 

 

 
الأوسمة
وسام المسابقة اليومية 
إحصائية العضو










B18 فتح لغز الشيخ الذي خلف 81 نخلة و 9 أولاد بالبايثون

السلام علكيم
هذه الأسطر من أجل فتح اللغز التالي بالبايثون وفهمه يتطلب معرفة ولو بسيطة بالبايثون
اللغز:
شيخ لديه 81 نخلة النخلة الأولى تنتج 1 كغ والثانية 2 كغ والثالثة 3 كغ...... والنخلة الثمانون تنتج 80 كغ والواحد وثمانون تنتج 81 كغ
توفى الشيخ وترك تسعة أولاد سيرث كل واحد منهم تسع نخلات ولكن يجب أن تكون كمية التمر لكل واحد منهم متساوية
عليك الآن بتقسيم هذا النخل على الأولاد
# حساب كمية التمر التي سيتحصل عليها كل ابن
# إنشاء ليست عناصرها من واحد إلى واحد وثمانون. كتبنا إثنان وثمانون لأن البايثون لا يحسب العدد الأخير
# حساب مجموع كل التمر وقسمته على تسعة وهو عدد الأولاد

كود:
date=list(range(1,82))  
print("كمية التمر التي سيتحصل عليها كل ابن هي: ",sum(date)/9)
# القيام بتوزيع النخل بالأسطر التالية

# 1- جلب مودل الاختيار العشوائي من مودل العشوائية في numpy وذلك لأن هذا الموديل يمكننا من اختيار مجموعة من الأعداد العشوائية في آن واحد من قائمة
# هذه الطريقة from random import choice تمكننا من اختيار عدد واحد ولهذا فهي لا تفيدنا في هذه الحالة ولكن يمكننا أن ننشئ function تمكننا من اختيار مجموعة أعداد عشوائيا
# يقوم البايثون بجلب الموديل بهذا السطر from numpy.random import choice فإن لم يجده ينتقل إلى الاستثناء بعد except*وهو إنشاء دالة تعمل نفس عمل الموديل.
كود:
try:
   from numpy.random import choice
   
except:      # numpy.random.choice إنشاء دالة اختيار عشوائي معادلة لهذه  
   def choice(a, x=9):  #  كتب اسم شويز حتى لا نغير في الأسطر التي في الأسفل
        l=[]                    # إنشاء قائمة فارغة
        from random import choice    #  جلب شويز من الموديل العشوائية راندم يكون مع البايثون ولا يحتاج إلى إضافة
        for i in range(x):     #    تحديد عدد الاختيارات 
           l.append(choice(a))        #  إضافة عدد الخيارات إلى القائمة
        return l
# 2- إنشاء قائمة بعدد النخل
كود:
a=list(range(1,82))
x=0   # نحتاج إليه فيما بعد
# 3- الدخول في الحلقة التكرارية للبحث عن الاحتمالات التسعة
كود:
while True:
   f=list(choice(a,9))     #  اختيار تسعة أعداد عشوائيا من قائمة النخيل الكلية لإنشاء قائمة جديدة بتسع نخلات
   f.sort()                      #   القيام بترتيب الأعداد في القائمة
   x=x+1                      # يقوم بإضافة واحد للإكس في كل مرة قام بالتجريب وعندما ينهي العمل سنتعرف على مرات التجريب
   if sum(f)==369 and len(set(f))==9:   # sum(f)==369 للتأكد من أن وزن التمر في القائمة صحيح # len(set(f))==9 لتجنب تكرار الأعداد في القائمة الواحدة
         print(f)                      #  إذا تحقق الشرطين في الأعلى قم بطبع القائمة لأنها صحيحة
         a=list(set(a)-set(f))     #  احذف عناصر القائمة التي طبعتها من قائمة النخيل الكلية
   else:                              # إذا لم تتحقق الشروط في الأعلى أعد المحاولة
     pass
   if len(a)==0:    # إنهاء الحلقة التكرارية عند الحصول على كل النتائج
            break
print("")       # سطر فارغ
print("عدد الإحتمالات التي قام بها البرنامج لإيجاد الحل هي: ",x)   # يقوم البايثون بطبع عدد مرات التجريب التي قام بها
رابط التحميل: https://www.4shared.com/archive/ZSON3...__81___9_.html
المعذرة عن الشرح الغير كافي وإليكم بعض النتائج المتحصل عليها بهذا الأسطر:
كمية التمر التي سيتحصل عليها كل ابن هي: 369.0

[11, 15, 19, 22, 31, 62, 68, 70, 71]
[1, 4, 18, 25, 29, 65, 69, 78, 80]
[8, 12, 17, 32, 46, 54, 61, 67, 72]
[9, 24, 30, 42, 43, 44, 48, 50, 79]
[10, 23, 36, 37, 40, 47, 52, 60, 64]
[7, 14, 20, 34, 41, 49, 51, 76, 77]
[3, 5, 33, 38, 53, 55, 57, 59, 66]
[2, 6, 21, 27, 45, 58, 63, 73, 74]
[13, 16, 26, 28, 35, 39, 56, 75, 81]

عدد الإحتمالات التي قام بها البرنامج لإيجاد الحل هي: 6911
كمية التمر التي سيتحصل عليها كل ابن هي: 369.0

[4, 21, 22, 27, 44, 46, 59, 72, 74]
[6, 11, 29, 34, 47, 49, 57, 67, 69]
[5, 16, 28, 40, 42, 45, 62, 65, 66]
[9, 15, 18, 26, 35, 58, 63, 68, 77]
[3, 7, 13, 32, 37, 56, 64, 78, 79]
[10, 12, 20, 23, 39, 43, 70, 71, 81]
[1, 14, 25, 31, 38, 52, 53, 75, 80]
[2, 19, 24, 36, 48, 50, 54, 60, 76]
[8, 17, 30, 33, 41, 51, 55, 61, 73]

عدد الإحتمالات التي قام بها البرنامج لإيجاد الحل هي: 6053
كمية التمر التي سيتحصل عليها كل ابن هي: 369.0

[3, 14, 22, 28, 43, 48, 59, 75, 77]
[1, 18, 27, 32, 38, 58, 60, 63, 72]
[6, 7, 24, 33, 40, 47, 66, 70, 76]
[5, 20, 21, 30, 34, 36, 65, 78, 80]
[4, 10, 16, 37, 41, 52, 55, 73, 81]
[2, 12, 39, 44, 45, 46, 49, 53, 79]
[8, 13, 26, 29, 31, 54, 68, 69, 71]
[11, 15, 19, 25, 51, 56, 61, 64, 67]
[9, 17, 23, 35, 42, 50, 57, 62, 74]

عدد الإحتمالات التي قام بها البرنامج لإيجاد الحل هي: 5335
كمية التمر التي سيتحصل عليها كل ابن هي: 369.0

[7, 13, 22, 41, 43, 48, 59, 60, 76]
[17, 25, 26, 28, 30, 49, 54, 63, 77]
[2, 16, 34, 35, 42, 50, 51, 68, 71]
[5, 18, 23, 29, 40, 57, 58, 67, 72]
[1, 6, 19, 27, 36, 62, 64, 75, 79]
[4, 14, 21, 31, 33, 55, 56, 74, 81]
[11, 12, 20, 38, 45, 46, 53, 66, 78]
[3, 9, 15, 39, 44, 47, 69, 70, 73]
[8, 10, 24, 32, 37, 52, 61, 65, 80]

عدد الإحتمالات التي قام بها البرنامج لإيجاد الحل هي: 4956
كمية التمر التي سيتحصل عليها كل ابن هي: 369.0

[2, 13, 25, 28, 41, 42, 67, 74, 77]
[15, 19, 23, 26, 48, 49, 56, 61, 72]
[5, 17, 20, 27, 51, 52, 60, 62, 75]
[12, 16, 37, 38, 44, 45, 46, 58, 73]
[7, 8, 35, 40, 47, 50, 53, 63, 66]
[3, 9, 21, 29, 43, 54, 65, 69, 76]
[4, 18, 24, 31, 33, 39, 68, 71, 81]
[1, 6, 14, 34, 36, 55, 64, 79, 80]
[10, 11, 22, 30, 32, 57, 59, 70, 78]

عدد الإحتمالات التي قام بها البرنامج لإيجاد الحل هي: 4836
كمية التمر التي سيتحصل عليها كل ابن هي: 369.0

[1, 15, 25, 27, 44, 48, 58, 73, 78]
[17, 21, 24, 36, 42, 51, 53, 60, 65]
[4, 19, 20, 31, 41, 49, 63, 70, 72]
[6, 14, 22, 34, 39, 45, 54, 76, 79]
[5, 11, 16, 26, 43, 57, 59, 75, 77]
[3, 10, 13, 35, 37, 61, 64, 66, 80]
[18, 23, 28, 30, 32, 47, 55, 67, 69]
[2, 8, 29, 33, 40, 46, 62, 68, 81]
[7, 9, 12, 38, 50, 52, 56, 71, 74]

عدد الإحتمالات التي قام بها البرنامج لإيجاد الحل هي: 4507
كمية التمر التي سيتحصل عليها كل ابن هي: 369.0
[9, 22, 23, 26, 29, 30, 74, 76, 80]
[2, 19, 34, 41, 42, 47, 52, 54, 78]
[4, 18, 25, 36, 38, 50, 53, 70, 75]
[1, 11, 14, 27, 43, 65, 66, 69, 73]
[6, 16, 20, 33, 35, 58, 59, 63, 79]
[8, 13, 15, 31, 45, 55, 57, 68, 77]
[3, 17, 32, 37, 40, 51, 60, 62, 67]
[7, 10, 24, 39, 44, 46, 56, 71, 72]
[5, 12, 21, 28, 48, 49, 61, 64, 81]
عدد الإحتمالات التي قام بها البرنامج لإيجاد الحل هي: 6557
كمية التمر التي سيتحصل عليها كل ابن هي: 369.0
[3, 11, 27, 33, 50, 51, 58, 64, 72]
[15, 19, 20, 29, 30, 52, 55, 74, 75]
[1, 28, 31, 35, 36, 46, 61, 65, 66]
[4, 9, 17, 41, 42, 43, 57, 77, 79]
[5, 12, 23, 32, 34, 44, 70, 71, 78]
[14, 18, 21, 25, 48, 53, 59, 62, 69]
[7, 10, 16, 24, 45, 56, 63, 68, 80]
[2, 22, 26, 37, 38, 47, 49, 67, 81]
[6, 8, 13, 39, 40, 54, 60, 73, 76]
عدد الإحتمالات التي قام بها البرنامج لإيجاد الحل هي: 6346








 

الملفات المرفقة
نوع الملف: rar فتح لغز الشيخ الذي خلف 81 نخلة و 9 أولاد.rar‏ (71.7 كيلوبايت, المشاهدات 8)

رد مع اقتباس