40 lines
1010 B
Plaintext
40 lines
1010 B
Plaintext
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$
|