diff options
Diffstat (limited to 'ass3/q3/decoder_lzss.py')
| -rw-r--r-- | ass3/q3/decoder_lzss.py | 52 |
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() |
