24 lines
639 B
Plaintext
24 lines
639 B
Plaintext
import <Utilities/Sequence.sl>;
|
|
|
|
AllowedChars := " ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
|
|
initializeParent(randChars(1)) := AllowedChars[randChars];
|
|
|
|
Fitness(target(1), current(1)) :=
|
|
let
|
|
fit[i] := true when target[i] = current[i];
|
|
in
|
|
size(fit);
|
|
|
|
Mutate(letter(0), rate(0), randRate(0), randChar(0)) :=
|
|
letter when randRate > rate
|
|
else
|
|
AllowedChars[randChar];
|
|
|
|
evolve(target(1), parent(1), C(0), P(0), rateRands(2), charRands(2)) :=
|
|
let
|
|
mutations[i] := Mutate(parent, P, rateRands[i], charRands[i]) foreach i within 1 ... C;
|
|
fitnesses := Fitness(target, mutations);
|
|
in
|
|
mutations[firstIndexOf(fitnesses, vectorMax(fitnesses))];
|