I have tried to implement that the combinations are not repeated. in the image you can see how "sd" is repeated twice.
const characters ='qwertyuiopasdfghjklzxcvbnm0987654321';
function generateString(length) {
let result = ' ';
const charactersLength = characters.length;
for ( let i = 0; i < length; i ) {
result = characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
function captura(){
lon=2;
can=600;
for (let i = 0; i < can; i ) {
document.write(i 1 ".- " generateString(lon) "<br>");
}
}
captura();
Any help please?
CodePudding user response:
Just save the results in a Set and make sure that what you return at the end isn't in the Set already.
const characters ='qwertyuiopasdfghjklzxcvbnm0987654321';
function generateString(length) {
let result = ' ';
const charactersLength = characters.length;
for ( let i = 0; i < length; i ) {
result = characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
const set = new Set();
const generateUniqueString = (len) => {
let str;
do {
str = generateString(len);
} while (set.has(str));
set.add(str);
return str;
};
function captura(){
for (let i = 0; i < 50; i ) {
document.write(i 1 ".- " generateUniqueString(2) '<br>');
}
}
captura();
If you use this in a situation where you'll start getting anywhere near the limit of uniques, a better approach would be to generate all possible combinations in advance, randomize the array, then continually pop strings from the array when the function is called.
CodePudding user response:
Given your script one approach would be to loop through the results, and get rid of b where a === b.
Then generate new random strings to fill the difference up until you get no new equivalence.