Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env node
- const process = require("process");
- const syms = [
- "ПУК",
- "СРЕНЬК",
- "ХРЮК",
- "УИИИ",
- "ЛАХТА",
- "ЛИБЕРАХА",
- "ХОХЛЫ",
- "СВИНОСОБАКА",
- "ШВАЙНОКАРАСЬ",
- "ЛОЛ",
- "КЕК",
- "АБУ",
- "ДВАЧ",
- "ПАРАША",
- "ПОРИДЖ",
- "ХРЮЧЕВО",
- "СВИН",
- "ПЕРДИКС",
- "ПЫНЯ",
- "ЧАЮ",
- "ШУЕ",
- "ЛЕВАК",
- "ПРАВАК",
- "КОМИГЛИСТ",
- "ШВЯТЫЕ",
- "ВАТА",
- "ВОЛОДИН",
- "ДОЛБИЛЬНЯ",
- "ПЕРЕФОРС",
- "КУНЧИК",
- "АВАТАРКА",
- "АНАЛЬЧИК",
- ];
- const keysLen = Math.log2(syms.length);
- const symsEncode = () => {
- let result = {};
- syms.forEach((item, index) => {
- result[("0".repeat(keysLen) + index.toString(2)).slice(-keysLen)] = item;
- });
- return result;
- };
- const symsDecode = () => {
- let result = {};
- Object.entries(symsEncode()).forEach(([key, value]) => {
- result[value] = key;
- });
- return result;
- };
- const rle = (string) => {
- let arr = string.split("-"),
- encoding = [],
- previous = arr[0],
- count = 1;
- for (let i = 1; i < arr.length; i++) {
- if (arr[i] !== previous) {
- encoding.push(count, previous);
- count = 1;
- previous = arr[i];
- } else {
- count++;
- }
- }
- encoding.push(count, previous);
- return encoding.join("-").replace(/1-/g, "").replace(/(\d)-/g, "$1");
- };
- const decode = (string) => {
- const data = symsDecode();
- let ba = string
- .split("-")
- .map((item) => {
- const count = /(\d*)(\w+)-?/.exec(item);
- if (count) {
- const key = item.replace(count[0], "");
- return data[key].repeat(parseInt(count[0]));
- }
- return data[item];
- })
- .join("");
- const padLen = ba.length % 8;
- ba = ba.substring(0, ba.length - padLen);
- return new TextDecoder().decode(
- new Uint8Array(ba.match(/.{1,8}/g).map((c) => parseInt(c, 2)))
- );
- };
- const encode = (string) => {
- let ba = new TextEncoder()
- .encode(string)
- .reduce((s, b) => s + b.toString(2).padStart(8, "0"), "");
- const padLen = keysLen - (ba.length % keysLen);
- ba = ba + "0".repeat(padLen);
- const data = symsEncode();
- return rle(
- ba
- .match(new RegExp(`.{1,${keysLen}}`, "g"))
- .map((item) => {
- return data[item];
- })
- .join("-")
- );
- };
- const action = process.argv[2];
- const str = process.argv[3] || "";
- switch (action) {
- case "-d":
- case "--decode":
- console.log(decode(str));
- break;
- case "-e":
- case "--encode":
- console.log(encode(str));
- break;
- default:
- console.log(
- '\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 - тут все мои друзья"'
- );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement