Day10
This commit is contained in:
BIN
day10/c/day10
Executable file
BIN
day10/c/day10
Executable file
Binary file not shown.
102
day10/c/day10.c
Normal file
102
day10/c/day10.c
Normal file
@@ -0,0 +1,102 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MAX_DIMENSION 128
|
||||
|
||||
int get_trails(char**, int, int, int, int, int**);
|
||||
|
||||
int main() {
|
||||
char c;
|
||||
|
||||
char **map = calloc(MAX_DIMENSION, sizeof(map[0]));
|
||||
|
||||
int rows = 0, i = 0, columns;
|
||||
map[rows] = calloc(MAX_DIMENSION, sizeof(map[0][0]));
|
||||
|
||||
while ((c = getchar()) != EOF) {
|
||||
map[rows][i] = c;
|
||||
i++;
|
||||
if (c != '\n') {
|
||||
continue;
|
||||
}
|
||||
|
||||
columns = i - 1;
|
||||
rows++;
|
||||
i = 0;
|
||||
map[rows] = calloc(MAX_DIMENSION, sizeof(map[0][0]));
|
||||
}
|
||||
|
||||
int **reachable = calloc(rows, sizeof(reachable[0]));
|
||||
for (i = 0; i < rows; i++) {
|
||||
reachable[i] = calloc(columns, sizeof(reachable[0][0]));
|
||||
}
|
||||
|
||||
int score = 0;
|
||||
int rating = 0;
|
||||
// For each '0'
|
||||
for (i = 0; i < rows; i++) {
|
||||
for (int j = 0; j < columns; j++) {
|
||||
if (map[i][j] != '0') {
|
||||
continue;
|
||||
}
|
||||
|
||||
rating += get_trails(map, rows, columns, i, j, reachable);
|
||||
// Count reachable
|
||||
for (int k = 0; k < rows; k++) {
|
||||
for (int l = 0; l < columns; l++) {
|
||||
score += reachable[k][l];
|
||||
reachable[k][l] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < rows; i++) {
|
||||
free(reachable[i]);
|
||||
}
|
||||
free(reachable);
|
||||
for (i = 0; i < rows + 1; i++) {
|
||||
free(map[i]);
|
||||
}
|
||||
free(map);
|
||||
|
||||
printf("%i\n", score);
|
||||
printf("%i\n", rating);
|
||||
}
|
||||
|
||||
int get_trails(char** map, int rows, int columns, int row, int column, int** reachable) {
|
||||
if (map[row][column] == '9') {
|
||||
reachable[row][column] = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int x, y;
|
||||
char next = map[row][column] + 1;
|
||||
int trails = 0;
|
||||
// up
|
||||
x = row - 1;
|
||||
y = column;
|
||||
if (x >= 0 && map[x][y] == next) {
|
||||
trails += get_trails(map, rows, columns, x, y, reachable);
|
||||
}
|
||||
// down
|
||||
x = row + 1;
|
||||
y = column;
|
||||
if (x < rows && map[x][y] == next) {
|
||||
trails += get_trails(map, rows, columns, x, y, reachable);
|
||||
}
|
||||
// left
|
||||
x = row;
|
||||
y = column + 1;
|
||||
if (y < columns && map[x][y] == next) {
|
||||
trails += get_trails(map, rows, columns, x, y, reachable);
|
||||
}
|
||||
// right
|
||||
x = row;
|
||||
y = column - 1;
|
||||
if (y >= 0 && map[x][y] == next) {
|
||||
trails += get_trails(map, rows, columns, x, y, reachable);
|
||||
}
|
||||
|
||||
return trails;
|
||||
}
|
||||
54
day10/input.txt
Normal file
54
day10/input.txt
Normal file
@@ -0,0 +1,54 @@
|
||||
212521982345455432198898732343201001454321076767899872
|
||||
101430671156766718089087001432102122367410789898721701
|
||||
234549560049859809670106126549893432198523650127630652
|
||||
345678432132343218543215437456784543007694540134544543
|
||||
434989010101034567894326458941089656912784343296531014
|
||||
123968523218954326287478947032178767843895256787432543
|
||||
037879654305869210156565432142189626756706101208956632
|
||||
010968760456778981432101943443076212389617890312347701
|
||||
323459821678765476583201875654561003476526345423698801
|
||||
011234734569012345694112766743432876565430256784510932
|
||||
010345654554212014785073450898101986676321100898929841
|
||||
143456703623103423456787321287632987685672901289838750
|
||||
212769812514398512987896544379443456894589874356745669
|
||||
301898453405487600121095434568543670123601065105210178
|
||||
498782345654676321436784323877612589010892110234312321
|
||||
567101908723521030545654012981003438756763323987603430
|
||||
323877819810437841690343021542312321065654332109544543
|
||||
014966521923456956781252120455401487654505445678037652
|
||||
565455430810398105898763214345566590123218764789128781
|
||||
678321876760567234237454905216697687689439653234569390
|
||||
549050945651456340145667876107788014578321342106778434
|
||||
432167834512301254206758989038979123065430211067884521
|
||||
212058723003456763219843210123460132104321203458990690
|
||||
103449012124567895430764505674321043895650432143021788
|
||||
214530101013098986721256034985452344786766501032134659
|
||||
345621232322121234890340125676965435689897865401235678
|
||||
238789985421030345234543234767876105476101974321945234
|
||||
129376576534781676167652149866765256785232389450876165
|
||||
023403456215696787018967019875454343494341071265210074
|
||||
016512567304345698101278112562343852014556780374391189
|
||||
187876458412234598790349603401438961025698895489580543
|
||||
098962389561103347685456784876547873234767216785671672
|
||||
123451049870101256576545692910687210189854306894502981
|
||||
212945432943232345677834501431296332182344345663213870
|
||||
301876501854569431988925232321345345091103216756344561
|
||||
676510345763078520123810123410543456780234109865432150
|
||||
783401256762107019654320294567632109876542106776843001
|
||||
892313879856234198734521287678932323438943769089987612
|
||||
341054965447895287645632789456541010567659858123656543
|
||||
250123832332196014532745610367692101298365647654567698
|
||||
167814001541087123691821001298789854303234737843238787
|
||||
078905123456789234780934789656730763214159826943129898
|
||||
980876432965410165690695678749821278934067015652010789
|
||||
801986501874321074321783265637832123653458234761001656
|
||||
212567988965010787210654104521945034562109101891012347
|
||||
123498677654321298323545003010876453078045610123456798
|
||||
034014576103432186789276512123289342199236769032347810
|
||||
145623985412545085652189467898100256787100898741016921
|
||||
898767234307696198543011056967221105107231239653455430
|
||||
745678101268987585654322343254339012218774381012768741
|
||||
234989089456789676789113698107448763329783498019889650
|
||||
101345674301410566541004567898758954458692567325676341
|
||||
013216765210323455632123476127667763067501101234765432
|
||||
322109876323454556789012981034554892155432101289876501
|
||||
4
day10/sample.txt
Normal file
4
day10/sample.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
0123
|
||||
1234
|
||||
8765
|
||||
9876
|
||||
7
day10/sample2.txt
Normal file
7
day10/sample2.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
...0...
|
||||
...1...
|
||||
...2...
|
||||
6543456
|
||||
7.....7
|
||||
8.....8
|
||||
9.....9
|
||||
7
day10/sample3.txt
Normal file
7
day10/sample3.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
..90..9
|
||||
...1.98
|
||||
...2..7
|
||||
6543456
|
||||
765.987
|
||||
876....
|
||||
987....
|
||||
7
day10/sample4.txt
Normal file
7
day10/sample4.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
10..9..
|
||||
2...8..
|
||||
3...7..
|
||||
4567654
|
||||
...8..3
|
||||
...9..2
|
||||
.....01
|
||||
8
day10/samplee.txt
Normal file
8
day10/samplee.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
89010123
|
||||
78121874
|
||||
87430965
|
||||
96549874
|
||||
45678903
|
||||
32019012
|
||||
01329801
|
||||
10456732
|
||||
Reference in New Issue
Block a user