69 lines
916 B
Plaintext
69 lines
916 B
Plaintext
integer
|
|
fitness(data t, data b)
|
|
{
|
|
integer c, f, i;
|
|
|
|
f = 0;
|
|
|
|
for (i, c in b) {
|
|
f += sign(t[i] ^ c);
|
|
}
|
|
|
|
f;
|
|
}
|
|
|
|
void
|
|
mutate(data e, data b, data u)
|
|
{
|
|
integer c;
|
|
|
|
for (, c in b) {
|
|
e.append(drand(15) ? c : u[drand(26)]);
|
|
}
|
|
}
|
|
|
|
integer
|
|
main(void)
|
|
{
|
|
data b, t, u;
|
|
integer f, i;
|
|
|
|
t = "METHINK IT IS LIKE A WEASEL";
|
|
u = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
|
|
|
|
i = ~t;
|
|
while (i) {
|
|
i -= 1;
|
|
b.append(u[drand(26)]);
|
|
}
|
|
|
|
f = fitness(t, b);
|
|
while (f) {
|
|
data n;
|
|
integer a;
|
|
|
|
o_form("/lw4/~\n", f, b);
|
|
|
|
n = b;
|
|
|
|
i = 32;
|
|
while (i) {
|
|
data c;
|
|
|
|
i -= 1;
|
|
mutate(c, b, u);
|
|
a = fitness(t, c);
|
|
if (a < f) {
|
|
f = a;
|
|
n = c;
|
|
}
|
|
}
|
|
|
|
b = n;
|
|
}
|
|
|
|
o_form("/lw4/~\n", f, b);
|
|
|
|
return 0;
|
|
}
|