summaryrefslogtreecommitdiff
path: root/Advent-of-Code-2021/AOC-14/aoc-14.c
diff options
context:
space:
mode:
Diffstat (limited to 'Advent-of-Code-2021/AOC-14/aoc-14.c')
-rw-r--r--Advent-of-Code-2021/AOC-14/aoc-14.c202
1 files changed, 0 insertions, 202 deletions
diff --git a/Advent-of-Code-2021/AOC-14/aoc-14.c b/Advent-of-Code-2021/AOC-14/aoc-14.c
deleted file mode 100644
index d23bfcb..0000000
--- a/Advent-of-Code-2021/AOC-14/aoc-14.c
+++ /dev/null
@@ -1,202 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
-
-#if 0
-#define PFILE "sample.txt"
-#else
-#define PFILE "input.txt"
-#endif
-
-#define T_CAP 100
-char template[T_CAP];
-size_t tmpl_sz = 0;
-
-#define R_CAP 100
-typedef struct {
- char inp[2];
- char ch;
-} rule_t;
-rule_t rules[R_CAP];
-size_t rules_sz = 0;
-
-#define CAP 1000000
-typedef uint64_t lsize_t;
-char product[CAP];
-lsize_t prod_sz = 0;
-
-
-void Parse()
-{
-
- // some init
- memset(template, '\0', T_CAP);
- memset(product, '\0', CAP);
-
- char ch;
- FILE *fp;
- fp = fopen(PFILE, "r");
-
- int mode = 0; // 0 - for template; 1 - for rules; 2 - intermid
- int mode_s = 0; // 0 - has not encountered ' '; 1 - after ' '
- while((ch = fgetc(fp)) != EOF)
- {
- if(ch == '\n' && mode == 0)
- {
- mode = 2;
- }
- else if(ch == '\n' && mode == 2)
- {
- mode = 1;
- }
- else if(ch == '\n' && mode == 1)
- {
- memset(rules[rules_sz].inp, '\0', 2);
- rules[rules_sz].ch = '\0';
- }
- else if(ch != '\n' && mode == 0)
- {
- template[tmpl_sz] = ch;
- tmpl_sz += 1;
- }
- else if(ch != '\n' && mode == 1)
- {
- switch(mode_s)
- {
- case 0:
- if(rules[rules_sz].inp[0] == '\0')
- {
- rules[rules_sz].inp[0] = ch;
- }
- else
- {
- rules[rules_sz].inp[1] = ch;
- mode_s = 1;
- }
- break;
- case 1:
- if(ch != ' ' && ch != '-' && ch != '>')
- {
- rules[rules_sz].ch = ch;
- rules_sz += 1;
- mode_s = 0;
- }
- }
- }
- }
-
- fclose(fp);
-}
-
-void InsertAt(char ch, size_t pos)
-{
- for(lsize_t i = prod_sz; i > pos; i--)
- {
- product[i] = product[i-1];
- }
- product[pos] = ch;
-
- prod_sz += 1;
-}
-
-void Part1()
-{
- Parse();
- prod_sz = tmpl_sz;
- memcpy(product, template, prod_sz);
-
- char elements[CAP]; memset(elements, '\0', CAP);
- lsize_t positions[CAP];
- lsize_t inrt_sz = 0;
-
- printf("%s\n", product);
-
- for(int step = 0; step < 40; step++)
- {
- for(lsize_t i = 0; i < (prod_sz-1); i++)
- {
- for(int j = 0; j < rules_sz; j++)
- {
- if(product[i] == rules[j].inp[0] &&
- product[i+1] == rules[j].inp[1])
- {
- elements[inrt_sz] = rules[j].ch;
- positions[inrt_sz] = i + 1 + inrt_sz; //error potential
- inrt_sz += 1;
- break;
- }
- }
- }
- for(lsize_t i = 0; i < inrt_sz; i++)
- {
- InsertAt(elements[i], positions[i]);
- }
- inrt_sz = 0;
- memset(elements, '\0', CAP);
- }
-
- // Get count and subtract
- lsize_t el_occurence[10];
- /* S - 0 */
- /* H - 1 */
- /* N - 2 */
- /* C - 3 */
- /* O - 4 */
- /* P - 5 */
- /* F - 6 */
- /* B - 7 */
- /* V - 8 */
- /* K - 9 */
-
- for(lsize_t i = 0; i < prod_sz; i++)
- {
- switch(product[i])
- {
- case 'S': el_occurence[0] += 1; break;
- case 'H': el_occurence[1] += 1; break;
- case 'N': el_occurence[2] += 1; break;
- case 'C': el_occurence[3] += 1; break;
- case 'O': el_occurence[4] += 1; break;
- case 'P': el_occurence[5] += 1; break;
- case 'F': el_occurence[6] += 1; break;
- case 'B': el_occurence[7] += 1; break;
- case 'V': el_occurence[8] += 1; break;
- case 'K': el_occurence[9] += 1; break;
- }
- }
-
- //get biggest
- lsize_t biggest = 0;
- for(int i = 0; i < 10; i++)
- {
- int counter = 0;
- for(int j = 0; j < 10; j++)
- if(el_occurence[i] >= el_occurence[j]) counter += 1;
- if(counter == 10) { biggest = el_occurence[i]; break; }
- }
-
- //get smallest
- lsize_t smallest = 0;
- for(int i = 0; i < 10; i++)
- {
- int counter = 0;
- for(int j = 0; j < 10; j++)
- if(el_occurence[i] <= el_occurence[j]) counter += 1;
- if(counter == 10) {smallest = el_occurence[i]; break; }
- }
-
- lsize_t result = biggest - smallest;
- printf("%llu-%llu=%llu", biggest, smallest, result);
-}
-
-void Part2()
-{
-
-}
-
-int main(void)
-{
- Part1();
- return 0;
-}