45 lines
1007 B
Plaintext
45 lines
1007 B
Plaintext
make "target "|METHINKS IT IS LIKE A WEASEL|
|
|
|
|
to distance :w
|
|
output reduce "sum (map.se [ifelse equal? ?1 ?2 [0][1]] :w :target)
|
|
end
|
|
|
|
to random.letter
|
|
output pick "| ABCDEFGHIJKLMNOPQRSTUVWXYZ|
|
|
end
|
|
|
|
to mutate :parent :rate
|
|
output map [ifelse random 100 < :rate [random.letter] [?]] :parent
|
|
end
|
|
|
|
make "C 100
|
|
make "mutate.rate 10 ; percent
|
|
|
|
to breed :parent
|
|
make "parent.distance distance :parent
|
|
localmake "best.child :parent
|
|
repeat :C [
|
|
localmake "child mutate :parent :mutate.rate
|
|
localmake "child.distance distance :child
|
|
if greater? :parent.distance :child.distance [
|
|
make "parent.distance :child.distance
|
|
make "best.child :child
|
|
]
|
|
]
|
|
output :best.child
|
|
end
|
|
|
|
to progress
|
|
output (sentence :trials :parent "distance: :parent.distance)
|
|
end
|
|
|
|
to evolve
|
|
make "parent cascade count :target [lput random.letter ?] "||
|
|
make "trials 0
|
|
while [not equal? :parent :target] [
|
|
make "parent breed :parent
|
|
print progress
|
|
make "trials :trials + 1
|
|
]
|
|
end
|