javascript - 将单词随机分成定义长度组的算法

标签 javascript algorithm

我正在编写一个程序(在 JavaScript 中),它需要将一个字符串(一个单词)随机拆分为字母组,每组长度(字符数)为 2,3 或 4 个字符长。例如,australia 可以返回:

aus
tral
ia

au
str
alia

目前我正在“手动”执行此操作,每个字符串长度都有 if 语句,例如:

if (word.length == 4){ //split
    sections.push(word.substr(0,2));
    sections.push(word.substr(2,4));
}

if (word.length == 5){ //either 2/3 or 3/2
    if (randomBetween(1,2) == 1){
        sections.push(word.substr(0,2));
        sections.push(word.substr(2,5));
    } else {
        sections.push(word.substr(0,3));
        sections.push(word.substr(3,5));
    }
}

etc...

// randomBetween(x,y) randomly returns one of the arguments

有没有人有更算法的解决方案?

最佳答案

迭代地从 2 到 4 中选择一个随机长度以形成组列表。当剩余字符串太小而无法提供所有这些选项时,处理边缘情况。

请注意,并非所有可能的组合都会以均匀的概率被选中。我不认为有一种简单的方法可以有效地做到这一点。

如果传入长度小于 2 的单词,我会留给你选择会发生什么。

function randomlySplit(word) {
    var groups = [],
        tail = word;
    while (tail.length) {
        var availableLengths = [2, 3, 4];
        if (tail.length <= 3) availableLengths = [tail.length];
        if (tail.length === 4) availableLengths = [2];
        if (tail.length === 5) availableLengths = [2, 3];
        var length = availableLengths[(Math.random() * availableLengths.length) | 0];
        groups.push(tail.slice(0, length));
        tail = tail.slice(length);
    }
    return groups;
}
alert(randomlySplit("australia"));

可以看到this in action on jsFiddle .

关于javascript - 将单词随机分成定义长度组的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25982352/

相关文章:

javascript - 阻止模态按钮提交它所在的表单

javascript - WebSocket 客户端无法通过企业代理连接到云服务器,除了网络浏览器! (超时)

Java : Taking 2 array find if the element that exists in both array return true if exist else false

java - 如何自动从类数组转换为数组类

Javascript:如何在页面加载时仅显示一个div

javascript - 如何一次删除一个类元素?

javascript - 使 iframe 展开/折叠

c# - 如何在 C# 中合并列表中的日期范围

在c中计算数组中的相对位置

algorithm - K-d 树 : nearest neighbor search algorithm