summaryrefslogtreecommitdiff
path: root/10
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2022-12-01 22:30:22 +0100
committerBond_009 <bond.009@outlook.com>2022-12-01 22:30:22 +0100
commitbaf4910870a6e8999802b9a4a22eabd4142a34e3 (patch)
tree2d11443dc21e53bd0d99d015cf789937d6d95862 /10
parent49d0c908f24b2c193c9deed1716fe36061ba26a1 (diff)
Move all Advent of Codes into one repo
Diffstat (limited to '10')
-rw-r--r--10/input102
-rw-r--r--10/part1.c70
-rw-r--r--10/part2.c87
-rw-r--r--10/possible_seq.asm30
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