aboutsummaryrefslogtreecommitdiff
path: root/ass3
diff options
context:
space:
mode:
Diffstat (limited to 'ass3')
-rw-r--r--ass3/q3/decoder_lzss.py52
1 files changed, 21 insertions, 31 deletions
diff --git a/ass3/q3/decoder_lzss.py b/ass3/q3/decoder_lzss.py
index d7dcf0c..92bd011 100644
--- a/ass3/q3/decoder_lzss.py
+++ b/ass3/q3/decoder_lzss.py
@@ -6,12 +6,6 @@ class Stream:
self.string = string
self.cursor = 0
- def rewind(self):
- self.cursor = 0
-
- def end_of_stream(self):
- return self.cursor >= len(self.string)
-
def read_elias(self):
offset = self.cursor
if self.string[0 + offset] == "1":
@@ -61,30 +55,6 @@ class Stream:
return 1, self.read_huff_char(decode_table)
-def elias(n):
- assert n > 0
- binary = bin(n)[2:]
- result = binary
- while len(binary) != 1:
- binary = "0" + bin(len(binary) - 1)[3:]
- result = binary + result
- return result
-
-
-def decode_elias(encoded, offset=0):
- if encoded[0 + offset] == "1":
- return 1
- start, end = 1, 2
- while True:
- binary = encoded[start + offset:end + 1 + offset]
- if binary[0] == "0":
- chunk = int(f"1{binary[1:]}", 2) + 1
- start = end + 1
- end += chunk
- else:
- return int(binary, 2)
-
-
def parse_header(stream):
huff = {}
alphabet_size = stream.read_elias()
@@ -120,4 +90,24 @@ def decode_message(raw_data):
tuples = parse_body_tuples(stream, decode_table)
return decode_lzss(tuples)
-print(decode_message("01111000011111000100100011000110100100011111111010011000100100001101111"))
+
+def read_file(filename):
+ with open(filename, "r") as file:
+ contents = file.read()
+ return contents
+
+
+def write_file(filename, contents):
+ with open(filename, "w") as file:
+ file.write(contents)
+
+
+def main():
+ assert len(sys.argv) >= 2
+ raw = read_file(sys.argv[1])
+ result = decode_message(raw)
+ write_file("output_decoder_lzss.txt", result)
+
+
+if __name__ == "__main__":
+ main()