javascript - 以可打印的 ASCII 格式获取所有可能的字符串

标签 javascript ecmascript-6 generator

如何获取所有可能的可打印 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/

相关文章:

javascript - 连接或不连接外部脚本?

javascript - TinyMCE:从 TinyMCE 到常规文本字段的实时复制文本

javascript - Facebook 的 Flux 是用什么语言编写的?它是如何转换为 JavaScript 的?

python - 如何包装或嵌入生成器?

javascript - jQuery 多步骤表单 : disable next button when fields unchecked

javascript - SASS 输出样式通过缩小文件实现自动化

javascript数组按对象键过滤重复项

javascript - 导入带有属性的 ES6 模块

Javascript 生成器函数——用 C++ 编写

javascript - 在 IntelliJ 或 WebStorm 中使用生成器调试 JS 的更好方法