Compare commits
No commits in common. "a7c15c246b50daac881905958a83b32ef49eae68" and "16a5fc040f1e1a892db0c133754ad3065af5af2b" have entirely different histories.
a7c15c246b
...
16a5fc040f
2 changed files with 0 additions and 153 deletions
72
day_2/1.c
72
day_2/1.c
|
@ -1,72 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
typedef struct levels {
|
|
||||||
size_t mem_size;
|
|
||||||
size_t size;
|
|
||||||
unsigned int *data;
|
|
||||||
} levels_t;
|
|
||||||
|
|
||||||
int main(void) {
|
|
||||||
FILE *fp = fopen("input", "r");
|
|
||||||
|
|
||||||
if (fp == NULL) {
|
|
||||||
perror("input");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *line = NULL;
|
|
||||||
size_t size;
|
|
||||||
|
|
||||||
levels_t levels;
|
|
||||||
levels.mem_size = 10;
|
|
||||||
levels.size = 0;
|
|
||||||
levels.data = malloc(sizeof(unsigned int) * levels.mem_size);
|
|
||||||
|
|
||||||
unsigned int sum = 0;
|
|
||||||
while (getline(&line, &size, fp) > 0) {
|
|
||||||
char *next = strtok(line, " ");
|
|
||||||
|
|
||||||
while (next != NULL) {
|
|
||||||
if (levels.size >= levels.mem_size) {
|
|
||||||
levels.mem_size *= 2;
|
|
||||||
levels.data =
|
|
||||||
realloc(levels.data, levels.mem_size * sizeof(unsigned int));
|
|
||||||
}
|
|
||||||
|
|
||||||
sscanf(next, "%u", &levels.data[levels.size]);
|
|
||||||
levels.size++;
|
|
||||||
|
|
||||||
next = strtok(NULL, " ");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool safe = true;
|
|
||||||
int diff = levels.data[1] - levels.data[0];
|
|
||||||
int increasing = diff > 0 ? 1 : -1;
|
|
||||||
for (int i = 1; i < levels.size; i++) {
|
|
||||||
diff = increasing * (levels.data[i] - levels.data[i - 1]);
|
|
||||||
|
|
||||||
if (diff < 1 || diff > 3) {
|
|
||||||
safe = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (safe) {
|
|
||||||
sum++;
|
|
||||||
}
|
|
||||||
|
|
||||||
levels.size = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(line);
|
|
||||||
free(levels.data);
|
|
||||||
|
|
||||||
printf("%u\n", sum);
|
|
||||||
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
81
day_2/2.c
81
day_2/2.c
|
@ -1,81 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
typedef struct levels {
|
|
||||||
size_t mem_size;
|
|
||||||
size_t size;
|
|
||||||
unsigned int *data;
|
|
||||||
} levels_t;
|
|
||||||
|
|
||||||
int main(void) {
|
|
||||||
FILE *fp = fopen("example", "r");
|
|
||||||
|
|
||||||
if (fp == NULL) {
|
|
||||||
perror("input");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *line = NULL;
|
|
||||||
size_t size;
|
|
||||||
|
|
||||||
levels_t levels;
|
|
||||||
levels.mem_size = 10;
|
|
||||||
levels.size = 0;
|
|
||||||
levels.data = malloc(sizeof(unsigned int) * levels.mem_size);
|
|
||||||
|
|
||||||
unsigned int sum = 0;
|
|
||||||
while (getline(&line, &size, fp) > 0) {
|
|
||||||
char *next = strtok(line, " ");
|
|
||||||
|
|
||||||
while (next != NULL) {
|
|
||||||
if (levels.size >= levels.mem_size) {
|
|
||||||
levels.mem_size *= 2;
|
|
||||||
levels.data =
|
|
||||||
realloc(levels.data, levels.mem_size * sizeof(unsigned int));
|
|
||||||
}
|
|
||||||
|
|
||||||
sscanf(next, "%u", &levels.data[levels.size]);
|
|
||||||
levels.size++;
|
|
||||||
|
|
||||||
next = strtok(NULL, " ");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool removed_node = false;
|
|
||||||
bool safe = true;
|
|
||||||
int diff = levels.data[1] - levels.data[0];
|
|
||||||
int increasing = diff > 0 ? 1 : -1;
|
|
||||||
for (int i = 1; i < levels.size; i++) {
|
|
||||||
diff = increasing * (levels.data[i] - levels.data[i - 1]);
|
|
||||||
|
|
||||||
if (diff < 1 || diff > 3) {
|
|
||||||
if (removed_node) {
|
|
||||||
safe = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
for (int j = i; j < levels.size; j++) {
|
|
||||||
levels.data[j - 1] = levels.data[j];
|
|
||||||
}
|
|
||||||
levels.size--;
|
|
||||||
i = 0;
|
|
||||||
removed_node = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (safe) {
|
|
||||||
sum++;
|
|
||||||
}
|
|
||||||
|
|
||||||
levels.size = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(line);
|
|
||||||
free(levels.data);
|
|
||||||
|
|
||||||
printf("%u\n", sum);
|
|
||||||
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Loading…
Reference in a new issue