console.clear();
h7crypt = (
text = 'test',
key = '1234567.Hii.Hello..',
crypt_bool = false,
reckoning = 36,
delimiter = '_'
) => {
if(!(typeof reckoning === 'number' && String(reckoning).split('.')[1] === undefined)) reckoning = 36;
delimiter = String(delimiter);
crypt_bool = Boolean(crypt_bool);
text = String(text);
key = String(key);
let key_array = [];
// Key to big array number
{
// 'bacad' => [93:1, 92:2, 94:1, 95:1]
// [93:1, 92:2, 94:1, 95:1] => max_char = 92
let array_char = key.split(''),
array_char_count = {},
max = 0, max_char = '';
delete key;
for(let i in array_char){
let char_number = Number(array_char[i].charCodeAt());
array_char[i] = char_number;
if(array_char_count[char_number] === undefined)
array_char_count[char_number] = 1;
else
array_char_count[char_number]++;
if(array_char_count[char_number] > max){
max = array_char_count[char_number];
max_char = char_number;
}
}
//console.log('array_char_count', array_char_count);
//console.log('max_char', max_char);
delete array_char_count;
delete max;
// [93, 92, 94, 95] => array_array_number = [[93], [94, 95]]
let array_array_number = [], i0 = 0,
index_array = [], index_array_max = []
for(let i in array_char){
if(array_char[i] === max_char){
if(array_array_number[i0] !== undefined) i0++;
continue;
}
if(array_array_number[i0] === undefined){
array_array_number[i0] = [array_char[i]];
index_array[i0] = 0;
index_array_max[i0] = 1;
}else{
array_array_number[i0].push(array_char[i]);
index_array_max[i0]++;
}
}
delete max_char;
delete array_char;
delete i0;
//console.log('array_array_number', array_array_number);
// [[2, 2], [3, 3, 3]] => key_array = [5, 5, 5, 5, 5, 5]
let repeat = 1;
while(repeat === 1){
let sum = 0;
repeat = 0;
for(let i in array_array_number){
sum += array_array_number[i][index_array[i]];
index_array[i]++;
if(index_array[i] >= index_array_max[i])
index_array[i] = 0;
else
repeat = 1
}
key_array.push(sum);
}
delete repeat;
//console.log('key_array', key_array);
}
// Text and key_array
if(crypt_bool) return text.split('').map((char0, i) => {
if(i >= key_array.length) i %= key_array.length;
return (char0.charCodeAt() + key_array[i]).toString(reckoning);
}).join(delimiter);
return text.split(delimiter).map((char0, i) => {
if(i >= key_array.length) i %= key_array.length;
return String.fromCharCode(parseInt(char0, reckoning) - key_array[i]);
}).join('');
}
h7crypt('привет', 'bacaddad3', true);
h7crypt('158_13w_151_13i_14y_13y', 'bacaddad3', false);