{myadvertisements[zone_3]}
سهيل
Homo Interneticus
المشاركات: 687
الانضمام: Mar 2006
|
لغز للذين يحبون الألغاز الصعبة
محاولة بلغة البرمجة 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-20-2008, 11:48 PM بواسطة سهيل.)
|
|
08-20-2008, 11:00 PM |
|
{myadvertisements[zone_3]}
{myadvertisements[zone_3]}
{myadvertisements[zone_3]}
{myadvertisements[zone_3]}
|