如何使用生成器以可打印的ASCII(例如0x20
()到
0x7E
(~
))获取所有可能的字符串?它应该输出(如果用.next()
连续调用):
!
"
#
$
...
~
!
"
#
$
等等。我怎么能这样做?
var gen = function * (){
var counter = 0x20;
while(true) yield String.fromCharCode(++counter);
};
最多可以尝试94次(~
)。我之后如何让它工作?
答案 0 :(得分:3)
在这里捅了一下。如上面的评论中所确定的,这是采用每个数字的基数94表示并添加32并打印相应的ASCII字符的问题。这就是下面(tabBarController as! AccountTopTabBarViewController).AccountCustomTabBar.changeTabIndex(1)
功能的作用。 char
生成器函数从0迭代到无穷大,numbers
函数整数 - 递归地将给定数字除以94,将余数连接为字符(每str
)以生成字符串。
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);

答案 1 :(得分:1)
我提出了递归生成器解决方案:
// Generate chars:
function* chars(from, to) {
while (from <= to) yield String.fromCharCode(from++);
}
// Generate words from chars:
function* words(from, to) {
yield* chars(from, to);
for (let word of words(from, to)) {
for (let char of chars(from, to)) {
yield word + char;
}
}
}
// Example:
let w = words(0x20, 0x7E);
setInterval(() => console.log(w.next().value), 50);