具有模式的随机字母排序

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 来查看结果。 它非常冗长并且缺少许多辅音,但我想你已经知道如何解决这个问题了。

照这样,它会将模式字符串中的 cs 变成辅音数组中的随机条目,并将 vs 变成元音数组中的随机条目。模式字符串中的所有其他字符都将被忽略。

这可以很容易地通过添加更多标志的检测来扩展,但这只是为了让您了解如何解决问题。

你也可以试试这个:

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();
};

https://jsfiddle.net/u2aooqf7/