| ゴール 全英字 文字数 上位群 世代数 | ゴール := 'METHINKSITISWEASEL'. 文字数 := ゴール size. 全英字 := Character alphabet asUppercase. 上位群 := OrderedCollection new. 300 timesRepeat: [ | 元文字列 | 元文字列 := ((1 to: 文字数) collect: [:idx | 全英字 atRandom]) as: String. 上位群 add: {元文字列 howManyMatch: ゴール. 元文字列}]. 世代数 := 0. World findATranscript: nil. [上位群 first last = ゴール] whileFalse: [ | 候補群 | 候補群 := OrderedCollection new. 上位群 do: [:each | 5 timesRepeat: [ | 変異文字列 | 変異文字列 := each last copy. 変異文字列 at: 文字数 atRandom put: 全英字 atRandom. 候補群 add: {変異文字列 howManyMatch: ゴール. 変異文字列}]]. 候補群 := 候補群 asArray sort: [:a :b | a first > b first]. 上位群 := 候補群 first: 300. Transcript cr; show: (世代数 := 世代数 + 1) -> 上位群 first]. ^世代数