TARGET_PHRASE = "METHINKS IT IS LIKE A WEASEL" TARGET = TARGET_PHRASE.chars TARGET_LENGTH = TARGET.length CHAR_SET = TARGET.uniq def make_baby Array.new(TARGET_LENGTH).map {CHAR_SET.sample} end def mutate weasel, trait weasel[trait] = CHAR_SET.sample end baby_weasel = make_baby mutations = 0 TARGET_LENGTH.times do |i| while baby_weasel[i] != TARGET[i] mutate(baby_weasel, i) mutations += 1 puts baby_weasel.join end end puts "And it only required #{mutations} mutations!"