如何用数组中的随机键替换字符串的随机部分?
How to replace random parts of string with random keys from array?
下面的代码正在替换字符串中的随机字符,我试图让它替换单词数组中的部分字符串。
genetic.mutate = function(entity) {
function replaceAt(str, index, character) {
return str.substr(0, index) + character + str.substr(index+character.length);
}
// chromosomal drift
var i = Math.floor(Math.random()*entity.length)
console.log(replaceAt(entity, i, String.fromCharCode(entity.charCodeAt(i) + (Math.floor(Math.random()*2) ? 1 : -1))));
return replaceAt(entity, i, String.fromCharCode(entity.charCodeAt(i) + (Math.floor(Math.random()*2) ? 1 : -1)));
};
实体是一串随机字符,长度为 "solution" 个文本字段值。 Mutate 函数使用 "charCode" + math random 来找到更接近解的字符,然后在适应度函数中,如果它接近解,它会为算法提供适应度点。如何更改 mutate 函数,使其尝试从一组数组中随机键,其中包含解决方案中的所有单词?
这是演示
https://codepen.io/anon/pen/MvzZPj?editors=1000
如有任何帮助,我们将不胜感激!
您可以拆分数组的字符串并在特殊索引处更新并加入数组以获得新字符串。
function replace(string) {
var array = string.split(''),
i = Math.floor(Math.random() * array.length);
array[i] = String.fromCharCode(array[i].charCodeAt(0) + 2 * Math.floor(Math.random() * 2) - 1);
return array.join('');
}
console.log(replace('123456abcdef'));
下面的代码正在替换字符串中的随机字符,我试图让它替换单词数组中的部分字符串。
genetic.mutate = function(entity) {
function replaceAt(str, index, character) {
return str.substr(0, index) + character + str.substr(index+character.length);
}
// chromosomal drift
var i = Math.floor(Math.random()*entity.length)
console.log(replaceAt(entity, i, String.fromCharCode(entity.charCodeAt(i) + (Math.floor(Math.random()*2) ? 1 : -1))));
return replaceAt(entity, i, String.fromCharCode(entity.charCodeAt(i) + (Math.floor(Math.random()*2) ? 1 : -1)));
};
实体是一串随机字符,长度为 "solution" 个文本字段值。 Mutate 函数使用 "charCode" + math random 来找到更接近解的字符,然后在适应度函数中,如果它接近解,它会为算法提供适应度点。如何更改 mutate 函数,使其尝试从一组数组中随机键,其中包含解决方案中的所有单词?
这是演示
https://codepen.io/anon/pen/MvzZPj?editors=1000
如有任何帮助,我们将不胜感激!
您可以拆分数组的字符串并在特殊索引处更新并加入数组以获得新字符串。
function replace(string) {
var array = string.split(''),
i = Math.floor(Math.random() * array.length);
array[i] = String.fromCharCode(array[i].charCodeAt(0) + 2 * Math.floor(Math.random() * 2) - 1);
return array.join('');
}
console.log(replace('123456abcdef'));