首页 > 解决方案 > JS;将字符串转换为二进制然后转换为 UNARY

问题描述

这是练习和示例

0 和 1 的二进制很好,但只有 0 或几乎是 0 的二进制更好!最初,这是 Chuck Norris 设计的一个概念,用于发送所谓的一元消息。

编写一个程序,将传入消息作为输入,并将使用 Chuck Norris 方法编码的消息显示为输出。

规则

下面是编码原理:

输入消息由 ASCII 字符(7 位)组成 编码的输出消息由 0 的块组成 一个块与另一个块用空格隔开 两个连续的块用于产生一系列相同的值位(只有 1 或 0 值): - 第一个块:它总是0或00。如果是0,那么这个系列包含1,如果不是,它包含0 - 第二个块:这个块中0的个数是这个系列的位数示例让我们举一个简单的例子,消息只包含一个字符:大写 C。二进制中的 C 表示为 1000011,因此使用 Chuck Norris 的技术可以得出:

0 0 (the first series consists of only a single 1)
00 0000 (the second series consists of four 0)
0 00 (the third consists of two 1)
So C is coded as: 0 0 00 0000 0 00

第二个例子,我们要对消息 CC 进行编码(即 14 位 10000111000011):

0 0 (one single 1)
00 0000 (four 0)
0 000 (three 1)
00 0000 (four 0)
0 00 (two 1)
So CC is coded as: 0 0 00 0000 0 000 00 0000 0 00

我被困在字符串“%”上;

const MESSAGE = "%";
let binaryMess="";
for(let i = 0; i<MESSAGE.length; i++){
    binaryMess += MESSAGE.charCodeAt(i).toString(2);
}
const regex = /(1*)(0*)/g;
const answer = binaryMess.replace(regex, (str, g1, g2)=>{
  let a="", b="";
  if(g1)a = "0 "+"0".repeat(g1.length);
  if(g2)b = "00 "+"0".repeat(g2.length);

  if(a&&b){return a + " " + b + " ";}
  else if(a){return a + " "}
  else if(b){return b + " "}
  else{return ""}
});



console.log(answer.trim()); 

结果 => 发现失败:0 0 00 00 0 0 00 0 0 0 预期:00 0 0 0 00 00 0 0 00 0 0 0

知道为什么它不起作用吗?我设法用“c”“cc”做到了,但没有用“%”和“Chuck Norris 的键盘有 2 个键:0 和空格”。

标签: javascriptstringbinary

解决方案


.toString(2).padStart(7, "0"); 可能会有所帮助,但也许不能解决所有问题。– ASDFGerte


推荐阅读