gpt4 book ai didi

javascript - 将字母字符串转换为数字并递归求和,使它们低于某个最大值

转载 作者:行者123 更新时间:2023-11-29 22:03:06 25 4
gpt4 key购买 nike

这是为您 StackOverflowers 准备的算术益智游戏。我正在开发一个 JS 游戏,它允许某人输入他们的名字,并根据他们输入的内容生成另一个名字。有点像 this .基本上每次有人输入特定字符串时,我都想通过从列表中获取项目来生成相同的其他字符串。

所以我有一个单词数组,在这个例子中编号为 20

"nouns": [
"Nitwit",
"Cretin",
"Village Idiot"
// ..
]

当用户输入他们的姓名时,我将每个 ASCII 字母字符转换为数字。我将把所有结果数字相加,并使用总数从我的数组中选择一个单词。

// Convert alpha chars to numerical equivalents
function str2num (mystr) {

mystr = mystr.toUpperCase();
var conv = [],
l = mystr.length,
regex = /^[A-Za-z]+$/;

for (var i = 0; i < l; i++) {
if (regex.test(mystr.charAt(i))) {
conv.push(mystr.charCodeAt(i) - 64);
}
}

var c = conv.length,
sum = 0;
for (var j = 0; j < c; j++) {
sum += conv[j];
}
return sumDigits(sum);

}

由于word数组只有20个元素,所以我总是希望和小于20。所以如果等于或大于20,我想再把它的位数相加。这就是我目前的做法。

// Recursively add digits of number together
// till the total is less than length of word list
function sumDigits (number) {

var listLength = adjectives.length;
var sum = number % listLength;

if (number > listLength) {
var remainder = Math.floor(number / 10);
sum += sumDigits(remainder);
}

if (sum > listLength) {
sum = sumDigits(sum);
}

return sum;
}

当我得到低于 20 的结果时,我将 nouns[sum] 的值返回给用户。这段代码非常有效——结果总和总是低于允许的最大值。但结果不是很随机 - 似乎我在 0 到 20 范围的低端得到了不成比例的总和数。我不希望用户一直看到列表开头的单词。我可以对 sumDigits 进行任何更改以确保结果均匀分布吗?或者这已经是正确的了吗? (我有 done this JSFiddle 来演示我在说什么。)

最佳答案

我会让它依赖于名称中字符的字符码:

function getValue(name) {
var letters = name.toLowerCase().split(''),
value = 0,
i = 0;
for(; i < letters.length; i ++) {
value += letters[i].charCodeAt(0);
}
return value % 20;
}

关于javascript - 将字母字符串转换为数字并递归求和,使它们低于某个最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com