target$ = "METHINKS IT IS LIKE A WEASEL" parent$ = "IU RFSGJABGOLYWF XSMFXNIABKT" mutation_rate = 0.5 children% = 10 DIM child$(children%) REPEAT bestfitness = 0 bestindex% = 0 FOR index% = 1 TO children% child$(index%) = FNmutate(parent$, mutation_rate) fitness = FNfitness(target$, child$(index%)) IF fitness > bestfitness THEN bestfitness = fitness bestindex% = index% ENDIF NEXT index% parent$ = child$(bestindex%) PRINT parent$ UNTIL parent$ = target$ END DEF FNfitness(text$, ref$) LOCAL I%, F% FOR I% = 1 TO LEN(text$) IF MID$(text$, I%, 1) = MID$(ref$, I%, 1) THEN F% += 1 NEXT = F% / LEN(text$) DEF FNmutate(text$, rate) LOCAL C% IF rate > RND(1) THEN C% = 63+RND(27) IF C% = 64 C% = 32 MID$(text$, RND(LEN(text$)), 1) = CHR$(C%) ENDIF = text$