如何获取所有可能的可打印 ASCII 字符串(例如 0x20
() 到
0x7E
(~
)) 使用发电机?它应该输出(如果用 .next()
连续调用):
!
"
#
$
...
~
!
"
#
$
等等。我该怎么做?
var gen = function * (){
var counter = 0x20;
while(true) yield String.fromCharCode(++counter);
};
最多尝试 94 次 (~
)。之后我如何让它工作?
最佳答案
这是一个尝试。正如上面的评论所确定的,这是一个采用每个数字的 base 94 表示并添加 32 并打印相应的 ASCII 字符的问题。这就是下面的 char
函数所做的。 numbers
生成器函数从 0 迭代到无穷大,str
函数递归地将给定数字除以 94,将余数连接为字符(每个 char( )
) 生成一个字符串。
function* numbers() {
for (let i = 0;; i++) {
yield str(i);
}
}
function str(i) {
if (i === 0) {
return '';
}
return str(Math.floor(i / 94)) + char(i % 94);
}
function char(i) {
return String.fromCharCode(i+32);
}
const gen = numbers();
setInterval(() => console.log(gen.next().value), 50);
如果你宁愿有一个单一的功能,它可能看起来像这样:
function* numbers() {
for (let i = 0;; i++) {
let d = i;
let s = '';
while (d > 0) {
let r = d % 94;
d = Math.floor(d / 94);
s = String.fromCharCode(r+32) + s;
}
yield s;
}
}
const gen = numbers();
setInterval(() => console.log(gen.next().value), 50);
关于javascript - 以可打印的 ASCII 格式获取所有可能的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44375517/