From 5d88192d0d11f1377852dc29364be3e533dfdcde Mon Sep 17 00:00:00 2001 From: Penguin Date: Mon, 6 Dec 2021 11:06:44 -0600 Subject: [PATCH] day 3 finally finished... complicated solution for a simple question because im dumb --- day3/aoc_day3.c | 69 - day3/c/.gdb_history | 256 ++ day3/c/Makefile | 9 + day3/c/aoc_day3 | Bin 0 -> 25592 bytes day3/c/aoc_day3.c | 194 +- day3/c/aoc_day3.o | Bin 0 -> 18088 bytes day3/c/file.txt | 5654 ++++++++++++++++++++++++++++++++++++++++ day3/{ => c}/input.txt | 0 day3/c/input2.txt | 12 + 9 files changed, 6109 insertions(+), 85 deletions(-) delete mode 100644 day3/aoc_day3.c create mode 100644 day3/c/.gdb_history create mode 100644 day3/c/Makefile create mode 100755 day3/c/aoc_day3 create mode 100644 day3/c/aoc_day3.o create mode 100644 day3/c/file.txt rename day3/{ => c}/input.txt (100%) create mode 100644 day3/c/input2.txt diff --git a/day3/aoc_day3.c b/day3/aoc_day3.c deleted file mode 100644 index 9c5c208..0000000 --- a/day3/aoc_day3.c +++ /dev/null @@ -1,69 +0,0 @@ -#include -#include -#include - -#define ARR_LEN (1000) - -int main(int argc, char** argv) -{ - FILE* fp = fopen("input.txt", "r"); - if(!fp) - { - printf("FUCK"); - return -1; - } - - int bit_ct[12]; - int diagnostic_arr[ARR_LEN]; - - - memset(diagnostic_arr, 0, ARR_LEN * sizeof(int)); - memset(bit_ct, 0, 12 * sizeof(int)); - - - char* line = NULL; - size_t len = 0; - for(int ind = 0; ind < ARR_LEN; ind++) - { - ssize_t rc = getline(&line, &len, fp); - if(rc == -1) - { - break; - printf("FUCK\n"); - return -1; - } - diagnostic_arr[ind] = strtol(line, NULL, 2); - for(int bit = 0; bit < 12; bit++) - { - bit_ct[bit] += ((diagnostic_arr[ind] & (1 << bit))>>bit); - } - - - } - - /* uncomment this if u want to make ur code run like python */ - /* int mat[1000][10000000]; */ - - /* for(int zind = 0; zind < 1000; zind++) */ - /* { */ - /* for(int zzind = 0; zzind < 10000000; zzind++) */ - /* { */ - /* mat[zzind][zind]= 0; */ - /* } */ - /* } */ - int gamma = 0; - int dar = 0; - for(int bit = 0; bit < 12; bit++) - { - gamma += ((bit_ct[bit] > (ARR_LEN >> 1))<> 1))<> bit +p/t diag_read[ind] >> bit +p/t diag_read[ind] >> bit & 0x01 +n +n +p bit_ct +n +p bit_ct +q +b 185 +r +n +c +n +c +n +c +n +c +del +b 185 if *ctr_write == 1 +r +n +p *diag_write +p/t *diag_write +p/t *diag_write@*ctr_write +p/t *diag_write@*ctr_write+1 +p/t *diag_write@*ctr_write+2 +n +p o2_gen_rating +n +p o2_gen_rating +p diag_write[*ctr_write] +del +b 157 +b 166 +b 181 +r +c +c +p *diag_write@*ctr_write +c +c +p *ctr_read +c +p *diag_write@*ctr_write +r +c +c +c +c +p bit_ct +n +p bit_ct +n +p bit_ct +q +b 157 +b 166 +b 181 +r +c +c +c +c +p bit_ct +r +c +c +c +p *ctr_read +p/t *diag_read@*ctr_read +n +p/t diag_read[ind] +p/t diag_read[ind] >> bit +p/t diag_read[ind] >> bit & 0x01 +n +n +p bit_ct +p *ctr_read +c +p bit_ct +r +c +c +c +n +n +n +n +p diag_read[ind] +p/t diag_read[ind] +p/t diag_read[ind] >> bit +p bit +p/t diag_read[ind] +c +n +p *ctr_read +p bit_ct +n +n +p bit_ct +p *ctr_read +q +q diff --git a/day3/c/Makefile b/day3/c/Makefile new file mode 100644 index 0000000..2a88231 --- /dev/null +++ b/day3/c/Makefile @@ -0,0 +1,9 @@ +CC=gcc +CFLAGS=-std=gnu99 -O2 -g +PROJECT=aoc_day3 + +%.o: %.c + $(CC) -c -o $@ $< $(CFLAGS) + +$(PROJECT): aoc_day3.o + $(CC) -o aoc_day3 aoc_day3.o diff --git a/day3/c/aoc_day3 b/day3/c/aoc_day3 new file mode 100755 index 0000000000000000000000000000000000000000..5bf53a59316617e67ba1fe1211379119f112747f GIT binary patch literal 25592 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 ZkCK!p*H6noeaU~c%96i1NgxSj{|o5jKH>lX literal 0 HcmV?d00001 diff --git a/day3/c/aoc_day3.c b/day3/c/aoc_day3.c index f4069bb..f6b1f11 100644 --- a/day3/c/aoc_day3.c +++ b/day3/c/aoc_day3.c @@ -1,42 +1,79 @@ #include #include #include +#include +#include + #define ARR_LEN (1000) +#define BIT_AMOUNT (12) +#define INPUT_FILE ("input.txt") +#define BIT_MASK (0xFFF) +// read file, dump into diagnostics and count bits +void d3_init(int* diagnostics, size_t diag_len, + int* bit_ct, size_t bit_ct_len); -// read file, dump into diagnostics and count bits, do part one stuff // return answer for part one int d3_part_one(int* diagnostics, size_t diag_len, int* bit_ct, size_t bit_ct_len); // returns answer for part two -int d3_part_two(const int* const diagnostics, size_t diag_len, - const int* const bit_ct, size_t bit_len, - int power_consumption); +int d3_part_two(const int* const diagnostics, size_t diag_len); + + + +// if binary we're assuming bit size is 12 because this project is specific to 12 bit numbers +static void print_arr(const int* const arr, size_t len, bool binary) +{ + if(binary) + { + printf("\n"); + for(int ind = 0; ind < len; ind++) + { + printf("[%d]: ", ind); + for(int bit = BIT_AMOUNT - 1; bit >= 0; bit--) + { + printf("%d", ((arr[ind] & (1 << bit))>>bit)); + } + printf("\n"); + } + } + else + { + for(int ind = 0; ind < len; ind++) + { + printf("[%d]: %d\n", ind, arr[ind]); + } + } +} int main(int argc, char** argv) { int diagnostic_arr[ARR_LEN]; - int bit_ct[12]; + int bit_ct[BIT_AMOUNT]; memset(diagnostic_arr, 0, ARR_LEN * sizeof(int)); - memset(bit_ct, 0, 12 * sizeof(int)); + memset(bit_ct, 0, BIT_AMOUNT * sizeof(int)); + d3_init(diagnostic_arr, ARR_LEN, bit_ct, BIT_AMOUNT); - int power_consumption = d3_part_one(diagnostic_arr, ARR_LEN, bit_ct, 12); + int power_consumption = d3_part_one(diagnostic_arr, ARR_LEN, bit_ct, BIT_AMOUNT); printf("(Part 1 Answer) Power Consumption: %d\n", power_consumption); + int life_support_rating = d3_part_two(diagnostic_arr, ARR_LEN); + printf("(Part 2 Answer) Life support rating: %d\n", life_support_rating); return 0; } -// returns status of init -int d3_part_one(int* diagnostics, size_t diag_len, +// read file, dump into diagnostics and count bits +void d3_init(int* diagnostics, size_t diag_len, int* bit_ct, size_t bit_ct_len) { - FILE* fp = fopen("input.txt", "r"); + + FILE* fp = fopen(INPUT_FILE, "r"); if(!fp) { printf("Failed to open file for reading...\n"); @@ -53,31 +90,156 @@ int d3_part_one(int* diagnostics, size_t diag_len, exit(-1); } diagnostics[ind] = strtol(line, NULL, 2); - for(int bit = 0; bit < bit_ct_len; bit++) + for(int bit = 0; bit < BIT_AMOUNT; bit++) { + printf("%d", (diagnostics[ind] & (1<>bit); bit_ct[bit] += ((diagnostics[ind] & (1 << bit))>>bit); } + printf("\n"); } fclose(fp); +} +// returns status of init +int d3_part_one(int* diagnostics, size_t diag_len, + int* bit_ct, size_t bit_ct_len) +{ int gamma = 0; int epsilon = 0; for(int bit = 0; bit < bit_ct_len; bit++) { gamma += ((bit_ct[bit] > (ARR_LEN >> 1))<= 0; bit--) + { + int* ctr_write = &diag_copy[bit%2][ARR_LEN]; + int* ctr_read = &diag_copy[~(bit%2) & 0x01][ARR_LEN]; + + int* diag_write = diag_copy[bit%2]; + const int* diag_read = diag_copy[~(bit%2) & 0x01]; + + memset(diag_write, 0, (sizeof(int) * ARR_LEN) + sizeof(int)); + + volatile int bit_ct = 0; + for(int ind = 0; ind < *ctr_read; ind++) + { + if((diag_read[ind] >> bit) & 0x01) + { + bit_ct++; + } + } + + for(int ind = 0; ind < *ctr_read; ind++) + { + if(bit_ct >= (*ctr_read - bit_ct)) + { + if((diag_read[ind] >> bit) & 0x01) + diag_write[(*ctr_write)++] = diag_read[ind]; + } + else + { + if(!((diag_read[ind] >> bit) & 0x01)) + { + diag_write[(*ctr_write)++] = diag_read[ind]; + } + } + } + if(*ctr_write <= 1) + { + printf("found o2 rating\n"); + o2_gen_rating = diag_write[*ctr_write-1]; + break; + } + } + + + printf("o2 rating: %d\n", o2_gen_rating); + + // now we need to do a similar thing for co2 scubber rating + // this time we want to find the least common bit instead of most common bit + + // we copy diagnostics into our second diag_copy arr + // this way we start with diag_copy[0] being zeroed + // and diag_copy[1] having our original data. + // from there we will go back and forth, filtering data + // from eachother + memcpy(&diag_copy[(~(BIT_AMOUNT - 1)%2) & 0x01], diagnostics, diag_len * sizeof(int)); + + // last value will be active count, i.e. how many vars are actually in the array + diag_copy[(BIT_AMOUNT - 1)%2][ARR_LEN] = 0; + diag_copy[(~(BIT_AMOUNT - 1)%2) & 0x01][ARR_LEN] = ARR_LEN; + + // finding oxygen generator rating + for(int bit = BIT_AMOUNT - 1; bit >= 0; bit--) + { + int* ctr_write = &diag_copy[bit%2][ARR_LEN]; + int* ctr_read = &diag_copy[~(bit%2) & 0x01][ARR_LEN]; + + int* diag_write = diag_copy[bit%2]; + const int* diag_read = diag_copy[~(bit%2) & 0x01]; + + memset(diag_write, 0, (sizeof(int) * ARR_LEN) + sizeof(int)); + + int bit_ct = 0; + for(int ind = 0; ind < *ctr_read; ind++) + { + if((diag_read[ind] >> bit) & 0x01) + { + bit_ct++; + } + } + + for(int ind = 0; ind < *ctr_read; ind++) + { + if(bit_ct < (*ctr_read - bit_ct)) + { + if((diag_read[ind] >> bit) & 0x01) + diag_write[(*ctr_write)++] = diag_read[ind]; + } + else + { + if(!((diag_read[ind] >> bit) & 0x01)) + { + diag_write[(*ctr_write)++] = diag_read[ind]; + } + } + } + if(*ctr_write <= 1) + { + printf("found co2 \n"); + co2_scrubber_rating = diag_write[*ctr_write-1]; + break; + } + } - return ans; + printf("o2 gen rating: %d\nco2 scrubber rating: %d\n", o2_gen_rating, co2_scrubber_rating); + return co2_scrubber_rating * o2_gen_rating; } diff --git a/day3/c/aoc_day3.o b/day3/c/aoc_day3.o new file mode 100644 index 0000000000000000000000000000000000000000..31680ad6c73369f0f11add643c7eaee0997e3301 GIT binary patch literal 18088 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