具有模式的随机字母排序
Random letter sequencing with a pattern
我想将随机字母放在一起以生成具有特定模式的奇怪单词,例如 cvvcv(辅音和元音)。不需要像 th- sh- ch- 等辅音变体。
问题是,当我尝试做一个时,我必须指定单词的长度。但是,我希望输出中的字符数与模式中的字符数相同。我的意思是长度将由模式的字符数预先定义。
一个带有 fiddle 的例子会很棒,非常感谢。
如果您在 C++ 中做到了这一点,那么在 JavaScript 中重新创建该逻辑应该没有问题。
无论如何,我为您整理了一个小片段:
var createWordFromPattern = function(pattern) {
var resultStack = [];
for(var i=0; i<pattern.length; i++) {
var sign = pattern.charAt(i);
var signResult = getRandomSubstituteForSign(sign);
if(signResult !== null) {
resultStack.push(signResult);
}
}
return resultStack.join("");
}
var getRandomSubstituteForSign = function(sign) {
var vowels = ['a', 'e', 'i', 'o', 'u'];
var consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l']; //just added some for demonstration
if(sign === 'c') {
return consonants[Math.floor(Math.random()*consonants.length)]
}
if(sign === 'v') {
return vowels[Math.floor(Math.random()*vowels.length)]
}
return null;
}
document.write(createWordFromPattern("cvvcv"));
您可以按几次Run code snippet
来查看结果。
它非常冗长并且缺少许多辅音,但我想你已经知道如何解决这个问题了。
照这样,它会将模式字符串中的 c
s 变成辅音数组中的随机条目,并将 v
s 变成元音数组中的随机条目。模式字符串中的所有其他字符都将被忽略。
这可以很容易地通过添加更多标志的检测来扩展,但这只是为了让您了解如何解决问题。
你也可以试试这个:
function replacePattern(pattern) {
var possibleC = "BCDFGHJKLMNPQRSTVWXZ";
var possibleV = "AEIOUY";
var pIndex = pattern.length;
var res = new Array(pIndex);
while (pIndex--) {
res[pIndex] = pattern[pIndex]
.replace(/v/,randomCharacter(possibleV))
.replace(/c/,randomCharacter(possibleC));
}
function randomCharacter(bucket) {
return bucket.charAt(Math.floor(Math.random() * bucket.length));
}
return res.join("").toLowerCase();
};
我想将随机字母放在一起以生成具有特定模式的奇怪单词,例如 cvvcv(辅音和元音)。不需要像 th- sh- ch- 等辅音变体。
问题是,当我尝试做一个时,我必须指定单词的长度。但是,我希望输出中的字符数与模式中的字符数相同。我的意思是长度将由模式的字符数预先定义。
一个带有 fiddle 的例子会很棒,非常感谢。
如果您在 C++ 中做到了这一点,那么在 JavaScript 中重新创建该逻辑应该没有问题。
无论如何,我为您整理了一个小片段:
var createWordFromPattern = function(pattern) {
var resultStack = [];
for(var i=0; i<pattern.length; i++) {
var sign = pattern.charAt(i);
var signResult = getRandomSubstituteForSign(sign);
if(signResult !== null) {
resultStack.push(signResult);
}
}
return resultStack.join("");
}
var getRandomSubstituteForSign = function(sign) {
var vowels = ['a', 'e', 'i', 'o', 'u'];
var consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l']; //just added some for demonstration
if(sign === 'c') {
return consonants[Math.floor(Math.random()*consonants.length)]
}
if(sign === 'v') {
return vowels[Math.floor(Math.random()*vowels.length)]
}
return null;
}
document.write(createWordFromPattern("cvvcv"));
您可以按几次Run code snippet
来查看结果。
它非常冗长并且缺少许多辅音,但我想你已经知道如何解决这个问题了。
照这样,它会将模式字符串中的 c
s 变成辅音数组中的随机条目,并将 v
s 变成元音数组中的随机条目。模式字符串中的所有其他字符都将被忽略。
这可以很容易地通过添加更多标志的检测来扩展,但这只是为了让您了解如何解决问题。
你也可以试试这个:
function replacePattern(pattern) {
var possibleC = "BCDFGHJKLMNPQRSTVWXZ";
var possibleV = "AEIOUY";
var pIndex = pattern.length;
var res = new Array(pIndex);
while (pIndex--) {
res[pIndex] = pattern[pIndex]
.replace(/v/,randomCharacter(possibleV))
.replace(/c/,randomCharacter(possibleC));
}
function randomCharacter(bucket) {
return bucket.charAt(Math.floor(Math.random() * bucket.length));
}
return res.join("").toLowerCase();
};