solved day 1 in python, and day3a/b in c... maybe i'll free() later
This commit is contained in:
parent
16b99e9837
commit
fc2392d3b8
21 changed files with 8781 additions and 2 deletions
20
day1/day1.py
Normal file
20
day1/day1.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "hoppasfanintedenhärstringenfinnsiinputfilen",
|
||||||
|
"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
|
||||||
|
file = open("./input", "r")
|
||||||
|
sum = 0
|
||||||
|
|
||||||
|
for line in file:
|
||||||
|
first = 999999
|
||||||
|
last = i = 0
|
||||||
|
index = [0, 0]
|
||||||
|
for number in numbers:
|
||||||
|
if (line.find(number)) != -1:
|
||||||
|
if (first := min(line.find(number), first)) is line.find(number):
|
||||||
|
index[0] = i
|
||||||
|
if (last := max(line.rfind(number), last)) is line.rfind(number):
|
||||||
|
index[1] = i
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
sum += (index[0] % 10) * 10 + index[1] % 10
|
||||||
|
|
||||||
|
print(sum)
|
4
day1/input.bakeasy
Normal file
4
day1/input.bakeasy
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
1abc2
|
||||||
|
pqr3stu8vwx
|
||||||
|
a1b2c3d4e5f
|
||||||
|
treb7uchet
|
1001
day1/output
Normal file
1001
day1/output
Normal file
File diff suppressed because it is too large
Load diff
106
day2/'
Normal file
106
day2/'
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#define MAX_GAMES 101
|
||||||
|
|
||||||
|
// cubes, R, G, B
|
||||||
|
const int cubes[3] = {12, 13, 14};
|
||||||
|
const char *colors[] = {"red", "green", "blue"};
|
||||||
|
|
||||||
|
int getCubes(char *ptr);
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
int gameID = 0;
|
||||||
|
int gameSum = 0;
|
||||||
|
char row[160];
|
||||||
|
char *ptr;
|
||||||
|
int length = 0;
|
||||||
|
int gameCubes[3] = {0, 0, 0};
|
||||||
|
int gameHands = 0;
|
||||||
|
int offset = 0;
|
||||||
|
int game[MAX_GAMES] = {0};
|
||||||
|
for (int i = 1; i < MAX_GAMES; i++)
|
||||||
|
game[i] = i;
|
||||||
|
int powerSum = 0;
|
||||||
|
|
||||||
|
|
||||||
|
FILE *input;
|
||||||
|
input = fopen("./input", "r");
|
||||||
|
// for each row
|
||||||
|
while(fgets(row, 160, input) != NULL) {
|
||||||
|
// increment game count
|
||||||
|
gameID++;
|
||||||
|
gameHands = 1;
|
||||||
|
offset = 0;
|
||||||
|
for (int i = 0; i < 3; i++) gameCubes[i] = 0;
|
||||||
|
|
||||||
|
printf("%s\n", row);
|
||||||
|
|
||||||
|
// not neccesary to decide length when we know amount of ';'?
|
||||||
|
// length = strchr(row, '\n') - &row[0];
|
||||||
|
// change each ; to \0
|
||||||
|
ptr = row;
|
||||||
|
while(ptr = strchr(ptr, ';')) {
|
||||||
|
ptr[0] = '\0';
|
||||||
|
gameHands++;
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\nGame %d hands: %d\n", gameID, gameHands);
|
||||||
|
|
||||||
|
// for each 'hand' (semicolon) ((NULL-char))
|
||||||
|
for(gameHands; gameHands > 0; gameHands--) {
|
||||||
|
printf("%s\n", row + offset);
|
||||||
|
// for each color
|
||||||
|
for(int i = 0; i < 3; i++) {
|
||||||
|
// use strstr to find color,
|
||||||
|
// move pointer to the beginning of said colour
|
||||||
|
ptr = strstr(row + offset, colors[i]);
|
||||||
|
// if (strstr(row, colors[i]) != NULL)
|
||||||
|
if (ptr != NULL) {
|
||||||
|
if (gameCubes[i] < getCubes(ptr))
|
||||||
|
gameCubes[i] = getCubes(ptr);
|
||||||
|
}
|
||||||
|
// higher than colors[i]? invalidate the game
|
||||||
|
if (gameCubes[i] > cubes[i]) {
|
||||||
|
game[gameID] = 0;
|
||||||
|
// printf("Game %d invalid\n", gameID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// pointer = strstr \0 + 1
|
||||||
|
offset += strlen(&row[offset]) + 1;
|
||||||
|
ptr = row + offset;
|
||||||
|
}
|
||||||
|
// printf("Game %d required RGB: %d, %d, %d\n",
|
||||||
|
// gameID, gameCubes[0],gameCubes[1],gameCubes[2]
|
||||||
|
// );
|
||||||
|
|
||||||
|
powerSum += gameCubes[0] * gameCubes[1] * gameCubes[2];
|
||||||
|
printf("Game %d powersum: %d\nCurrent Total: %d\n", gameID, gameCubes[0] * gameCubes[1] * gameCubes[2], powerSum);
|
||||||
|
}
|
||||||
|
for (int i = gameID + 1; i < MAX_GAMES; i++)
|
||||||
|
game[i] = 0;
|
||||||
|
for (int i = 0; i < MAX_GAMES; i++) {
|
||||||
|
gameSum += game[i];
|
||||||
|
}
|
||||||
|
printf("Game ID sum: %d\n", gameSum);
|
||||||
|
printf("Total power sum: %d\n", powerSum);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getCubes(char *ptr)
|
||||||
|
{
|
||||||
|
int num = 0;
|
||||||
|
|
||||||
|
// get two chars: pointer -3, pointer -2
|
||||||
|
// convert them to an int
|
||||||
|
if (ptr[-3] >= '0' && ptr[-3] <= '9') {
|
||||||
|
num += (ptr[-3] - '0') * 10;
|
||||||
|
}
|
||||||
|
if (ptr[-2] >= '0' && ptr[-2] <= '9') {
|
||||||
|
num += ptr[-2] - '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
return num;
|
||||||
|
}
|
BIN
day2/day2b
BIN
day2/day2b
Binary file not shown.
|
@ -2,7 +2,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
#define MAX_GAMES 101
|
#define MAX_GAMES 100
|
||||||
|
|
||||||
// cubes, R, G, B
|
// cubes, R, G, B
|
||||||
const int cubes[3] = {12, 13, 14};
|
const int cubes[3] = {12, 13, 14};
|
||||||
|
@ -36,7 +36,6 @@ int main ()
|
||||||
offset = 0;
|
offset = 0;
|
||||||
for (int i = 0; i < 3; i++) gameCubes[i] = 0;
|
for (int i = 0; i < 3; i++) gameCubes[i] = 0;
|
||||||
|
|
||||||
printf("\nGame %d hands: %d\n", gameID, gameHands);
|
|
||||||
printf("%s\n", row);
|
printf("%s\n", row);
|
||||||
|
|
||||||
// not neccesary to decide length when we know amount of ';'?
|
// not neccesary to decide length when we know amount of ';'?
|
||||||
|
@ -49,6 +48,8 @@ int main ()
|
||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("\nGame %d hands: %d\n", gameID, gameHands);
|
||||||
|
|
||||||
// for each 'hand' (semicolon) ((NULL-char))
|
// for each 'hand' (semicolon) ((NULL-char))
|
||||||
for(gameHands; gameHands > 0; gameHands--) {
|
for(gameHands; gameHands > 0; gameHands--) {
|
||||||
printf("%s\n", row + offset);
|
printf("%s\n", row + offset);
|
||||||
|
|
BIN
day3/day3a
Executable file
BIN
day3/day3a
Executable file
Binary file not shown.
203
day3/day3a.c
Normal file
203
day3/day3a.c
Normal file
|
@ -0,0 +1,203 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
int rows = 0;
|
||||||
|
int columns;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int pos[2];
|
||||||
|
int sum;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
} number;
|
||||||
|
typedef struct {
|
||||||
|
int length;
|
||||||
|
int listSize;
|
||||||
|
long unsigned int gearSum;
|
||||||
|
number numbers[];
|
||||||
|
} numberList;
|
||||||
|
|
||||||
|
numberList *findNumbers();
|
||||||
|
numberList *addNumber(numberList *list, int sum, int len, int col, int row);
|
||||||
|
int readNumber(char **schematic, int *len, int *col, int row);
|
||||||
|
unsigned long int checkNumbers(char **schematic, numberList *list, int rows, int columns);
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
int columnsc = 0;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
numberList *list = malloc(sizeof(int) * 2 + sizeof(long unsigned int) + sizeof(number) * 8);
|
||||||
|
list->listSize = 8;
|
||||||
|
list->length = 0;
|
||||||
|
|
||||||
|
FILE *input;
|
||||||
|
input = fopen("./input", "r");
|
||||||
|
|
||||||
|
// see dimensions of file
|
||||||
|
while ((c = fgetc(input)) != EOF) {
|
||||||
|
if (c == '\n') {
|
||||||
|
rows++;
|
||||||
|
if (columns < columnsc)
|
||||||
|
columns = columnsc;
|
||||||
|
columnsc = 0;
|
||||||
|
} else { // I could probably not do this every row but w/e
|
||||||
|
columnsc++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// allocate memory for the char array array
|
||||||
|
char **schematic = malloc(columns * sizeof(char*));
|
||||||
|
for (int i = 0; i < columns; i++)
|
||||||
|
schematic[i] = malloc(rows * sizeof(char*));
|
||||||
|
|
||||||
|
// read the file again to fill up the array
|
||||||
|
rewind(input);
|
||||||
|
for (int row = 0; row < rows; row++) {
|
||||||
|
for (int col = 0; col < columns; col++) {
|
||||||
|
schematic[col][row] = fgetc(input);
|
||||||
|
}
|
||||||
|
fgetc(input); // discard \n
|
||||||
|
}
|
||||||
|
fclose(input);
|
||||||
|
|
||||||
|
// just print the damn thing
|
||||||
|
// for (int row = 0; row < rows; row++) {
|
||||||
|
// for (int col = 0; col < columns; col++) {
|
||||||
|
// printf("%c", schematic[col][row]);
|
||||||
|
// }
|
||||||
|
// printf("\n");
|
||||||
|
// }
|
||||||
|
printf("\nRows: %d\nColumns: %d\n\n", rows, columns);
|
||||||
|
|
||||||
|
list = findNumbers(schematic, list);
|
||||||
|
printf("Found %d numbers.\n", list->length);
|
||||||
|
|
||||||
|
printf("Total sum is %lu.\n", checkNumbers(schematic, list, rows, columns));
|
||||||
|
printf("Gear ratio sum is %lu.\n", list->gearSum);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test gear: count how many numbers are around it, if 2, multiply and return product
|
||||||
|
int checkGear(char **schematic, int col, int row)
|
||||||
|
{
|
||||||
|
int numbers[2];
|
||||||
|
int foundNumbers = 0;
|
||||||
|
int ratio = 0;
|
||||||
|
for (int y = row - 1; y <= row + 1; y++) {
|
||||||
|
if (y < 0) y++;
|
||||||
|
for (int x = col + 1; x >= col - 1; x--) {
|
||||||
|
if (x >= columns) x--;
|
||||||
|
if (x < 0) break;
|
||||||
|
|
||||||
|
while (x < columns - 1 &&(schematic[x][y] >= '0' && schematic[x][y] <= '9'
|
||||||
|
&& schematic[x + 1][y] >= '0' && schematic[x + 1][y] <= '9')) {
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
if (schematic[x][y] >= '0' && schematic[x][y] <= '9') {
|
||||||
|
if (foundNumbers >= 2) {
|
||||||
|
foundNumbers++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int len = 0; // TODO: Really not needed
|
||||||
|
numbers[foundNumbers] = readNumber(schematic, &len, &x, y);
|
||||||
|
foundNumbers++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (foundNumbers == 2) {
|
||||||
|
ratio = numbers[0] * numbers[1];
|
||||||
|
printf("Values: %d and %d = %d\n", numbers[0], numbers[1], numbers[0] * numbers[1]);
|
||||||
|
}
|
||||||
|
return ratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Why is len a ptr? because I need to return two values duh
|
||||||
|
int readNumber(char **schematic, int *len, int *col, int row)
|
||||||
|
{
|
||||||
|
int sum = 0;
|
||||||
|
while (*col >= 0 && schematic[*col][row] >= '0' && schematic[*col][row] <= '9') {
|
||||||
|
sum += (schematic[*col][row] - '0') * (int)pow(10, *len);
|
||||||
|
(*len)++;
|
||||||
|
(*col)--;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*col)++;
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
// for each number in list, check adjacent fields
|
||||||
|
unsigned long int checkNumbers(char **schematic, numberList *list, int rows, int columns)
|
||||||
|
{
|
||||||
|
unsigned long int sum = 0;
|
||||||
|
int previous;
|
||||||
|
for(int i = 0; i < list->length; i++) {
|
||||||
|
// make sure col or row is never too high / low
|
||||||
|
number num = list->numbers[i];
|
||||||
|
for (int row = num.pos[1] - 1; row <= num.pos[1] + 1; row++) {
|
||||||
|
if (row < 0) row++;
|
||||||
|
if (row >= rows) break;
|
||||||
|
for (int col = num.pos[0] - 1; col < num.pos[0] + num.len + 1; col++) {
|
||||||
|
if (col < 0) col++;
|
||||||
|
if (col >= columns) break;
|
||||||
|
char c = schematic[col][row];
|
||||||
|
|
||||||
|
if (!isdigit(c) && c != '.'){
|
||||||
|
previous = num.sum;
|
||||||
|
sum += num.sum;
|
||||||
|
goto nextIteration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nextIteration:
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// för varje position i 2D-arrayen, om siffra, leta efter dess "start" genom att gå åt vänster
|
||||||
|
// lagra en "pekare" till starten, längden (antalet siffror) och totalvärdet
|
||||||
|
// ^ gör en lista av dessa
|
||||||
|
// hoppa till slutet av den man hittade och iterera vidare genom sökfältet
|
||||||
|
numberList *findNumbers(char **schematic, numberList *list)
|
||||||
|
{
|
||||||
|
for (int row = 0; row < rows; row++) {
|
||||||
|
for (int col = columns - 1; col >= 0; col--) {
|
||||||
|
if (schematic[col][row] == '*') {
|
||||||
|
int sum = checkGear(schematic, col, row);
|
||||||
|
printf("%d + %d = ", list->gearSum, sum);
|
||||||
|
list->gearSum += sum;
|
||||||
|
printf("%d\n", list->gearSum);
|
||||||
|
}
|
||||||
|
if (schematic[col][row] >= '0' && schematic[col][row] <= '9') {
|
||||||
|
int len = 0;
|
||||||
|
int sum = readNumber(schematic, &len, &col, row);
|
||||||
|
list = addNumber(list, sum, len, col, row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
numberList *addNumber(numberList *list, int sum, int len, int col, int row)
|
||||||
|
{
|
||||||
|
if (list->length >= list->listSize) {
|
||||||
|
list->listSize = list->listSize * 2;
|
||||||
|
printf("Resizing!\n", list->listSize, list->length);
|
||||||
|
printf("size: %d length: %d\n", list->listSize, list->length);
|
||||||
|
list = realloc(list, list->listSize * sizeof(number) + sizeof(int) * 2 + sizeof(long unsigned int));
|
||||||
|
}
|
||||||
|
list->numbers[list->length].pos[0] = col + 1;
|
||||||
|
list->numbers[list->length].pos[1] = row;
|
||||||
|
list->numbers[list->length].sum = sum;
|
||||||
|
list->numbers[list->length].len = len;
|
||||||
|
list->length++;
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
269
day3/erik.out
Normal file
269
day3/erik.out
Normal file
|
@ -0,0 +1,269 @@
|
||||||
|
Values: 101 and 893
|
||||||
|
Values: 102 and 403
|
||||||
|
Values: 103 and 343
|
||||||
|
Values: 108 and 845
|
||||||
|
Values: 110 and 773
|
||||||
|
Values: 114 and 362
|
||||||
|
Values: 114 and 480
|
||||||
|
Values: 116 and 326
|
||||||
|
Values: 116 and 988
|
||||||
|
Values: 117 and 981
|
||||||
|
Values: 126 and 390
|
||||||
|
Values: 135 and 531
|
||||||
|
Values: 145 and 313
|
||||||
|
Values: 14 and 289
|
||||||
|
Values: 152 and 280
|
||||||
|
Values: 152 and 382
|
||||||
|
Values: 154 and 203
|
||||||
|
Values: 163 and 837
|
||||||
|
Values: 164 and 650
|
||||||
|
Values: 165 and 152
|
||||||
|
Values: 165 and 717
|
||||||
|
Values: 165 and 93
|
||||||
|
Values: 167 and 364
|
||||||
|
Values: 174 and 54
|
||||||
|
Values: 175 and 666
|
||||||
|
Values: 177 and 37
|
||||||
|
Values: 17 and 735
|
||||||
|
Values: 189 and 142
|
||||||
|
Values: 202 and 184
|
||||||
|
Values: 203 and 445
|
||||||
|
Values: 203 and 604
|
||||||
|
Values: 205 and 674
|
||||||
|
Values: 206 and 193
|
||||||
|
Values: 212 and 290
|
||||||
|
Values: 213 and 760
|
||||||
|
Values: 218 and 130
|
||||||
|
Values: 218 and 639
|
||||||
|
Values: 224 and 235
|
||||||
|
Values: 225 and 919
|
||||||
|
Values: 226 and 717
|
||||||
|
Values: 229 and 902
|
||||||
|
Values: 22 and 380
|
||||||
|
Values: 230 and 793
|
||||||
|
Values: 238 and 302
|
||||||
|
Values: 240 and 969
|
||||||
|
Values: 241 and 822
|
||||||
|
Values: 241 and 881
|
||||||
|
Values: 241 and 968
|
||||||
|
Values: 253 and 984
|
||||||
|
Values: 254 and 837
|
||||||
|
Values: 257 and 875
|
||||||
|
Values: 263 and 325
|
||||||
|
Values: 263 and 746
|
||||||
|
Values: 264 and 438
|
||||||
|
Values: 266 and 387
|
||||||
|
Values: 266 and 749
|
||||||
|
Values: 267 and 7
|
||||||
|
Values: 271 and 486
|
||||||
|
Values: 273 and 806
|
||||||
|
Values: 281 and 396
|
||||||
|
Values: 289 and 447
|
||||||
|
Values: 306 and 434
|
||||||
|
Values: 310 and 752
|
||||||
|
Values: 320 and 670
|
||||||
|
Values: 322 and 769
|
||||||
|
Values: 329 and 664
|
||||||
|
Values: 332 and 491
|
||||||
|
Values: 334 and 978
|
||||||
|
Values: 335 and 318
|
||||||
|
Values: 336 and 814
|
||||||
|
Values: 336 and 883
|
||||||
|
Values: 339 and 238
|
||||||
|
Values: 343 and 283
|
||||||
|
Values: 347 and 222
|
||||||
|
Values: 347 and 817
|
||||||
|
Values: 348 and 252
|
||||||
|
Values: 349 and 924
|
||||||
|
Values: 355 and 485
|
||||||
|
Values: 355 and 838
|
||||||
|
Values: 355 and 981
|
||||||
|
Values: 356 and 891
|
||||||
|
Values: 359 and 793
|
||||||
|
Values: 359 and 807
|
||||||
|
Values: 359 and 936
|
||||||
|
Values: 365 and 553
|
||||||
|
Values: 370 and 961
|
||||||
|
Values: 375 and 838
|
||||||
|
Values: 378 and 251
|
||||||
|
Values: 378 and 91
|
||||||
|
Values: 381 and 53
|
||||||
|
Values: 381 and 922
|
||||||
|
Values: 385 and 294
|
||||||
|
Values: 387 and 875
|
||||||
|
Values: 389 and 963
|
||||||
|
Values: 394 and 427
|
||||||
|
Values: 398 and 332
|
||||||
|
Values: 3 and 162
|
||||||
|
Values: 414 and 583
|
||||||
|
Values: 419 and 261
|
||||||
|
Values: 420 and 833
|
||||||
|
Values: 424 and 227
|
||||||
|
Values: 424 and 296
|
||||||
|
Values: 439 and 299
|
||||||
|
Values: 441 and 367
|
||||||
|
Values: 44 and 224
|
||||||
|
Values: 450 and 576
|
||||||
|
Values: 454 and 245
|
||||||
|
Values: 458 and 592
|
||||||
|
Values: 460 and 105
|
||||||
|
Values: 464 and 13
|
||||||
|
Values: 473 and 709
|
||||||
|
Values: 476 and 350
|
||||||
|
Values: 488 and 409
|
||||||
|
Values: 489 and 21
|
||||||
|
Values: 498 and 268
|
||||||
|
Values: 49 and 212
|
||||||
|
Values: 509 and 310
|
||||||
|
Values: 510 and 823
|
||||||
|
Values: 512 and 723
|
||||||
|
Values: 522 and 940
|
||||||
|
Values: 524 and 978
|
||||||
|
Values: 526 and 785
|
||||||
|
Values: 527 and 73
|
||||||
|
Values: 529 and 554
|
||||||
|
Values: 536 and 501
|
||||||
|
Values: 544 and 599
|
||||||
|
Values: 544 and 619
|
||||||
|
Values: 548 and 699
|
||||||
|
Values: 566 and 266
|
||||||
|
Values: 568 and 719
|
||||||
|
Values: 569 and 498
|
||||||
|
Values: 571 and 394
|
||||||
|
Values: 580 and 308
|
||||||
|
Values: 586 and 811
|
||||||
|
Values: 588 and 243
|
||||||
|
Values: 58 and 85
|
||||||
|
Values: 591 and 169
|
||||||
|
Values: 595 and 958
|
||||||
|
Values: 5 and 434
|
||||||
|
Values: 5 and 714
|
||||||
|
Values: 600 and 826
|
||||||
|
Values: 601 and 424
|
||||||
|
Values: 609 and 477
|
||||||
|
Values: 612 and 680
|
||||||
|
Values: 617 and 179
|
||||||
|
Values: 617 and 519
|
||||||
|
Values: 622 and 769
|
||||||
|
Values: 631 and 92
|
||||||
|
Values: 637 and 324
|
||||||
|
Values: 640 and 859
|
||||||
|
Values: 643 and 698
|
||||||
|
Values: 64 and 38
|
||||||
|
Values: 64 and 971
|
||||||
|
Values: 652 and 398
|
||||||
|
Values: 653 and 734
|
||||||
|
Values: 654 and 991
|
||||||
|
Values: 661 and 598
|
||||||
|
Values: 661 and 771
|
||||||
|
Values: 662 and 587
|
||||||
|
Values: 663 and 369
|
||||||
|
Values: 667 and 742
|
||||||
|
Values: 676 and 218
|
||||||
|
Values: 678 and 233
|
||||||
|
Values: 679 and 532
|
||||||
|
Values: 679 and 670
|
||||||
|
Values: 67 and 914
|
||||||
|
Values: 688 and 586
|
||||||
|
Values: 691 and 689
|
||||||
|
Values: 694 and 101
|
||||||
|
Values: 695 and 766
|
||||||
|
Values: 698 and 616
|
||||||
|
Values: 69 and 437
|
||||||
|
Values: 700 and 831
|
||||||
|
Values: 701 and 918
|
||||||
|
Values: 702 and 242
|
||||||
|
Values: 703 and 256
|
||||||
|
Values: 704 and 195
|
||||||
|
Values: 704 and 29
|
||||||
|
Values: 704 and 94
|
||||||
|
Values: 705 and 699
|
||||||
|
Values: 710 and 112
|
||||||
|
Values: 712 and 250
|
||||||
|
Values: 717 and 911
|
||||||
|
Values: 721 and 336
|
||||||
|
Values: 723 and 507
|
||||||
|
Values: 725 and 830
|
||||||
|
Values: 727 and 179
|
||||||
|
Values: 734 and 666
|
||||||
|
Values: 735 and 361
|
||||||
|
Values: 739 and 701
|
||||||
|
Values: 741 and 637
|
||||||
|
Values: 746 and 984
|
||||||
|
Values: 749 and 491
|
||||||
|
Values: 74 and 312
|
||||||
|
Values: 74 and 374
|
||||||
|
Values: 750 and 557
|
||||||
|
Values: 750 and 638
|
||||||
|
Values: 755 and 662
|
||||||
|
Values: 75 and 313
|
||||||
|
Values: 777 and 693
|
||||||
|
Values: 782 and 420
|
||||||
|
Values: 784 and 828
|
||||||
|
Values: 784 and 940
|
||||||
|
Values: 785 and 798
|
||||||
|
Values: 788 and 964
|
||||||
|
Values: 790 and 120
|
||||||
|
Values: 793 and 790
|
||||||
|
Values: 797 and 211
|
||||||
|
Values: 806 and 675
|
||||||
|
Values: 810 and 889
|
||||||
|
Values: 813 and 998
|
||||||
|
Values: 818 and 136
|
||||||
|
Values: 81 and 56
|
||||||
|
Values: 826 and 963
|
||||||
|
Values: 82 and 23
|
||||||
|
Values: 833 and 589
|
||||||
|
Values: 834 and 346
|
||||||
|
Values: 842 and 118
|
||||||
|
Values: 844 and 906
|
||||||
|
Values: 846 and 144
|
||||||
|
Values: 848 and 904
|
||||||
|
Values: 849 and 226
|
||||||
|
Values: 851 and 949
|
||||||
|
Values: 85 and 258
|
||||||
|
Values: 860 and 219
|
||||||
|
Values: 866 and 859
|
||||||
|
Values: 86 and 308
|
||||||
|
Values: 87 and 586
|
||||||
|
Values: 889 and 66
|
||||||
|
Values: 88 and 235
|
||||||
|
Values: 89 and 265
|
||||||
|
Values: 8 and 581
|
||||||
|
Values: 900 and 152
|
||||||
|
Values: 900 and 649
|
||||||
|
Values: 908 and 496
|
||||||
|
Values: 90 and 496
|
||||||
|
Values: 910 and 620
|
||||||
|
Values: 914 and 192
|
||||||
|
Values: 91 and 794
|
||||||
|
Values: 922 and 751
|
||||||
|
Values: 928 and 730
|
||||||
|
Values: 931 and 60
|
||||||
|
Values: 932 and 344
|
||||||
|
Values: 935 and 486
|
||||||
|
Values: 938 and 59
|
||||||
|
Values: 939 and 180
|
||||||
|
Values: 943 and 445
|
||||||
|
Values: 944 and 333
|
||||||
|
Values: 947 and 740
|
||||||
|
Values: 948 and 675
|
||||||
|
Values: 949 and 11
|
||||||
|
Values: 950 and 524
|
||||||
|
Values: 950 and 912
|
||||||
|
Values: 953 and 808
|
||||||
|
Values: 954 and 665
|
||||||
|
Values: 956 and 998
|
||||||
|
Values: 957 and 474
|
||||||
|
Values: 961 and 208
|
||||||
|
Values: 962 and 308
|
||||||
|
Values: 965 and 914
|
||||||
|
Values: 96 and 421
|
||||||
|
Values: 971 and 225
|
||||||
|
Values: 972 and 408
|
||||||
|
Values: 974 and 767
|
||||||
|
Values: 975 and 360
|
||||||
|
Values: 985 and 514
|
||||||
|
Values: 98 and 55
|
||||||
|
Values: 990 and 739
|
||||||
|
Values: 9 and 402
|
1097
day3/erik.out2
Normal file
1097
day3/erik.out2
Normal file
File diff suppressed because it is too large
Load diff
1092
day3/erik.out3
Normal file
1092
day3/erik.out3
Normal file
File diff suppressed because it is too large
Load diff
140
day3/input
Normal file
140
day3/input
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
..224.....487...................718.....................378............................................284........310......313..........311.
|
||||||
|
....*..............................*744....486*485......*......741......@...359.#666...439................*925....*......$..+........@......
|
||||||
|
.235................758..440...........................251....*......262.....*..........*......................752......774.......515.......
|
||||||
|
.........705%..@746........+..942*591.347.470...#..257.........637...........793.......299..../.....813....509......464......&.........688..
|
||||||
|
.....82................................*.../..901.....*..................836.....&............814...*........*..............80...17*....*...
|
||||||
|
.../...*...679.661.....299...........222.............875.....213...161............964...894.........998.....310....258.85...........735.586.
|
||||||
|
.650..23..#......*.......................................760*........@./........................202...................*.....339.............
|
||||||
|
..............598......#.....536....702*.........705..........793......957............./........*...935...........965.......................
|
||||||
|
..................*.357...+.....@.......242.......*......283..*...=956.......118.......959...184...*..............*....401*527.....348...161
|
||||||
|
.63=...955.523..77......978.846....849..........699..........790........=911.*.....87...............486.........914..............=..........
|
||||||
|
.........*.........842......*.......*..................*127....................844...*....946.......................235...209@...710.735....
|
||||||
|
...........@.........*.....144....226....298........560.....253.........431......*...586.......723..../...482.......&...................*...
|
||||||
|
...........871../918........................+....................329*......%.....906.............*...350.....@...............365.......361..
|
||||||
|
......................536............................+..793..........664.....739................507......289.....256%...73..*...............
|
||||||
|
.356..834..............*.........96.939..............28.+....=..............*...........................*................$.553..........526.
|
||||||
|
...*...*.............501..746....*..-.......=.................890.....+...701..............807........447......97$..%...........58......$...
|
||||||
|
.891....346...699...........*.421......+....666......198*791......340.433............#...%...*.......................316........*.....%.....
|
||||||
|
..............%........81.984...........462....................../..........116...711....963...$................380.......745...85....224...
|
||||||
|
.........370......923..@.....................563...........188+.........326*...................67.815..............*582.....................
|
||||||
|
.........*........-........#530.........489........59...................................................#.....57.........100.*.......441*161
|
||||||
|
.637*....961...........118...........21*...........@..216+.........................+....432*.*309..64....992.......81......=.781.644........
|
||||||
|
.....324.........126......*166...............&...................385*..............233............*................*..436...........*517....
|
||||||
|
.88*.........390*................355..335...372....+254..............294...$589........&..803/.....38..-...........56..$....................
|
||||||
|
....235.-.........+196...948....*........-................359.........................398.............608..../.................145..346.....
|
||||||
|
........915.................-.485.945.................936*................114.............118...............490.536..............*.%........
|
||||||
|
.663........61.......856..........+....343....859...............*345.......*...=862............711.............................313.....606..
|
||||||
|
........23...$.....@..................*......................316.....529.362.............49......................307*791....................
|
||||||
|
225...............281...#..222.....@..283..............675............*.........911*90..-.....914..%39....509...............................
|
||||||
|
.......797*....$........23..../...895.............67.......164.896.....554.....................*............=..............460........181...
|
||||||
|
...........211.474...............................@...........*....*201..........911.717.#....192.75..679...........$.........*.........=....
|
||||||
|
....355.........................&.....................678.650......................*.....128.....*.....*.........925..230...105.............
|
||||||
|
....*.......409#.......*897.....698....427.........+....*.......*...............................313...670..521.......*....&.............*308
|
||||||
|
...838..335.................367........-..........325....233...224...950......688.....199.774.........................793.108........501....
|
||||||
|
...........*..102..924.349...+..595....................................*................&..............395+.....................753.........
|
||||||
|
.........318...*......*........*....676...759.154...................524...........908.........694.211................173...........*214..424
|
||||||
|
....458........403...........958.98....*........*..............688......957...488..+...........*.../....................................*...
|
||||||
|
.......*.............591...............218.....203.....196$.......+....*........*......................765......971......./....927*741..227.
|
||||||
|
......592..%60.$.....*.....885/....287...............................474.........409......226.174.......@........*.....230..................
|
||||||
|
...............162.169.................510..962..............17......................32@..*...*.................225....................-....
|
||||||
|
.....880...................201.....823*........*...914.724.........89...&.......267=.....717.54.436..........60...............&.........69..
|
||||||
|
710........601....306.287.....+.........65...308....&...=.../......*.....926..................................*........278.415......-.......
|
||||||
|
..............*..*......&..........241.%...................827../.265.............662.678......@...#......@.....$......-............734.144.
|
||||||
|
.............424..434.....701.....*........380*731.............24.................*...&........973..741....728..357.........................
|
||||||
|
........304.................*...881................238.....740.........947........587...22...........................271*........603....@...
|
||||||
|
...................266.....918....................*..........+.519.617..*...826..........*............./268..974.........486.376....*.295...
|
||||||
|
...939.........363.*...............378..........302....586........*....740...=..........380........931...........................12.........
|
||||||
|
...*..........-.....387...............*..588..............*..../...............315...................-...712..491.........956.....#.........
|
||||||
|
.180.454...................104..661...91...*.............811....370......471...-....419....804..........*...................*...............
|
||||||
|
.....*.......@../464........%..*............243.....578...................&..........*...........604..250.....784....750....998.............
|
||||||
|
.....245....165.................771...................&.......#.691...768....654....261.........................*.......*............566....
|
||||||
|
441..................91.....194.......643...932*............379.#....$.......*.................86.............940..263.638...........*......
|
||||||
|
...+.............%.../.......#.........*........344...795..................991..........544....*..................*..........767...266......
|
||||||
|
.......-..708..727.....191$......*.....698....=...................990................+.....*....308.......@......325.........*.........44...
|
||||||
|
...18.397....=.....93.........649.900.........62....-........322.....*.......@......339....619..........404..........540........./....*.....
|
||||||
|
..../...............%............................742............*...........196................874.205........96#..............203.224......
|
||||||
|
.........704...727.................496.......*........135....769........./.................%....&....*.../..=.........757...................
|
||||||
|
........*........*..424..........&........714.5........*...........@....884...............114.......674.144..83..........*302...........%...
|
||||||
|
........29....179..*............104..................531....629.455..................473......300....................254..............640...
|
||||||
|
..................296.......................................................1........*.......%..............548........*.....103............
|
||||||
|
....381...........................365#..713.282.......%744....................../....709...#...=...431...$.*......*.....837.....*9.....*....
|
||||||
|
......*.90.....347.179#...................%.......359..........92............304...*.....923.446.......385.699.....749..............193.206.
|
||||||
|
....922.+.......*.......-197.....................*.......128........273....@.....758..............439...................650*54.736#.........
|
||||||
|
................817..-..........152..594..949..807.......$...224...*.....124............889.......=...................................625...
|
||||||
|
....139....667......239........*...........*.......387........%..806........../...........*..788....632...........=8......584-......*.%.....
|
||||||
|
...........*.................280...........11.........*726............181......761..-....66.....%....-................64...........14.......
|
||||||
|
............742.736.725..........708.667..........332.......828*750......-.........425.......................944.....*...................926
|
||||||
|
.719...110...........*.....348...=..........121......*........................................*.......961.....*.......971...........+.......
|
||||||
|
..../.....*629........830..*............91....&..241..491...930............561................889....*....710.333..............163...311....
|
||||||
|
......%...................252.../..................*...........*270.......................165.....208.......*..................../.......694
|
||||||
|
...914...126...267.183........952..$645......414.822................................69.......-..........=..112.464..267....359..........*...
|
||||||
|
.............7*..........................806.../.....931.....*.....355..............*....928...........854.........-..............*993...101
|
||||||
|
439.897...........%...........8......381...*........*....748..987....*............437.......*....954.......................*................
|
||||||
|
.......*595....783........49.....110.$...675...8...60.....=........981........&..........730....*.............336.......120.790..........386
|
||||||
|
............90..............*212...*..........*.......985.....153........*..12...912*383......665.....754.....-.....................950.....
|
||||||
|
......790#.*........896@.........773....777..581..514*....910.....5.....579.............................=.......#.....................*.....
|
||||||
|
...&.......496...........347..............*...............*...................../............................790..............334......912..
|
||||||
|
692............609....&.......694..........693...213....620......695......871..385.......82..........785.......................*..163.......
|
||||||
|
.........#....*......984.........*.................=............*.......................................*.545...-............978.....*......
|
||||||
|
......971...477.............465......196*313..........447.......766......49.......126*480.............798......792..359*193...........837...
|
||||||
|
................157...........+..................773.=..............752$....................447*565..........................*53............
|
||||||
|
.384%..........@.........449............470..749...@.........@792..............138..527.......................339.....299.505...........287.
|
||||||
|
......691........700........@......96..........*........721*.....................@....*...942......845........*......-.........713..........
|
||||||
|
.....*......260/...*...........................491..452.....336.......................73....+..960..........238...........163$..&...=.@.....
|
||||||
|
....689.............831...282....709.960.............=.............204............................#..............59...97..........199..111..
|
||||||
|
........................$........../........-....498......................557....&...........972............450.............................
|
||||||
|
.............653........476...398.........619...*.....*280..923..............*31..691.........*........=...*.....67......782................
|
||||||
|
..............*....%..........*.........+......268...........&........428....................408....740....576....*.......*.........$.......
|
||||||
|
....-../...734......317.114.332...795...743.........................-..=..908...........381.......................914...420.*647....528.....
|
||||||
|
..284.825...............*......................721/.=929.........324.....*....167.561...*.....815*466.......................................
|
||||||
|
..............389..304.480.......851..@....585..............942%......#.496....*....-.53................170....938*..........518............
|
||||||
|
........368..*.....@..............*....941..+.......*...............930.........364.......522......................59.........+....$....652.
|
||||||
|
...........+.963...................949...........828.784......860............*......420.....*..................*......548...........310.*...
|
||||||
|
.....476...............*...............=...94.+..................&........589.833....*..426.940.....&.....959.993.&88....................398
|
||||||
|
.......*................624....917...838..*...664.......721........................833...$.......672......$............19...................
|
||||||
|
....350.......................&....=..............333.................707....................................240..336....=...746.263..$463..
|
||||||
|
.........................-.........220.....663...../.............*849..#..631.....712....=.../...308.580.............*..........*...........
|
||||||
|
.78@......../..........422....444.............*...............281............*...*....447..37.......*................814....................
|
||||||
|
........./...788...810.........&..............369..985....-................92................................684...............74...........
|
||||||
|
......279.........*......128/....464........#...../......944........978...............163..984*5.@............+.......165......*....285.....
|
||||||
|
..................889.............*.......969........................%.......5......&....$........272....................*......374.........
|
||||||
|
.........&..............@948..*..13.358........796.............632............*....789........91*..............*66........152...............
|
||||||
|
........508...+..............3...........544.....$.517.....703....*774.......434............/....794........932.............................
|
||||||
|
...$...........241.....74...........974..*...954............*.......................375..772...........218.........414...........*366....252
|
||||||
|
.501..566...............*..........*....599.....#........256.....468@..942.101.........*..........156...*.............*.......998...........
|
||||||
|
...../.............263.312....+..767..............#.........................*...&95..838.162=.....+....130.........583..544.......176.......
|
||||||
|
............................936......826.......421.......-139.......982...893.......................*..................*........./..........
|
||||||
|
.284.....=724...................661.$....694........85..........438.............51...............616.698.*36.....262......357+........224...
|
||||||
|
....@..........491........+........................@......193......*596...........%../844...387.................$.....132.........%.........
|
||||||
|
.......84..............362.................................*..98..........&................*....14....394..........$..............56........
|
||||||
|
.........*432.....512................704......424.............*............74........196%..875...*.....*............132.......229...........
|
||||||
|
..............723*.........568........*..108........672......55.172...217.........................289.427........................*..........
|
||||||
|
.........#795.........214....*.336...94....*....988................%..&.............*86......*...............838&.......540.......902.......
|
||||||
|
.922...........288........719.....*........845...&..558......#...................524......195.704.....................................77....
|
||||||
|
...*....842....../...166........883...-................*503..451..305../....600............................900..280.....*169...586..........
|
||||||
|
751....*.........../.*......944......116....416.........................877....*....418...194........644..*....=.....244..........#.....354.
|
||||||
|
.......118......208...................................788...................826........$....$...207.....@..152...........893*608.......&....
|
||||||
|
..948.......................203../....206.............*....341./977.916.........49...#........@....-............+385........................
|
||||||
|
...*......266.................*...607...@.990......964..............-..........*.....340...697........62..............526.....-.............
|
||||||
|
..675.....*..........612....604.............*..............492.884...........212...............*157....*...679.........*....706...716%.518..
|
||||||
|
......103.749..989...*...................739..............$......=..=..................212..684.....35.......*.........785..............+...
|
||||||
|
..343*......../.......680.....................*423.................476....&....420..............241..*......532.....+.......864$.....&......
|
||||||
|
..................826........403..311...60.451.............+...........562....../.......306.......*..............420..................321...
|
||||||
|
...241..............*...........+..=....@......*240.......845....@.........740.................968..389.177*...................640..........
|
||||||
|
......*82...........963...211%...............38...............901.....404.........&..253..............-.....37.........218.501...*....320...
|
||||||
|
....*...........................#215...264......298........................*970..801....*....569...............3.......*......%..859.*......
|
||||||
|
.136.818...212...........91*72........*.........-...750.....775*728.29.270...............984.&...371..........*.........639..........670....
|
||||||
|
...........*.../959................438.....524......*...943.........*................755...................162.................446#.........
|
||||||
|
..........290.............751................*.....557..*...483.............421.........*............189.%................/.................
|
||||||
|
....................9.786..-......835.......978........445.%..........350........860..662.......#...*....354........*.....682...............
|
||||||
|
.117..57+....441...*....+............................................../............*.........88....142..........%.927......................
|
||||||
|
...*...........*..402....................874.....734.926$../...............*633......219.84/............662...205...................334.....
|
||||||
|
...981........367........338...332/.........=......*......119....375#.334.......146..............%.....$................384.............-511
|
||||||
|
........165................=....................666.....................#..614.....-..%744..617.887.......848*..............................
|
||||||
|
...........*.203.593...158....*..........152..............+817.....866.......&...............*......../.......904........701.165.80.........
|
||||||
|
404..977.93..*....*....*...396.281......*....953....*................*.........116..97.70=..179....107..338................$...*....622.....
|
||||||
|
......=.....445........................382.....*...672................859......*...%....................&..........-.571......717....*......
|
||||||
|
..................240............175..........808..............225..........988............/604..............232.448..*..651......769.......
|
||||||
|
.........569*....*........975*.....*....968..............585.....*................26.................................394....@.142...........
|
||||||
|
......*......498..969.........360.666...%.........................919.......360........-.*.........%...................................484..
|
||||||
|
...407................886...................................84......................933...101....58........839..425.........................
|
10
day3/input.bakeasy
Normal file
10
day3/input.bakeasy
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
467..114..
|
||||||
|
...*......
|
||||||
|
..35..633.
|
||||||
|
......#...
|
||||||
|
617*......
|
||||||
|
.....+.58.
|
||||||
|
..592.....
|
||||||
|
......755.
|
||||||
|
...$.*....
|
||||||
|
.664.598..
|
1092
day3/mathias.out
Normal file
1092
day3/mathias.out
Normal file
File diff suppressed because it is too large
Load diff
1092
day3/mathias.out2
Normal file
1092
day3/mathias.out2
Normal file
File diff suppressed because it is too large
Load diff
1387
day3/output.txt
Normal file
1387
day3/output.txt
Normal file
File diff suppressed because it is too large
Load diff
5
day3/symbolList
Normal file
5
day3/symbolList
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
(inclusive list)
|
||||||
|
33:47
|
||||||
|
58:63
|
||||||
|
91:96
|
||||||
|
123:126
|
BIN
day3/test
Executable file
BIN
day3/test
Executable file
Binary file not shown.
106
day3/test.c
Normal file
106
day3/test.c
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#define MAP_SIZE 140
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
int x, y;
|
||||||
|
int width;
|
||||||
|
int value;
|
||||||
|
}NumberBox;
|
||||||
|
|
||||||
|
char map[MAP_SIZE*MAP_SIZE] = {0};
|
||||||
|
bool touching_symbol[MAP_SIZE*MAP_SIZE] = {false};
|
||||||
|
NumberBox number_boxes[10000] = {0};
|
||||||
|
|
||||||
|
bool is_touching_symbol( int x, int y) {
|
||||||
|
for( int test_y=y-1; test_y<=y+1; test_y ++ ) {
|
||||||
|
for( int test_x=x-1; test_x<=x+1; test_x ++ ) {
|
||||||
|
if( test_y < 0 || test_x < 0 || test_y >= MAP_SIZE || test_x >= MAP_SIZE) continue;
|
||||||
|
char c = map[ test_y*MAP_SIZE+test_x];
|
||||||
|
if( !isdigit(c) && c != '.') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
FILE *fp = fopen( "./input", "r");
|
||||||
|
char line[256];
|
||||||
|
|
||||||
|
int y = 0;
|
||||||
|
while ( fgets( line, 256, fp ) != NULL) {
|
||||||
|
memcpy( &map[MAP_SIZE*y++], line, MAP_SIZE );
|
||||||
|
}
|
||||||
|
|
||||||
|
int all_sum = 0;
|
||||||
|
int schematic_sum = 0;
|
||||||
|
int num_number_boxes = 0;
|
||||||
|
for( int y=0; y<MAP_SIZE; y++ ) {
|
||||||
|
char* read_pos = &map[y*MAP_SIZE];
|
||||||
|
char* next_line = &map[(y+1)*MAP_SIZE];
|
||||||
|
|
||||||
|
for( ;; ) {
|
||||||
|
char* num_start = strpbrk( read_pos, "0123456789");
|
||||||
|
if( num_start >= next_line || num_start == NULL ) break;
|
||||||
|
char* num_end = num_start + strspn( num_start, "0123456789");
|
||||||
|
if( num_end > next_line) num_end = next_line;
|
||||||
|
|
||||||
|
// Extract the number
|
||||||
|
char number_string[ 64] = {0};
|
||||||
|
strncpy( number_string, num_start, num_end-num_start);
|
||||||
|
int value = atoi( number_string );
|
||||||
|
int x = num_start-&map[y*MAP_SIZE];
|
||||||
|
int width = num_end - num_start;
|
||||||
|
|
||||||
|
// Store the number box for the next part of the problem
|
||||||
|
NumberBox nb = {x,y, width, value};
|
||||||
|
number_boxes[ num_number_boxes++ ] = nb;
|
||||||
|
|
||||||
|
// Are any of the digits touching a symbol
|
||||||
|
bool is_touching = false;
|
||||||
|
for( int x_pos=x; x_pos<x+width; x_pos++ ) {
|
||||||
|
is_touching |= is_touching_symbol( x_pos, y);
|
||||||
|
}
|
||||||
|
if( is_touching ) schematic_sum += value;
|
||||||
|
if( is_touching ) {
|
||||||
|
// printf("%d, col: %d row: %d\n", value, x, y);
|
||||||
|
}
|
||||||
|
all_sum += value;
|
||||||
|
read_pos = num_end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf( "\nSum of schematic numbers: %d", schematic_sum);
|
||||||
|
|
||||||
|
// Part 2
|
||||||
|
int sum_of_gear_ratios = 0;
|
||||||
|
for( int y=0; y<MAP_SIZE; y++ ) {
|
||||||
|
for( int x=0; x<MAP_SIZE; x++ ) {
|
||||||
|
if( map[y*MAP_SIZE+x] == '*') {
|
||||||
|
// Found gear, find any touching numbers
|
||||||
|
int num_touching = 0;
|
||||||
|
int ratio = 1;
|
||||||
|
for( int n_box=0; n_box<num_number_boxes; n_box++ ) {
|
||||||
|
if( number_boxes[ n_box].x -1 <= x && number_boxes[ n_box].y -1 <=y &&
|
||||||
|
(number_boxes[ n_box].x + number_boxes[ n_box].width)>= x && number_boxes[ n_box].y >=y ) {
|
||||||
|
ratio *= number_boxes[n_box].value;
|
||||||
|
printf("%d *", number_boxes[n_box].value, ratio);
|
||||||
|
num_touching ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( num_touching >= 2) {
|
||||||
|
printf(" + %d", sum_of_gear_ratios);
|
||||||
|
sum_of_gear_ratios += ratio;
|
||||||
|
printf(" = %d\n", sum_of_gear_ratios);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf( "\nSum of gear ratios: %d\n", sum_of_gear_ratios);
|
||||||
|
}
|
62
day3/test.out
Normal file
62
day3/test.out
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
|
||||||
|
Sum of schematic numbers: 539590235 *744 *486 *485 * + 0 = 235710
|
||||||
|
251 *925 *752 *637 *793 *299 *942 *591 * + 235710 = 792432
|
||||||
|
222 *875 *998 *310 *17 *735 * + 792432 = 804927
|
||||||
|
586 *23 *598 *760 *702 *242 * + 804927 = 974811
|
||||||
|
184 *77 *699 *790 *486 *914 *401 *527 * + 974811 = 1186138
|
||||||
|
144 *226 *127 *560 * + 1186138 = 1257258
|
||||||
|
586 *906 *361 *329 *664 * + 1257258 = 1475714
|
||||||
|
507 *553 *501 *701 *447 *891 *346 *421 *984 *198 *791 * + 1475714 = 1632332
|
||||||
|
85 *326 *582 *961 *781 *441 *161 * + 1632332 = 1703333
|
||||||
|
637 *324 * + 1703333 = 1909721
|
||||||
|
21 *432 *309 *166 *385 *294 * + 1909721 = 2022911
|
||||||
|
38 *56 *517 *88 *235 * + 2022911 = 2043591
|
||||||
|
390 *485 *936 *313 *345 *316 * + 2043591 = 2152611
|
||||||
|
362 *283 *307 *791 * + 2152611 = 2395448
|
||||||
|
554 *911 *90 * + 2395448 = 2477438
|
||||||
|
797 *211 * + 2477438 = 2645605
|
||||||
|
192 *650 *201 *105 *313 *670 *838 *897 *233 *224 *793 *308 *501 * + 2645605 = 2799913
|
||||||
|
318 *524 *403 *958 *214 *218 *203 *227 *592 *474 *409 *927 *741 * + 2799913 = 3486820
|
||||||
|
169 *225 *717 *54 *823 *308 *265 *424 *434 *881 *380 *731 * + 3486820 = 3764600
|
||||||
|
587 *918 *271 *486 * + 3764600 = 3896306
|
||||||
|
302 *740 *380 *387 *180 *91 *811 *243 *250 *998 *245 *771 *261 *940 *638 *932 *344 * + 3896306 = 4216914
|
||||||
|
991 *266 *698 *308 *325 *649 *900 * + 4216914 = 4801014
|
||||||
|
619 *224 *769 *714 *5 * + 4801014 = 4804584
|
||||||
|
674 *29 *179 *531 *302 *296 *709 *837 *699 *749 *9 *193 *206 * + 4804584 = 4844342
|
||||||
|
922 *758 *817 *807 *650 *54 * + 4844342 = 4879442
|
||||||
|
806 *280 *11 *66 *14 *742 *726 *828 *750 * + 4879442 = 5500442
|
||||||
|
971 *830 *491 *889 *333 *629 *252 *208 *822 *270 *112 *101 *7 *987 *437 *993 *675 *60 *981 *730 *120 *790 * + 5500442 = 5595242
|
||||||
|
595 *665 *212 *773 *581 *579 *912 *383 * + 5595242 = 5944538
|
||||||
|
496 *514 *912 *693 *620 *978 *477 *766 *798 *837 *196 *313 * + 5944538 = 6005886
|
||||||
|
126 *480 * + 6005886 = 6066366
|
||||||
|
359 *193 * + 6066366 = 6135653
|
||||||
|
447 *565 * + 6135653 = 6388208
|
||||||
|
53 *505 * + 6388208 = 6414973
|
||||||
|
491 *721 *336 * + 6414973 = 6657229
|
||||||
|
73 *238 *689 *831 *268 *280 *31 *408 *576 *734 *332 *914 *420 *647 *480 *496 *53 *815 *466 * + 6657229 = 7037019
|
||||||
|
364 *938 *59 * + 7037019 = 7092361
|
||||||
|
963 *949 *828 *784 * + 7092361 = 7741513
|
||||||
|
589 *833 * + 7741513 = 8232150
|
||||||
|
940 *993 *398 *624 *833 *350 *849 *281 * + 8232150 = 8470719
|
||||||
|
814 *369 *92 *889 *984 *5 * + 8470719 = 8475639
|
||||||
|
374 *13 *152 *3 *434 *91 *794 * + 8475639 = 8547893
|
||||||
|
66 *932 * + 8547893 = 8609405
|
||||||
|
774 *599 *256 *366 *998 * + 8609405 = 8974673
|
||||||
|
312 *767 *838 *130 *583 *893 *616 *698 * + 8974673 = 9404641
|
||||||
|
36 *596 *875 *432 *55 *289 *427 *723 *94 *902 *719 *845 *86 *524 * + 9404641 = 9449705
|
||||||
|
195 *704 * + 9449705 = 9586985
|
||||||
|
883 *751 *503 *169 *244 * + 9586985 = 9628221
|
||||||
|
118 *826 *152 *893 *608 * + 9628221 = 10171165
|
||||||
|
964 *675 *604 *212 *749 *739 *157 *684 * + 10171165 = 10278553
|
||||||
|
785 *680 *532 *343 *423 *451 * + 10278553 = 10469326
|
||||||
|
968 *963 *240 *38 * + 10469326 = 10478446
|
||||||
|
177 *37 * + 10478446 = 10484995
|
||||||
|
82 *859 *136 *818 * + 10484995 = 10596243
|
||||||
|
970 *984 *639 *670 *91 *72 * + 10596243 = 10602795
|
||||||
|
438 *775 *728 * + 10602795 = 11166995
|
||||||
|
162 *290 *557 *978 *445 *662 *142 *927 *402 *219 *981 *367 *633 *666 *848 *904 * + 11166995 = 11933587
|
||||||
|
93 *396 *281 * + 11933587 = 12044863
|
||||||
|
179 *445 *382 *672 *859 *717 *808 *988 *769 *394 *569 *498 * + 12044863 = 12328225
|
||||||
|
969 *975 *360 * + 12328225 = 12679225
|
||||||
|
666 *919 *407 *101 *
|
||||||
|
Sum of gear ratios: 12679225
|
1092
day3/test.out2
Normal file
1092
day3/test.out2
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue