diff options
Diffstat (limited to '10')
| -rw-r--r-- | 10/input | 102 | ||||
| -rw-r--r-- | 10/part1.c | 70 | ||||
| -rw-r--r-- | 10/part2.c | 87 | ||||
| -rw-r--r-- | 10/possible_seq.asm | 30 |
4 files changed, 0 insertions, 289 deletions
diff --git a/10/input b/10/input deleted file mode 100644 index 5746f73..0000000 --- a/10/input +++ /dev/null @@ -1,102 +0,0 @@ -103 -131 -121 -151 -118 -12 -7 -2 -90 -74 -160 -58 -15 -83 -153 -140 -166 -1 -148 -33 -165 -39 -100 -135 -68 -77 -25 -9 -54 -94 -101 -55 -141 -22 -97 -35 -57 -117 -102 -64 -109 -114 -56 -51 -125 -82 -154 -142 -155 -45 -75 -158 -120 -5 -19 -61 -34 -128 -106 -88 -84 -137 -96 -136 -27 -6 -21 -89 -69 -162 -112 -127 -119 -161 -38 -42 -134 -20 -81 -48 -73 -87 -26 -95 -146 -113 -76 -32 -70 -8 -18 -67 -124 -80 -93 -29 -126 -147 -28 -152 -145 -159 diff --git a/10/part1.c b/10/part1.c deleted file mode 100644 index f5a700e..0000000 --- a/10/part1.c +++ /dev/null @@ -1,70 +0,0 @@ -#include <stdio.h> -#include <stdint.h> -#include <stdlib.h> -#include <malloc.h> -#include <string.h> - -#define MAX_INPUT_LEN 128 - -void insert_value_sorted(int *list, size_t *size, int value) -{ - long long low = 0, high = *size; - while (low < high) { - int m = low + (high - low) / 2; - if (list[m] < value) { - low = m + 1; - } - else if (list[m] > value) { - high = m; - } - else { - // Value already exists in the list - return; - } - } - - for (long long i = *size - 1; i >= low; i--) { - list[i + 1] = list[i]; - } - - (*size)++; - list[low] = value; -} - -int solve(const char *filename) -{ - FILE *file = fopen(filename, "r"); - - // Include space for newline and string terminator - char buffer[128] = { 0 }; - - int input[MAX_INPUT_LEN] = { 0 }; - size_t input_size = 1; // 0 is our start value - - while (fgets(buffer, 128, file)) { - insert_value_sorted(input, &input_size, atoi(buffer)); - } - - fclose(file); - - int diff1 = 0; - int diff3 = 1; // Diff with adapter - - for (size_t i = 1; i < input_size; i++) - { - int diff = input[i] - input[i - 1]; - if (diff == 1) { - diff1++; - } - else if (diff == 3) { - diff3++; - } - } - - return diff1 * diff3; -} - -int main(int argc, char *argv[]) -{ - printf("%i\n", solve(argv[argc - 1])); -} diff --git a/10/part2.c b/10/part2.c deleted file mode 100644 index 5e766d4..0000000 --- a/10/part2.c +++ /dev/null @@ -1,87 +0,0 @@ -#include <stdio.h> -#include <stdint.h> -#include <stdlib.h> -#include <malloc.h> -#include <string.h> - -#include "../utils.h" - -#define MAX_INPUT_LEN 128 - -void insert_value_sorted(int *list, size_t *size, int value) -{ - long long low = 0, high = *size; - while (low < high) { - int m = low + (high - low) / 2; - if (list[m] < value) { - low = m + 1; - } - else if (list[m] > value) { - high = m; - } - else { - // Value already exists in the list - return; - } - } - - for (long long i = *size - 1; i >= low; i--) { - list[i + 1] = list[i]; - } - - (*size)++; - list[low] = value; -} - -#ifdef USE_ASM -uint64_t possible_seq(const int *input, size_t input_size); -#else -uint64_t possible_seq(const int *input, size_t input_size) -{ - // Use char to optimize for size - const static char TRIB[] = { 1, 1, 2, 4, 7 }; - int con = 0; - uint64_t res = 1; - const int *prev = input; - const int *cur = input + 1; - do { - if (likely(*cur - *prev == 1)) { - con++; - } - else { - res *= TRIB[con]; - con = 0; - } - } while (++prev && ++cur < input + input_size); - - return res; -} -#endif - -uint64_t solve(const char *filename) -{ - FILE *file = fopen(filename, "r"); - - // Include space for newline and string terminator - char buffer[16] = { 0 }; - - int input[MAX_INPUT_LEN] = { 0 }; - size_t input_size = 1; // 0 is our start value - - while (fgets(buffer, 16, file)) { - insert_value_sorted(input, &input_size, atoi(buffer)); - } - - // Add our device's built-in joltage adapter - input[input_size] = input[input_size - 1] + 3; - input_size++; - - fclose(file); - - return possible_seq(input, input_size); -} - -int main(int argc, char *argv[]) -{ - printf("%lu\n", solve(argv[argc - 1])); -} diff --git a/10/possible_seq.asm b/10/possible_seq.asm deleted file mode 100644 index b737d13..0000000 --- a/10/possible_seq.asm +++ /dev/null @@ -1,30 +0,0 @@ -global possible_seq - -section .rodata - TRIB: dq 1, 1, 2, 4, 7 ; tribonacci sequence (without first 2 zeroes) - -section .text - -possible_seq: - mov eax, 1 ; set up return value - xor ecx, ecx ; # of connected elements counter - lea rdx, [rdi + 4 * rsi - 4] ; pointer to the last element - lea r8, [rel TRIB] - jmp .loop -.ncon: - imul rax, qword [r8 + 8 * rcx] - xor ecx, ecx - add rdi, 4 - cmp rdi, rdx - jae .return -.loop: - mov esi, dword [rdi + 4] - sub esi, dword [rdi] - cmp esi, 1 - jne .ncon - inc ecx - add rdi, 4 - cmp rdi, rdx - jb .loop -.return: - ret |
