From 150fccfddcb73562e9222930bff6dec5005f0228 Mon Sep 17 00:00:00 2001 From: Matej Hajduk Date: Sat, 7 Feb 2026 17:05:07 +0100 Subject: [PATCH] fix pls --- sk1/:wq | 209 ----------------------------------------------- sk1/compressor | Bin 16832 -> 0 bytes sk1/compressor.o | Bin 6376 -> 0 bytes sk1/main.o | Bin 2216 -> 0 bytes sk1/test.huff | Bin 1052 -> 0 bytes sk1/test.txt | 1 - sk1/test_out.txt | 1 - 7 files changed, 211 deletions(-) delete mode 100644 sk1/:wq delete mode 100755 sk1/compressor delete mode 100644 sk1/compressor.o delete mode 100644 sk1/main.o delete mode 100644 sk1/test.huff delete mode 100644 sk1/test.txt delete mode 100644 sk1/test_out.txt diff --git a/sk1/:wq b/sk1/:wq deleted file mode 100644 index d1c26de..0000000 --- a/sk1/:wq +++ /dev/null @@ -1,209 +0,0 @@ -#include "compressor.h" -#include - -static HuffmanNode *create_node(unsigned char symbol, uint32_t freq) { - HuffmanNode *node = malloc(sizeof(HuffmanNode)); - if (!node) return NULL; - node->symbol = symbol; - node->freq = freq; - node->left = NULL; - node->right = NULL; - return node; -} - -static void free_tree(HuffmanNode *root) { - if (!root) return; - free_tree(root->left); - free_tree(root->right); - free(root); -} - -static HuffmanNode *build_tree(uint32_t freq[]) { - HuffmanNode *nodes[SYMBOLS * 2]; - int count = 0; - - for (int i = 0; i < SYMBOLS; i++) { - if (freq[i] > 0) { - nodes[count++] = create_node((unsigned char)i, freq[i]); - } - } - - if (count == 0) return NULL; - - while (count > 1) { - int min1 = 0, min2 = 1; - - if (nodes[min2]->freq < nodes[min1]->freq) { - int tmp = min1; - min1 = min2; - min2 = tmp; - } - - for (int i = 2; i < count; i++) { - if (nodes[i]->freq < nodes[min1]->freq) { - min2 = min1; - min1 = i; - } else if (nodes[i]->freq < nodes[min2]->freq) { - min2 = i; - } - } - - HuffmanNode *parent = - create_node(0, nodes[min1]->freq + nodes[min2]->freq); - parent->left = nodes[min1]; - parent->right = nodes[min2]; - - nodes[min1] = parent; - nodes[min2] = nodes[count - 1]; - count--; - } - - return nodes[0]; -} - -static void build_codes(HuffmanNode *root, char *buffer, int depth, - char codes[SYMBOLS][256]) { - if (!root) return; - - if (!root->left && !root->right) { - if (depth == 0) { - buffer[0] = '0'; - depth = 1; - } - - buffer[depth] = '\0'; - strcpy(codes[root->symbol], buffer); - return; - } - - if (root->left) { - buffer[depth] = '0'; - build_codes(root->left, buffer, depth + 1, codes); - } - - if (root->right) { - buffer[depth] = '1'; - build_codes(root->right, buffer, depth + 1, codes); - } -} - -int compress_file(const char *infile, const char *outfile) { - FILE *in = fopen(infile, "rb"); - FILE *out = fopen(outfile, "wb"); - if (!in || !out) return 1; - - uint32_t freq[SYMBOLS] = {0}; - int c; - - while ((c = fgetc(in)) != EOF) { - freq[(unsigned char)c]++; - } - uint64_t original_size = 0; - for( int i = 0; i < SYMBOLS; i++) original_size += freq[i]; - - fwrite("HUF1",1,4,out); - fwrite(&original_size, sizeof(uint64_t), 1, out); - fwrite(freq, sizeof(uint32_t), SYMBOLS, out); - - HuffmanNode *root = build_tree(freq); - if (!root) { - fclose(in); - fclose(out); - return 1; - } - - char codes[SYMBOLS][256] = {{0}}; - char buffer[256]; - build_codes(root, buffer, 0, codes); - - rewind(in); - - unsigned char out_byte = 0; - int bit_count = 0; - - while ((c = fgetc(in)) != EOF) { - char *code = codes[(unsigned char)c]; - for (int i = 0; code[i] != '\0'; i++) { - out_byte <<= 1; - if (code[i] == '1') out_byte |= 1; - bit_count++; - - if (bit_count == 8) { - fputc(out_byte, out); - out_byte = 0; - bit_count = 0; - } - } - } - - if (bit_count > 0) { - out_byte <<= (8 - bit_count); - fputc(out_byte, out); - } - - free_tree(root); - fclose(in); - fclose(out); - return 0; -} - -int decompress_file(const char *infile, const char *outfile) { - FILE *in = fopen(infile, "rb"); - FILE *out = fopen(outfile, "wb"); - if (!in || !out) return 1; - - char magic[4]; - if (fread(magic, 1, 4, in) != 4 || memcmp(magic, "HUF1", 4) != 0) { - fclose(in); - fclose(out); - return 1; - } - - uint64_t original_size = 0; - if (fread(&original_size, sizeof(uint64_t), 1, in) != 1) { - fclose(in); - fclose(out); - return 1; - } - - uint32_t freq[SYMBOLS]; - if (fread(freq, sizeof(uint32_t), SYMBOLS, in) != SYMBOLS) { - fclose(in); - fclose(out); - return 1; - } - - HuffmanNode *root = build_tree(freq); - if (!root) { - fclose(in); - fclose(out); - return 1; - } - - HuffmanNode *current = root; - int byte; - uint64_t written = 0; - while ((byte = fgetc(in)) != EOF) { - for (int i = 7; i >= 0; i--) { - int bit = (byte >> i) & 1; - current = bit ? current->right : current->left; - - if (!current->left && !current->right) { - fputc(current->symbol, out); - written++; - if ( written == original_size) { - free_tree(root); - fclose(in); - fclose(out); - return 0; - } - current = root; - } - } - } - - free_tree(root); - fclose(in); - fclose(out); - return 0; -} diff --git a/sk1/compressor b/sk1/compressor deleted file mode 100755 index b532b5cb14d318235081e894d931abf3e206af2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16832 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