لغز  للذين يحبون الألغاز الصعبة - philalethist -  08-20-2008 
 
 
Array 
بدلا من أن أفكر بحل المسألة ذهنيا ,سأحاول كتابة برنامج يقوم باختبار جميع الحالات الممكنة.  
يتبع ...... 
[/quote] 
 
هذا هو الكسل المبدع الخلاق الذي كنت أتحدث عنه :thumbup: 
 
لا فض كسلك عزيزي سهيل :aplaudit: 
نحن هنا لنستمع ونهنأ ونقر عينا لا لنتعذب بحل الألغاز والعقد :no2: 
 
 
 
لغز  للذين يحبون الألغاز الصعبة - سهيل -  08-20-2008 
 
 
محاولة بلغة البرمجة Python 
 
كود: person_init=["n","d","b","g","s"] 
house_init=["green","white","red","yellow","blue"] 
pet_init=["horse","cat","bird","dog","fish"] 
cigarette_init=["rothmans","dunhill","whitfield","marlboro","pall mall"] 
drink_init=["beer","tea","milk","coffee","water"] 
 
def condition_1(): 
      for i in range(5): 
          if person[i]=="b" and house[i]=="red": 
              return True 
      return False 
 
def condition_2(): 
      for i in range(5): 
          if person[i]=="s" and pet[i]=="dog": 
              return True 
      return False 
 
def condition_3(): 
      for i in range(5): 
          if person[i]=="d" and drink[i]=="tea": 
              return True 
      return False 
 
def condition_4(): 
      for i in range(4): 
          if house[i]=="green" and house[i+1]=="white": 
              return True 
      return False 
 
def condition_5(): 
      for i in range(5): 
          if house[i]=="green" and drink[i]=="coffee": 
              return True 
      return False 
       
def condition_6(): 
      for i in range(5): 
          if cigarette[i]=="pall mall" and pet[i]=="bird": 
              return True 
      return False 
 
def condition_7(): 
    if drink[2]=="milk": 
      return True 
    else: 
      return False 
 
def condition_8(): 
      for i in range(5): 
          if house[i]=="yellow" and cigarette[i]=="dunhill": 
              return True 
      return False 
       
def condition_9(): 
      if person[0]=="n": return True 
      else: return False 
 
def condition_10(): 
      for i in range(4): 
          if cigarette[i]=="marlboro" and pet[i+1]=="cat" \ 
             or cigarette[i+1]=="marlboro" and pet[i]=="cat": 
                return True 
      return False 
 
def condition_11(): 
      for i in range(4): 
          if pet[i+1]=="horse" and cigarette[i]=="dunhill" \ 
             or pet[i]=="horse" and cigarette[i+1]=="dunhill": 
                return True 
      return False 
 
def condition_12(): 
      for i in range(5): 
          if cigarette[i]=="whitfield" and drink[i]=="beer": 
              return True 
      return False 
           
def condition_13(): 
      for i in range(4): 
          if person[i+1]=="n" and house[i]=="blue" \ 
             or person[i]=="n" and house[i+1]=="blue": 
                return True 
      return False 
     
def condition_14(): 
    for i in range(5): 
        if person[i]=="g" and cigarette[i]=="rothmans": 
            return True 
    return False 
     
def condition_15(): 
      for i in range(4): 
          if cigarette[i+1]=="marlboro" and drink[i]=="water" \ 
             or cigarette[i]=="marlboro" and drink[i+1]=="water": 
                return True 
      return False 
 
def all_conditions(): 
    if condition_1() and condition_2() and condition_3() and condition_4() \ 
         and condition_5() and condition_6() and condition_7() and condition_8() \ 
         and condition_9() and condition_10() and condition_11() and condition_12() \ 
         and condition_13() and condition_14() and condition_15(): 
        return True 
    return False 
 
 
class Possible_Combanations: 
    def __init__(self, aList): 
        self._list = aList[:] 
        self._result = [] 
 
    def __iter__(self): 
        return self.next() 
 
    def next(self): 
        for i in xrange(0, len(self._list)): 
            if self._list[i] not in self._result: 
                self._result.append(self._list[i]) 
                if len(self._result) == len(self._list): 
                    yield self._result[:] 
                else: 
                    for v in self.next(): 
                        yield v 
                self._result.pop() 
 
### Slove the problem 
try: 
    for person in Possible_Combanations(person_init): 
        for house in Possible_Combanations(house_init): 
            for drink in Possible_Combanations(drink_init): 
                for cigarette in Possible_Combanations(cigarette_init): 
                    for pet in Possible_Combanations(pet_init): 
                        if all_conditions(): 
                            print person 
                            print house 
                            print drink 
                            print cigarette 
                            print pet 
                            raise Exception 
except Exception: 
    print "End"
  
ناتج تنفيذ البرنامج : 
كود: ['n', 'd', 'b', 'g', 's'] 
['yellow', 'blue', 'red', 'green', 'white'] 
['water', 'tea', 'milk', 'coffee', 'beer'] 
['dunhill', 'marlboro', 'pall mall', 'rothmans', 'whitfield'] 
['cat', 'horse', 'bird', 'fish', 'dog'] 
End
  
هذا البرنامج يقوم بتوليد جميع الحالات (التركيبات) المحتملة و من أجل كل حالة يقوم بالتحقق من الشروط الخمسة عشر الواردة في نص المسألة (condition_1 ....condition_15)  
البرنامج يعاني مشكلة كبيرة, و هي أنه قد يستغرق زمنا طويلا جدا حتى يجد الحل (عدة ساعات), حسب الحالة الابتدائية التي انطلق منها البرنامج.  
أعتقد أن هناك طرق أسرع و أفضل لحل هذه المسألة برمجيا و ذلك عن طريق جعل البرنامج يقترب من الحل بشكل تدريجي أي يشابه الطريقة البشرية في الحل . أول ما يخطر على بالي هو طريقة البرمجة الجينية Genetic Programming أي يتم التهجين (بطريقة شبه عشوائية) بين بعض الحالات الاولية و توليد أجيال جديدة من الحالات ثم اصطفاء الحالات التي تحقق أكثر عدد من الشروط و اسقاط الحالات الضعيفة وهكذا تتكرر عملية التهجين و الاصطفاء بين الاجيال الجديدة حتى نصل إلى حالة تحقق جميع شروط المسألة. 
 
تحياتي لجميع الزملاء  
(f)
 
 
 
لغز  للذين يحبون الألغاز الصعبة - ماركيز -  08-21-2008 
 
 
^^^ 
قريبة جداً من فورتران fortran 90 
 
اعتقدت ان افضل من يحلها فورتران
 
 
 
لغز  للذين يحبون الألغاز الصعبة - gwgi -  09-23-2008 
 
 
عزيزي نبيل تحياتي لـ إلك،،،:9: 
 
 
بدي مساعدة!:con_razz: 
 
هل البيوت متجاورة بطريقة دائرية؟؟ 
 
 
 
 
 
 
لغز  للذين يحبون الألغاز الصعبة - نبيل حاجي نائف -  09-23-2008 
 
 
أهلاً ومرحباً بالأخ   gwgi 
 
البيوت متجاورة بشكل مستقيم   
 
تحياتي
 
 
 
 |