Module WeaselAlgorithm2 { Print "Evolutionary Algorithm" \\ Weasel Algorithm \\ Using dynamic array, which expand if no fitness change, \\ and reduce to minimum when fitness changed l$="ABCDEFGHIJKLMNOPQRSTUVWXYZ " randomstring$=lambda$ l$ ->{ res$="" For i=1 to 28: res$+=Mid$(L$,Random(1,27),1):next i =res$ } m$="METHINKS IT IS LIKE A WEASEL" lm=len(m$) fitness=lambda m$, lm (this$)-> { score=0 : For i=1 to lm {score+=If(mid$(m$,i,1)=mid$(this$, i, 1)->1,0)} : =score } Mutate$=lambda$ l$ (w$)-> { for i=1 to len(w$) { if random(1,100)<=5 then { insert i, 1 w$=mid$(l$, random(1,27),1) } } =w$ } f$=randomstring$() topscore=0 last=0 Pen 11 {Print "Fitness |Target:", @(16),m$, @(47),"|Total Strings"} Print Over $(3,8), str$(topscore/28,"##0.0%"),"",$(0),f$, 0 count=0 gen=30 mut=0 { last=0 Dim a$(1 to gen)<0 Then { f$=a$(last) : gen=30 } Else gen+=50 Print Over $(3,8), str$(topscore/28,"##0.0%"), "",$(0),f$, mut : refresh count+=min(gen,i) If topscore<28 Then loop } Print Print "Results" Print "I found this:"; a$(last) Print "Total strings which evalute fitness:"; count Print "Done" } WeaselAlgorithm2