From 554ad47f09974f0131df285fda8ea50a1fdad8f5 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Mon, 11 Dec 2023 15:14:47 +0100 Subject: Initial commit, some solutions --- 2023/10/10a.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 2023/10/10a.c (limited to '2023/10/10a.c') diff --git a/2023/10/10a.c b/2023/10/10a.c new file mode 100644 index 0000000..d25b0c8 --- /dev/null +++ b/2023/10/10a.c @@ -0,0 +1,76 @@ +#include +#include +#include +#include + +#define N 1000 + +typedef enum { EAST, SOUTH, WEST, NORTH } direction_t; + +int main() { + char map[N][N]; + int i, j, k, n, s; + direction_t dir; + + for (n = 0; fgets(map[n], N, stdin) != NULL; n++) ; + + for (i = 0; i < n; i++) + for (j = 0; map[i][j]; j++) + if (map[i][j] == 'S') + goto found_s; + +found_s: + if (map[i][j+1] == '7' || map[i][j+1] == '-' || map[i][j+1] == 'J') { + j++; + dir = EAST; + goto found_direction; + } + if (map[i+1][j] == 'L' || map[i+1][j] == '|' || map[i+1][j] == 'J') { + i++; + dir = SOUTH; + goto found_direction; + } + if (j > 0 && (map[i][j-1] == 'L' || map[i][j-1] == '-' || map[i][j-1] == 'F')) { + j--; + dir = WEST; + goto found_direction; + } + +found_direction: + for (k = 1; map[i][j] != 'S'; k++) { + switch (map[i][j]) { + case '|': + if (dir == SOUTH) i++; + if (dir == NORTH) i--; + break; + case '-': + if (dir == EAST) j++; + if (dir == WEST) j--; + break; + case '7': + if (dir == EAST) { i++; dir = SOUTH; } + if (dir == NORTH) { j--; dir = WEST; } + break; + case 'F': + if (dir == WEST) { i++; dir = SOUTH; } + if (dir == NORTH) { j++; dir = EAST; } + break; + case 'J': + if (dir == EAST) { i--; dir = NORTH; } + if (dir == SOUTH) { j--; dir = WEST; } + break; + case 'L': + if (dir == WEST) { i--; dir = NORTH; } + if (dir == SOUTH) { j++; dir = EAST; } + break; + default: + printf("Error: dead path\n"); + return 1; + } + } + + s = (k+1)/2; + + printf("%d\n", s); + return 0; +} -- cgit v1.3