【问题标题】:Random letter sequencing with a pattern带有模式的随机字母排序
【发布时间】:2015-06-20 02:43:07
【问题描述】:

我想将随机字母组合在一起以生成具有指定模式的奇怪单词,例如 cvvcv(辅音和元音)。不需要像 th- sh- ch- 等辅音变化。

问题是,当我尝试做一个时,我必须指定单词的长度。但是,我希望输出中的字符数在模式中相同。我的意思是长度将由模式的字符数预先定义。

一个带有小提琴的例子会很棒,非常感谢。

【问题讨论】:

  • 我们可以看看你到目前为止所做的尝试吗?
  • 我在 c++ 中尝试过,但现在我需要在 js 中使用它,我什至无法尝试。 :/ 我希望我能。

标签: javascript design-patterns random letters


【解决方案1】:

你也可以试试这个:

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/

【讨论】:

    【解决方案2】:

    如果您设法在 C++ 中做到这一点,那么在 JavaScript 中重新创建该逻辑应该不会有问题。

    不管怎样,我为你组装了一个小sn-p:

    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 转换为元音数组中的随机条目。模式字符串中的所有其他字符都将被忽略。

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

    【讨论】:

      猜你喜欢
      • 2022-11-18
      • 2018-10-12
      • 2013-05-23
      • 2018-07-07
      • 2021-03-11
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 2013-10-18
      相关资源
      最近更新 更多