Lempel-Ziv-Simplified, Demo

Unkomprimierter Text:

Komprimierter Text:


Hier der Code:
function komprimieren(){
	console.log("komprimieren");
	let index = 0; //Variable für die Verweise
	let dict = {}; //Das ist die Datenbank, zu Beginn leer
	let text_komprimiert = "";
	let text_unkomprimiert = document.getElementById("input_unkomprimiert").value;
	let words = text_unkomprimiert.split(/\s|\n/);
	words.forEach((word)=>{
	
		//Das Wort ist bereit in der Datenbank, somit wird nur noch der Verweis hinzugefügt
		if (dict[word]){
			text_komprimiert += dict[word] + " "; 
		}
		//Das Wort ist noch nicht in der Datenbank. somit wird es als Key eingefügt mit Value um 1 erhöhten Verweis
		else {
			dict[word] = ++index;
			text_komprimiert += word + " ";
		}
	})
	text_komprimiert = text_komprimiert.trim();
	
	document.getElementById("input_komprimiert").value = text_komprimiert;
	document.getElementById("laenge_unkomprimiert").innerHTML = "Länge = " + text_unkomprimiert.length + " Zeichen";
	document.getElementById("laenge_komprimiert").innerHTML = "Länge = " + text_komprimiert.length + " Zeichen";
	document.getElementById("rate").innerHTML = "Kompressionsrate = " + (100*text_komprimiert.length/text_unkomprimiert.length).toFixed(1) + " %";
}

function dekomprimieren(){
	console.log("dekomprimieren");
	let index = 0; //Variable für die Verweise
	let dict = {}; //Das ist die Datenbank, zu Beginn leer
	let text_unkomprimiert = "";
	let text_komprimiert = document.getElementById("input_komprimiert").value;	
	let words = text_komprimiert.split(/\s|\n/);
	words.forEach((word)=>{ 
	
		//Das Wort ist als Verweis bereit in der Datenbank, somit wird das zum Verweis gehörende Wort hinzugefügt
		if (dict[word]){
			text_unkomprimiert += dict[word] + " "; 
		}
		//Das Wort ist noch nicht in der Datenbank, der Index dient als Key
		else {
			dict[++index] = word;
			text_unkomprimiert += word + " ";
		}
	})
	text_unkomprimiert = text_unkomprimiert.trim();
	
	document.getElementById("input_unkomprimiert").value = text_unkomprimiert;
}