#Word Guess 04.30.07 #Harry Beddo #Period 3 import random import sys sol = "computer" n = len(sol) pop = [] iters = 500 def cost(word, sol): count = 0 for k in range(0, len(word)): count = count + (ord(word[k]) - ord(sol[k]))**2 return count def cost2(word,sol): count = 0 for k in range(0,len(word)): if (ord(word[k])-ord(sol[k])) == 0: count = count + 0 else: count = count + 1 return count def mutate(pop): for k in range(1, len(pop)): for m in range(0,n): if random.randint(1,100) <= 20: temp = pop[k][1] pop[k][1] = temp[:m] + chr(random.randint(97,122)) + temp[(m+1):] return pop #create initial population for k in range(0,64): s = "" for m in range(0, n): s = s[:] + chr( random.randint(97,122)) pop.append([cost2(s, sol),s]) pop.sort() #for k in range(0,24): # print pop[k] for k in range(0,iters): pop2 = [] for m in range(0,6): pop2.append (pop[m][1]) ind = random.randint(1,7) p1 = pop2[0] p2 = pop2[1] pop2.append(p1[:ind]+p2[ind:]) pop2.append(p2[:ind]+p1[ind:]) ind = random.randint(1,7) p1 = pop2[2] p2 = pop2[3] pop2.append(p1[:ind]+p2[ind:]) pop2.append(p2[:ind]+p1[ind:]) ind = random.randint(1,7) p1 = pop2[4] p2 = pop2[5] pop2.append(p1[:ind]+p2[ind:]) pop2.append(p2[:ind]+p1[ind:]) pop = [] for m in range(0,len(pop2)): pop.append([cost2(pop2[m],sol),pop2[m]]) pop.sort() mutate(pop) print pop[0] if pop[0][0]==0: break pop.sort() print k