簡體   English   中英

JS; 將字符串轉換為二進制然后轉換為 UNARY

[英]JS; Convert a string to binary then to UNARY

這是練習和示例

0 和 1 的二進制很好,但只有 0 或幾乎是 0 的二進制更好,最初。 這是 Chuck Norris 設計的一個概念,用於發送所謂的一元消息。

編寫一個程序,將傳入消息作為輸入,並將使用 Chuck Norris 方法編碼的消息顯示為 output。

規則

下面是編碼原理:

輸入消息由 ASCII 字符(7 位)組成 編碼的 output 消息由 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM