javascript - 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 和空格”。
解决方案
.toString(2).padStart(7, "0"); 可能会有所帮助,但也许不能解决所有问题。– ASDFGerte
推荐阅读
- python - 避免 NaN 值并在 python 中明智地添加两个矩阵元素
- c++ - 在堆栈上复制成员值或使用指针访问它?
- jquery - 如何通过jquery中的remove方法删除div
- android - 如何在 Play 商店中发布具有不同名称的应用程序?
- c# - 如何将DataTable拆分为多个数据表c#
- c++ - 为什么我不需要重载 = 运算符?
- php - 用于表名的 laravel mysql 列
- sharepoint - 内容类型字段+customXMLParts+ 文档自定义属性
- java - 区分 jpa DataIntegration 异常
- sql - 查询 wordpress 时出现 MariaDB SQL 错误