def fitness(position): key = "".join(alphabet[i] for i in position) substitution = Substitution(alphabet, key) original_text = substitution.decrypt(cyphertext) frequency = Frequency(n_gram, alphabet) frequency.get_frequency(original_text) res = 0 for i in range(len(n_gram)): for j in range(len(frequency.ftab[i])): res += alpha[i] * abs(frequency.ftab[i][j] - target.ftab[i][j]) return res