From ee4fc09705241da8ed8efe5f08fca3a538644bde Mon Sep 17 00:00:00 2001 From: Ashok Bakthavathsalam Date: Wed, 1 Jan 2020 08:09:43 +0000 Subject: [PATCH 01/77] added "run on repl.it" badge --- .gitignore | 58 -- .replit | 2 + README.md | 6 +- __pycache__/huffman.cpython-36.pyc | Bin 0 -> 4789 bytes sample.bin | Bin 0 -> 394017 bytes sample_decompressed.txt | 1333 ++++++++++++++++++++++++++++ 6 files changed, 1340 insertions(+), 59 deletions(-) delete mode 100644 .gitignore create mode 100644 .replit create mode 100644 __pycache__/huffman.cpython-36.pyc create mode 100644 sample.bin create mode 100644 sample_decompressed.txt diff --git a/.gitignore b/.gitignore deleted file mode 100644 index bad7c5e..0000000 --- a/.gitignore +++ /dev/null @@ -1,58 +0,0 @@ -#####=== Python ===##### - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.cache -nosetests.xml -coverage.xml - -# Translations -*.mo -*.pot - -# Django stuff: -*.log - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -.idea/ diff --git a/.replit b/.replit new file mode 100644 index 0000000..b85f9a3 --- /dev/null +++ b/.replit @@ -0,0 +1,2 @@ +language = "python3" +run = "python3 useHuffman.py" diff --git a/README.md b/README.md index ee1af80..d711999 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -### Python Implementaion of Huffman Coding +[![Run on Repl.it](https://repl.it/badge/github/kgashok/huffman-coding)](https://repl.it/github/kgashok/huffman-coding) + + +### Python Implementation of Huffman Coding Explanation at http://bhrigu.me/blog/2017/01/17/huffman-coding-python-implementation/ @@ -16,3 +19,4 @@ To run the code for compression of any other text file, edit the `path` variable For now, the *decompress()* function is to be called from the same object from which the *compress()* function was called, for compressing-decompressing a file (as the encoding information is stored in the data members of the object only) + diff --git a/__pycache__/huffman.cpython-36.pyc b/__pycache__/huffman.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..197f5d82df3350e9b0da2c6340259b8348225f1d GIT binary patch literal 4789 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 CDgk!@ literal 0 HcmV?d00001 diff --git a/sample.bin b/sample.bin new file mode 100644 index 0000000000000000000000000000000000000000..0a3a613ddd3de85aba774a66ec9e0608fdccd3bf GIT binary patch literal 394017 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