Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
81
Task/LZW-compression/JavaScript/lzw-compression-1.js
Normal file
81
Task/LZW-compression/JavaScript/lzw-compression-1.js
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
//LZW Compression/Decompression for Strings
|
||||
var LZW = {
|
||||
compress: function (uncompressed) {
|
||||
"use strict";
|
||||
// Build the dictionary.
|
||||
var i,
|
||||
dictionary = {},
|
||||
c,
|
||||
wc,
|
||||
w = "",
|
||||
result = [],
|
||||
dictSize = 256;
|
||||
for (i = 0; i < 256; i += 1) {
|
||||
dictionary[String.fromCharCode(i)] = i;
|
||||
}
|
||||
|
||||
for (i = 0; i < uncompressed.length; i += 1) {
|
||||
c = uncompressed.charAt(i);
|
||||
wc = w + c;
|
||||
//Do not use dictionary[wc] because javascript arrays
|
||||
//will return values for array['pop'], array['push'] etc
|
||||
// if (dictionary[wc]) {
|
||||
if (dictionary.hasOwnProperty(wc)) {
|
||||
w = wc;
|
||||
} else {
|
||||
result.push(dictionary[w]);
|
||||
// Add wc to the dictionary.
|
||||
dictionary[wc] = dictSize++;
|
||||
w = String(c);
|
||||
}
|
||||
}
|
||||
|
||||
// Output the code for w.
|
||||
if (w !== "") {
|
||||
result.push(dictionary[w]);
|
||||
}
|
||||
return result;
|
||||
},
|
||||
|
||||
|
||||
decompress: function (compressed) {
|
||||
"use strict";
|
||||
// Build the dictionary.
|
||||
var i,
|
||||
dictionary = [],
|
||||
w,
|
||||
result,
|
||||
k,
|
||||
entry = "",
|
||||
dictSize = 256;
|
||||
for (i = 0; i < 256; i += 1) {
|
||||
dictionary[i] = String.fromCharCode(i);
|
||||
}
|
||||
|
||||
w = String.fromCharCode(compressed[0]);
|
||||
result = w;
|
||||
for (i = 1; i < compressed.length; i += 1) {
|
||||
k = compressed[i];
|
||||
if (dictionary[k]) {
|
||||
entry = dictionary[k];
|
||||
} else {
|
||||
if (k === dictSize) {
|
||||
entry = w + w.charAt(0);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
result += entry;
|
||||
|
||||
// Add w+entry[0] to the dictionary.
|
||||
dictionary[dictSize++] = w + entry.charAt(0);
|
||||
|
||||
w = entry;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}, // For Test Purposes
|
||||
comp = LZW.compress("TOBEORNOTTOBEORTOBEORNOT"),
|
||||
decomp = LZW.decompress(comp);
|
||||
document.write(comp + '<br>' + decomp);
|
||||
110
Task/LZW-compression/JavaScript/lzw-compression-2.js
Normal file
110
Task/LZW-compression/JavaScript/lzw-compression-2.js
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
'use strict';
|
||||
/**
|
||||
Namespace for LZW compression and decompression.
|
||||
Methods:
|
||||
LZW.compress(uncompressed)
|
||||
LZW.decompress(compressed)
|
||||
*/
|
||||
class LZW
|
||||
{
|
||||
/**
|
||||
Perform the LZW compression
|
||||
uncompressed - String. The string on which to perform the compression.
|
||||
*/
|
||||
static compress(uncompressed)
|
||||
{
|
||||
// Initialize dictionary
|
||||
let dictionary = {};
|
||||
for (let i = 0; i < 256; i++)
|
||||
{
|
||||
dictionary[String.fromCharCode(i)] = i;
|
||||
}
|
||||
|
||||
let word = '';
|
||||
let result = [];
|
||||
let dictSize = 256;
|
||||
|
||||
for (let i = 0, len = uncompressed.length; i < len; i++)
|
||||
{
|
||||
let curChar = uncompressed[i];
|
||||
let joinedWord = word + curChar;
|
||||
|
||||
// Do not use dictionary[joinedWord] because javascript objects
|
||||
// will return values for myObject['toString']
|
||||
if (dictionary.hasOwnProperty(joinedWord))
|
||||
{
|
||||
word = joinedWord;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.push(dictionary[word]);
|
||||
// Add wc to the dictionary.
|
||||
dictionary[joinedWord] = dictSize++;
|
||||
word = curChar;
|
||||
}
|
||||
}
|
||||
|
||||
if (word !== '')
|
||||
{
|
||||
result.push(dictionary[word]);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
Decompress LZW array generated by LZW.compress()
|
||||
compressed - Array. The array that holds LZW compressed data.
|
||||
*/
|
||||
static decompress(compressed)
|
||||
{
|
||||
// Initialize Dictionary (inverse of compress)
|
||||
let dictionary = {};
|
||||
for (let i = 0; i < 256; i++)
|
||||
{
|
||||
dictionary[i] = String.fromCharCode(i);
|
||||
}
|
||||
|
||||
let word = String.fromCharCode(compressed[0]);
|
||||
let result = word;
|
||||
let entry = '';
|
||||
let dictSize = 256;
|
||||
|
||||
for (let i = 1, len = compressed.length; i < len; i++)
|
||||
{
|
||||
let curNumber = compressed[i];
|
||||
|
||||
if (dictionary[curNumber] !== undefined)
|
||||
{
|
||||
entry = dictionary[curNumber];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (curNumber === dictSize)
|
||||
{
|
||||
entry = word + word[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
throw 'Error in processing';
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
result += entry;
|
||||
|
||||
// Add word + entry[0] to dictionary
|
||||
dictionary[dictSize++] = word + entry[0];
|
||||
|
||||
word = entry;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
let comp = LZW.compress('TOBEORNOTTOBEORTOBEORNOT');
|
||||
let decomp = LZW.decompress(comp);
|
||||
|
||||
console.log(`${comp}
|
||||
${decomp}`);
|
||||
Loading…
Add table
Add a link
Reference in a new issue