- General Info
- Creator Info
- Features
- Technologies Used
- Setup
- Usage
- Algorithm
- Video Capture
- Screenshots
- Structure
- Project Status
- Room for Improvement
- Acknowledgements
- Contact
Sebuah aplikasi berbasis website sederhana yang dapat digunakan untuk melakukan encode dan decode terhadap masukan string tertentu dengan menggunakan 2 pilihan algoritma, yaitu: LZW (Lempel-Ziv-Welch)
dan Huffman
. Website ini disusun menggunakan React untuk frontend framework serta Node dan Express untuk backend framework. Tugas ini disusun untuk memenuhi tugas pertama seleksi Lab IRK tahun 2023.
Nama | NIM | |
---|---|---|
Mohammad Rifqi Farhansyah | 13521166 | 13521166@std.stei.itb.ac.id |
- Memilih
algoritma
yang akan digunakan, yaitu:LZW
atauHuffman
- Melakukan proses
encode
suatu text masukan menjadibinary
ataudecimal
- Melakukan proses
decode
suatu text masukan menjadibinary
ataudecimal
Note: The version of the libraries above is the version that we used in this project. You can use the latest version of the libraries.
- Clone Repository ini dengan menggunakan command berikut
git clone https://github.com/rifqifarhansyah/CompresserString-WebApp.git
- Buka Folder "stringcompresser-backend" di Terminal
- Install Packages yang diperlukan
npm i
- Untuk menjalankan backend pada localhost, masukkan command
node index.js
- Buka
localhost
yang digunakan pada Browser Anda(default PORT : 5000)
- Pilih
algoritma
yang akan digunakan menggunakan dropdownButton di bagian atas layar - Tentukan opsi program yang hendak dipilih, yaitu:
encode
ataudecode
- Ketikkan
masukan string
pada kolom text-field yang telah disediakan - Pilih
Output Choice
sertaInput Choice
yang hendak digunakan (Binary atau Decimal) - Tekan tombol
Encode
atauDecode
- Inisialisasi tabel dengan setiap karakter tunggal sebagai entri awal dan penomoran indeks 0 hingga 255 (sesuai jumlah karakter ASCII yang digunakan).
- Inisialisasi variabel p dengan karakter pertama dari inputEncoder.
- Inisialisasi variabel c dengan string kosong.
- Inisialisasi variabel code dengan nilai 256 sebagai indeks berikutnya dalam tabel.
- Inisialisasi array outputCode untuk menyimpan hasil encoding.
- Lakukan perulangan untuk setiap karakter dalam inputEncoder:
- Gabungkan karakter saat ini c dengan karakter berikutnya dalam inputEncoder.
- Periksa apakah kombinasi p + c ada dalam tabel: - Jika iya, perbarui p menjadi p + c. - Jika tidak, tambahkan kode untuk p ke dalam outputCode, tambahkan p + c sebagai entri baru dalam tabel dengan kode code, dan tingkatkan nilai code sebesar 1. Perbarui p menjadi c.
- Set c menjadi string kosong untuk iterasi berikutnya.
- Tambahkan kode untuk p ke dalam outputCode.
- Jika outputChoice adalah "binary", ubah setiap elemen dalam outputCode menjadi format biner.
- Kembalikan outputCode sebagai hasil encoding.
- Inisialisasi tabel dengan setiap karakter tunggal sebagai entri awal dan penomoran indeks 0 hingga 255.
- Split inputDecoder menjadi array inputDecoded dengan memisahkan berdasarkan spasi dan menghapus spasi tambahan.
- Inisialisasi variabel old dengan nilai dari elemen pertama dalam inputDecoded, mengonversinya ke bilangan desimal dengan basis sesuai dengan inputChoice.
- Inisialisasi variabel n, s, dan decodedString dengan nilai-nilai awal yang sesuai.
- Inisialisasi variabel count dengan nilai 256 sebagai indeks berikutnya dalam tabel.
- Lakukan perulangan untuk setiap elemen dalam inputDecoded (kecuali elemen terakhir):
- Ubah elemen saat ini menjadi bilangan desimal dengan basis sesuai dengan inputChoice.
- Periksa apakah bilangan n ada dalam tabel: - Jika iya, setel entry dengan nilai entri dalam tabel untuk bilangan n. - Jika tidak, setel entry dengan gabungan antara entri dalam tabel untuk bilangan old dan karakter pertama dari s.
- Tambahkan entry ke dalam decodedString.
- Tambahkan entri baru dalam tabel dengan indeks count, yang merupakan gabungan antara entri dalam tabel untuk bilangan old dan karakter pertama dari entry.
- Tingkatkan nilai count sebesar 1.
- Perbarui nilai old menjadi n dan s menjadi entry.
- Kembalikan decodedString sebagai hasil dekompresi.
- Menghitung frekuensi kemunculan setiap karakter dalam teks inputEncoder menggunakan fungsi getCharacterFrequency.
- Membangun pohon Huffman menggunakan fungsi buildHuffmanTree berdasarkan frekuensi karakter.
- Menghasilkan kode Huffman untuk setiap karakter menggunakan fungsi generateHuffmanCodes.
- Mengonversi teks menjadi kode Huffman menggunakan fungsi encodeText.
- Jika outputChoice adalah "decimal":
- Mengonversi kode Huffman menjadi bilangan desimal menggunakan fungsi binaryToDecimal.
- Menampilkan hasil kompresi dalam bentuk array bilangan desimal.
- Menyimpan kode Huffman dalam file "file.txt" menggunakan fs.appendFile.
- Mengembalikan hasil kompresi dalam bentuk string bilangan desimal.
- Jika outputChoice bukan "decimal":
- Menampilkan kode Huffman.
- Menampilkan hasil kompresi dalam bentuk kode Huffman.
- Menyimpan kode Huffman dalam file "file.txt" menggunakan fs.appendFile.
- Mengembalikan hasil kompresi dalam bentuk string kode Huffman.
- Membaca file "file.txt" yang berisi kode Huffman.
- Mengambil informasi kode Huffman dari file dan menyimpannya dalam objek codes.
- Memecah teks yang dikodekan menjadi array encodedText.
- Iterasi untuk setiap kode dalam encodedText:
- Membentuk kode Huffman saat ini (currentCode).
- Jika codes memiliki kode Huffman tersebut: - Menambahkan karakter yang sesuai ke decodedText. - Me-reset currentCode.
- Mengembalikan teks yang sudah didekodekan (decodedText).
Gambar 1. Landing Page
Gambar 2. LZW dengan Binary
Gambar 3. LZW dengan Decimal
Gambar 4. Huffman dengan Binary
├───.vscode
├───backend
│ └───node_modules
├───frontend
│ ├───node_modules
│ ├───public
│ └───src
│ ├───components
│ ├───pages
│ │ └───Home
│ └───styles
└───img
Project is: complete
Perbaikan yang dapat dilakukan pada program ini adalah:
- Menambahkan algoritma-algoritma serta fungsionalitas lainnya
- Terima kasih kepada Tuhan Yang Maha Esa