What is a good ways to make random strings of length n, where the strings consist of only 0's and 1's?
Would using math.random() and round and then just joining the generating numbers be good?
Maybe there is a way to generate all $n$ digits at once instead of in a loop as in above?
Here are two methods:
for loopfunction buildStrForLoop(n) {
let str = ''
for (let i = 0; i < n; i++) {
str += Math.floor(Math.random() + 0.5)
}
return str
}
Array.from and then joinfunction buildStrArrayFrom(n) {
return Array.from({ length: n }, () => Math.floor(Math.random() + 0.5)).join('')
}
Note i use floor and add 0.5 instead of using round as it was slightly faster.
I timed this on my M1 mac setting n=10000000 and got ~1000ms for both methods.
This solution uses .toString(2) to convert our random number to base 2 and get a bunch of 0's and 1's all at the same time (as opposed to only yielding one 0 or 1 with rounding), which greatly reduces the amount of times our loop has to execute. It also uses rando.js to be cryptographically secure, but you could just as easily use Math.random() instead of rando() if you chose to.
function get01String(length){
var str = "";
while(str.length < length) str += rando().toString(2).slice(2);
return str.slice(-length);
}
console.log(get01String(5));
<script src="https://randojs.com/2.0.0.js"></script>
Here is what I would do. I made a function, which creates a string with 0s and 1s.
Maybe there are better options, but it may help you.
function stringMaker(lenght) {
let string = "";
for (let i = 0; i < lenght; i++) {
string += Math.round(Math.random());
}
document.getElementById("number").innerHTML = string;
}