Advertisement
Guest User

Untitled

a guest
Dec 23rd, 2021
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env node
  2.  
  3. const process = require("process");
  4.  
  5. const syms = [
  6.   "ПУК",
  7.   "СРЕНЬК",
  8.   "ХРЮК",
  9.   "УИИИ",
  10.   "ЛАХТА",
  11.   "ЛИБЕРАХА",
  12.   "ХОХЛЫ",
  13.   "СВИНОСОБАКА",
  14.   "ШВАЙНОКАРАСЬ",
  15.   "ЛОЛ",
  16.   "КЕК",
  17.   "АБУ",
  18.   "ДВАЧ",
  19.   "ПАРАША",
  20.   "ПОРИДЖ",
  21.   "ХРЮЧЕВО",
  22.   "СВИН",
  23.   "ПЕРДИКС",
  24.   "ПЫНЯ",
  25.   "ЧАЮ",
  26.   "ШУЕ",
  27.   "ЛЕВАК",
  28.   "ПРАВАК",
  29.   "КОМИГЛИСТ",
  30.   "ШВЯТЫЕ",
  31.   "ВАТА",
  32.   "ВОЛОДИН",
  33.   "ДОЛБИЛЬНЯ",
  34.   "ПЕРЕФОРС",
  35.   "КУНЧИК",
  36.   "АВАТАРКА",
  37.   "АНАЛЬЧИК",
  38. ];
  39.  
  40. const keysLen = Math.log2(syms.length);
  41.  
  42. const symsEncode = () => {
  43.   let result = {};
  44.  
  45.   syms.forEach((item, index) => {
  46.     result[("0".repeat(keysLen) + index.toString(2)).slice(-keysLen)] = item;
  47.   });
  48.  
  49.   return result;
  50. };
  51.  
  52. const symsDecode = () => {
  53.   let result = {};
  54.  
  55.   Object.entries(symsEncode()).forEach(([key, value]) => {
  56.     result[value] = key;
  57.   });
  58.  
  59.   return result;
  60. };
  61.  
  62. const rle = (string) => {
  63.   let arr = string.split("-"),
  64.     encoding = [],
  65.     previous = arr[0],
  66.     count = 1;
  67.  
  68.   for (let i = 1; i < arr.length; i++) {
  69.     if (arr[i] !== previous) {
  70.       encoding.push(count, previous);
  71.       count = 1;
  72.       previous = arr[i];
  73.     } else {
  74.       count++;
  75.     }
  76.   }
  77.  
  78.   encoding.push(count, previous);
  79.   return encoding.join("-").replace(/1-/g, "").replace(/(\d)-/g, "$1");
  80. };
  81.  
  82. const decode = (string) => {
  83.   const data = symsDecode();
  84.  
  85.   let ba = string
  86.     .split("-")
  87.     .map((item) => {
  88.       const count = /(\d*)(\w+)-?/.exec(item);
  89.  
  90.       if (count) {
  91.         const key = item.replace(count[0], "");
  92.         return data[key].repeat(parseInt(count[0]));
  93.       }
  94.  
  95.       return data[item];
  96.     })
  97.     .join("");
  98.  
  99.   const padLen = ba.length % 8;
  100.   ba = ba.substring(0, ba.length - padLen);
  101.  
  102.   return new TextDecoder().decode(
  103.     new Uint8Array(ba.match(/.{1,8}/g).map((c) => parseInt(c, 2)))
  104.   );
  105. };
  106.  
  107. const encode = (string) => {
  108.   let ba = new TextEncoder()
  109.     .encode(string)
  110.     .reduce((s, b) => s + b.toString(2).padStart(8, "0"), "");
  111.  
  112.   const padLen = keysLen - (ba.length % keysLen);
  113.   ba = ba + "0".repeat(padLen);
  114.  
  115.   const data = symsEncode();
  116.  
  117.   return rle(
  118.     ba
  119.       .match(new RegExp(`.{1,${keysLen}}`, "g"))
  120.       .map((item) => {
  121.         return data[item];
  122.       })
  123.       .join("-")
  124.   );
  125. };
  126.  
  127. const action = process.argv[2];
  128. const str = process.argv[3] || "";
  129.  
  130. switch (action) {
  131.   case "-d":
  132.   case "--decode":
  133.     console.log(decode(str));
  134.     break;
  135.   case "-e":
  136.   case "--encode":
  137.     console.log(encode(str));
  138.     break;
  139.   default:
  140.     console.log(
  141.       '\033[1m\033[31m[ПУК-СРЕНЬК]\033[0m 2ch Edition v2.0\033[0m\n\n\033[1mОПИСАНИЕ\033[0m\n\tСредство для бинарного кодирования/декодирования текста весьма\n\tсвоеобразным образом.\n\n\033[1mКАК ИСПОЛЬЗОВАТЬ\033[0m\n\tpuk.js [\033[4mОПЦИЯ\033[0m] [\033[4mСТРОКА\033[0m]\n\n\033[1mОПЦИИ\033[0m\n\t\033[1m-d, --decode\033[0m\n\t\tрасшифровать строку\n\n\t\033[1m-e, --encode\033[0m\n\t\tзашифровать строку\n\n\033[1mПРИМЕРЫ ИСПОЛЬЗОВАНИЯ\033[0m\n\tpuk.js -d "ХОХЛЫ-ЛОЛ-ПЕРДИКС-ПРАВАК-СВИН"\n\tpuk.js --decode "ХОХЛЫ-ЛОЛ-ПЕРДИКС-ПРАВАК-СВИН"\n\n\tpuk.js -e "2ch - тут все мои друзья"\n\tpuk.js --encode "2ch - тут все мои друзья"'
  142.     );
  143. }
  144.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement