#include "stdlib.h" #include "stdio.h" #include "string.h" int numbers[2048*2048]; int sizes[2048]; int _is_safe(int n, int size, int* levels) { if(size <= 0) return 0; int current = -1; int direction = 0; for(int i = 0; i < size; i++) { if(i == n) continue; int next = levels[i]; if(current == -1) { current = next; } else if(direction == 0 && (next < current && next >= current - 3)) { direction = 1; } else if(direction == 0 && (next > current && next <= current + 3)) { direction = 2; } else if(direction == 0) { return 0; } else if(direction == 1 && (next >= current || next < current - 3)) { return 0; } else if(direction == 2 && (next <= current || next > current + 3)) { return 0; } current = next; } return 1; } int is_safe(int size, int* levels) { for(int i = -1; i < size; i++) { if(_is_safe(i, size, levels)) return 1; } return 0; } int main(int argc, char* argv[]) { if(argc < 2) { fprintf(stderr, "Filename required\n"); return 1; } FILE* file = fopen(argv[1], "r"); if(file == NULL) { fprintf(stderr, "Could not open %s\n", argv[1]); return 2; } memset(numbers, 0, sizeof(numbers)); char* line = NULL; size_t line_size = 0; int i = 0; while(getline(&line, &line_size, file) > 0) { char* save = NULL; char* token = strtok_r(line, " ", &save); if(token == NULL || token[0] == '\n' || token[0] == '\0') break; int j = 0; do { numbers[i*2048 + j] = atoi(token); j += 1; } while((token = strtok_r(NULL, " ", &save))); sizes[i] = j; i += 1; } free(line); int safe = 0; for(i = 0; i < 2048; i++) { if(sizes[i] == 0) continue; if(is_safe(sizes[i], &numbers[2048*i])) { safe += 1; } } fprintf(stdout, "Safe: %d\n", safe); return 0; }