diff options
| author | akiyamn | 2021-05-16 16:53:02 +1000 |
|---|---|---|
| committer | akiyamn | 2021-05-16 16:53:02 +1000 |
| commit | e43dd19bfd0c61cd933928eb49bb8ad769d819d8 (patch) | |
| tree | 21ad5cc1907e099af6fc4fe4874345a6e6d1b79e /ass3 | |
| parent | 3501b45c59c14efd2d953d864a7afc8bb5cf4d14 (diff) | |
| download | fit3155-e43dd19bfd0c61cd933928eb49bb8ad769d819d8.tar.gz fit3155-e43dd19bfd0c61cd933928eb49bb8ad769d819d8.zip | |
Ass3 Q3: works with files
Diffstat (limited to 'ass3')
| -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() |
