0 到 9 之间唯一的四位数引脚生成器



我试图构建一个独特的引脚生成器,以便 4 个引脚编号永远不会有 3 个或更多连续的数字。 这是我得到的:

function getRandomNumber(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function saveToArray() {
let arr = [];
for (let index = 0; index < 4; index++) {
let result = getRandomNumber(0, 9);
arr.push(result);
}
/* if (consecutive(arr)) {
console.log('1', arr);
return arr;
} else {
saveToArray;
} */
return arr;
}
/* function consecutive(arr) {
for (let i = 1; i < arr.length; i++) {
if (arr[i] != arr[i - 1] + 1) {
return false;
}
}
return true;
} */
console.log(saveToArray());

连续函数仅具有 [0,1,2,3] 或 [4,5,6,7] 这样的引脚 如果我将其注释掉,则会生成引脚,但我没有该功能来按升序或降序验证连续数字。

关于我缺少什么的任何提示?

要检查一个数字是否连续,你可以这样做:

function isConsecutive(n1, n2) {
return Math.abs(n1 - n2) === 1;
};

验证数组的一种方法是,将情况视为 1,2,3,4 和 7,6,5,4,如下所示:

function isValid(array) {
for (let i = 0; i + 2 < array.length; i++) {
let n1 = array[i], n2 = array[i+1], n3 = array[i+2];
if (isConsecutive(n1, n2) && isConsecutive(n2, n3))
return false;
}
return true;
};

连续整数相差1。 您可以只添加连续指数之间的差异

function nonConsecutive(x) {  
console.log(x)
if((x[1]-x[0]) + (x[2]-x[1]) == 2 || (x[3]-x[2]) + (x[2]-x[1]) == 2)
return false
return true
}

此代码返回具有不相等和非连续数字的随机引脚。当找到相同或连续的数字时,我在结果中添加 3%10,我认为这就足够了。

function randomD() {
return Math.floor(Math.random() * 10);
}
var fullRand = "", iNewRand, iRand;
for (var i = 0; i < 4; i++) {
iNewRand = randomD();
if (i > 0) {
if (Math.abs(iNewRand - iRand) <= 1) {
iRand = (iNewRand + 3) % 10;
}
else {
iRand = iNewRand;
}
}
else {
iRand = iNewRand;
}
fullRand += iRand;
}
console.log(fullRand);

最新更新