finish 06, time to get a real Makefile
This commit is contained in:
parent
1afd931b84
commit
7abeab6153
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1 +1,3 @@
|
||||||
a.out
|
a.out
|
||||||
|
build/
|
||||||
|
*.o
|
||||||
|
|
27
06/_.h
Normal file
27
06/_.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include <wctype.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
|
||||||
|
#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
|
||||||
|
#define ABS(X) ((X) >= 0 ? (X) : -(X))
|
||||||
|
|
||||||
|
char** str_split(char* a_str, const char a_delim);
|
||||||
|
|
||||||
|
int str_index(char *str, char c);
|
||||||
|
|
||||||
|
int number_of_element(char *str, char c);
|
||||||
|
|
||||||
|
long gmc(long a, long b);
|
||||||
|
long lmc(long a, long b);
|
||||||
|
long lmcs(int array[], int n);
|
||||||
|
|
||||||
|
long strslen(char **strs);
|
130
06/main.txt
Normal file
130
06/main.txt
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
......#........#..........#.................##......................#.............#..................#............#............#..
|
||||||
|
.....#............................................#.......................#.......##.................#..#...................#.#...
|
||||||
|
......#...................#............................#.....#.........#................................................#.........
|
||||||
|
...........................................#.......#..........#..#......#.........#.#.#.#................#.##........##...........
|
||||||
|
........#.........................................#.......#.....#..........#...#....##....#..#.......##................#......#...
|
||||||
|
...................#..#.....................................................#.................................................#...
|
||||||
|
....#..................#..........#........#.............#................................................................#.......
|
||||||
|
......#..............#..................#...........#......#.....#...........................#..#.#.....................#.....#...
|
||||||
|
......#...#...............................................#.....#.........................#..........#............................
|
||||||
|
......#......#..........................................#..................................#....#..#................#..##...#.....
|
||||||
|
........................................................................................#.........................................
|
||||||
|
................#..........#..........................#.##......................#..........#......................................
|
||||||
|
.............#.............................#......#..............................#....................#...........#.....#...#.....
|
||||||
|
.......#.................#..................#..........................#...........................................#..............
|
||||||
|
.......#.....................................................#..........................................#....#.#.....#......#.....
|
||||||
|
...#......#............#........#......................#...........................#.#....#..#....................#.............##
|
||||||
|
...........................##..#..#..........#....................#................................................#......#.......
|
||||||
|
.....................#...#.......................#...#..#.....#................#...........................................#....#.
|
||||||
|
.................#................#.............#...#...........................................................#..#.#............
|
||||||
|
#.....................#....................##.......#...................#..........#..........................#...................
|
||||||
|
.#..........##......#...#......#................#.....................................#.#.....#..............#....................
|
||||||
|
...#...#..#..........................................................#..#..#......................................................
|
||||||
|
..................#.#..............#...#...............................#...#....#.#.........#.........................##..........
|
||||||
|
.......#.........................#..............................................#........#....#....#.........#....................
|
||||||
|
...........#......#......#...........#........#.............................##.................................................#..
|
||||||
|
............................#...................................#......#........................................#.................
|
||||||
|
......................................##...........................................#.............#..#...........#...#.....#.......
|
||||||
|
...................................................#.................................#............................................
|
||||||
|
..........................#..........................................#..#.....#.................#.#......#........................
|
||||||
|
..................#...........#.............................#....#.#..................#................................#..........
|
||||||
|
...................#....#..#.........................................................#....#.......................................
|
||||||
|
..#..........................................................##..................................#......................#....#.#..
|
||||||
|
#.........................#.....#...............................#........................#................#.......................
|
||||||
|
......................#......#...#..........#......#..............................#...#......#.................................#..
|
||||||
|
...............#.....#............................................................................#...............................
|
||||||
|
#.....................#........#.#........................................................#.......................#.............#.
|
||||||
|
.......#...#..........#........#...........#.................#..................#....................................##.....#.....
|
||||||
|
.#......#..................................#.......................................................................#..............
|
||||||
|
.................#.....#...........................................................#..............................................
|
||||||
|
.........#....................................^......#..................#..............................#..#.............#...#.....
|
||||||
|
.............................................................#.....#....................................#.........................
|
||||||
|
....................#.................#........#........................................................#..#............#........#
|
||||||
|
.....#..........................................................#...........................#.................#....##.............
|
||||||
|
..............#.........#.................#............................#.............#......................#.#............#......
|
||||||
|
.............#.................#.........................................#...#................#.............#.....#...............
|
||||||
|
....#.....##..#......#........#............................................#..........#.......#.................................##
|
||||||
|
..........................................................................#.......................................................
|
||||||
|
.......#..........#.............................................................................................##..#.............
|
||||||
|
............................#...............#...............................................................................#.....
|
||||||
|
....#......#...............................................................................................................#......
|
||||||
|
..................................#......................#.....#............................................#.....#........#......
|
||||||
|
...............................#..........................................#.......................................................
|
||||||
|
.....#.............#...#..............#.#............#....................................................................#.......
|
||||||
|
..............................................#...............................#......##.......#................#..........#.#.....
|
||||||
|
........#.....##...............................................#.........................#........................................
|
||||||
|
.....#.........................#.#........#.............................................#.............#..............##...........
|
||||||
|
........................................#..##.........................#............#...........#.............#....................
|
||||||
|
.....................#.#................#............................#.................#.....#..............................#.....
|
||||||
|
................#.....................................#..#....................#..................................#................
|
||||||
|
...........#...................#.................#..........................................................#.......#...........#.
|
||||||
|
...........................#..................................#......#..............#............#.........#....#................#
|
||||||
|
..................................................................................................................#...............
|
||||||
|
..............#....#.#............................................................................#.....#.........#........#......
|
||||||
|
..#...........#.................#.#......#................................#..........................#...........................#
|
||||||
|
............#...........##...............................#..................................................#.....................
|
||||||
|
..............##.#..................................................................................#.........#......#......#.....
|
||||||
|
................................................................#...............#....#....##................#.....................
|
||||||
|
.........#..#.....................#........................................................#......#................#..............
|
||||||
|
...#..........#..........#..................#.......................#........................#...#................#.........#.....
|
||||||
|
...................................#..#...............................#..........#................................................
|
||||||
|
.........................#........................................................................................................
|
||||||
|
......................#.........#....................................................##............................#.....#........
|
||||||
|
.#....#.....................#.........................................................#....#........#.............................
|
||||||
|
..........................................#....................................#........................................#.........
|
||||||
|
.................................................#.......................................#........................................
|
||||||
|
#..#...............#......................#....#.............................................#................#........##.........
|
||||||
|
.........#....#........##.........#.....#.........#...............................................#..................#....#...#...
|
||||||
|
..#............................................................................#...............................................#..
|
||||||
|
.......................................................#.........#......#..........................#.#............................
|
||||||
|
.........#.............#.................##.....#.....#.........#............#.........#..................#.....#.............#...
|
||||||
|
#..........#.........#...............................................................................................#............
|
||||||
|
.......................#....................#..................................................#..................................
|
||||||
|
.#................#.................................#........................................#...........#........................
|
||||||
|
.........#........................................................................................................................
|
||||||
|
..................................................................................#..........#.....................#..............
|
||||||
|
..#...............................#.......#.....................#......................#.....#..........................#.........
|
||||||
|
......#....#..........................................................#..........................#................................
|
||||||
|
...........................................##..................................................##..................#...#..........
|
||||||
|
...............#....#...........................#........................................#..............#....................##...
|
||||||
|
#......#......................................................#..........#.........................#.........#....................
|
||||||
|
...#...................................#......#..........................................#.........................#.............#
|
||||||
|
#.....#.........#.............#.......................................#...............................#...........................
|
||||||
|
...................#.#..........................................................................#...............#.................
|
||||||
|
.......#......##..........#....................................................#..................#..........#....................
|
||||||
|
.............................................#.##..............#......................#......#..#..................#..........#...
|
||||||
|
..##...................#...................................#.........................................#...........#................
|
||||||
|
...................................................#.....................................#.......................#...............#
|
||||||
|
..........#.......##...................#...............#...............................................................#..........
|
||||||
|
.......................#............#............##.............................................#......##.................#...#...
|
||||||
|
.........#.................................................................................#............#....................#....
|
||||||
|
.......##.........#..................................................................#................#...........................
|
||||||
|
................#.............................................................................................#...................
|
||||||
|
......................#.......#....#.................................................#......#.#...............................#...
|
||||||
|
.........#.........#.#.....##.#..................................##...................................................#...........
|
||||||
|
.#......................................................#.......#......##........#..........#.........#....#......................
|
||||||
|
........#.#......................#................................................................................................
|
||||||
|
..................#.............................#.................#..................#......................#......##.#...........
|
||||||
|
................##.............................................#....#..........##.#.#....#........................................
|
||||||
|
..............#...................#.......#............................#.#.....................................................#..
|
||||||
|
............#..............................................#....#.....................#...#.......................#.....#......#..
|
||||||
|
..............#........................................................#............................................#.............
|
||||||
|
.......#.....#.........#..............#..............................#.......................#..#................#....#..#........
|
||||||
|
.......................#......#........................................#.................#..........#.............................
|
||||||
|
...........#..................#.............................#............................................................#........
|
||||||
|
......#....#......#.....................#.....................#........#.....................#...#.....#.#...................#....
|
||||||
|
#..............................................##...#.....#...........#..........................................#................
|
||||||
|
..........#..........#.#........................................#..#....#.........................................................
|
||||||
|
..................#......................................#...#.......#............................................................
|
||||||
|
...#.............................#..................................................#...........#.................................
|
||||||
|
................................##.#.............#........................#...#...............................................#...
|
||||||
|
...#...................................#.......................#........................#............#...............#....#.#.....
|
||||||
|
..............................................................##.......#...............#.........#..................#.............
|
||||||
|
....#............................#..................................#..#..#...............#..............##.......................
|
||||||
|
#...#.................##...............................#...........#...........#..............#.#.........#........#...#..........
|
||||||
|
..........................#.....#....................#..............#.............#..........#....................#.........#.....
|
||||||
|
......#.......................................................#........#.....#..........................#...#.........#...........
|
||||||
|
...............................#............#.....#...........................#...............#........#..........................
|
||||||
|
............#..#......#...#..#.....................#...............#.........#...........................................#.....#..
|
||||||
|
.......#..#..................#............#...........#..............................................................#............
|
||||||
|
....#......#.##..#......##..........#.......#............#...............#....#....................................#..........#.#.
|
91
06/mylib.c
Normal file
91
06/mylib.c
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
#include "_.h"
|
||||||
|
|
||||||
|
// NOT MY CODE
|
||||||
|
// https://stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c
|
||||||
|
char** str_split(char* str, const char a_delim)
|
||||||
|
{
|
||||||
|
char *a_str = strdup(str);
|
||||||
|
char** result = 0;
|
||||||
|
size_t count = 0;
|
||||||
|
char* tmp = a_str;
|
||||||
|
char* last_comma = 0;
|
||||||
|
char delim[2];
|
||||||
|
delim[0] = a_delim;
|
||||||
|
delim[1] = 0;
|
||||||
|
|
||||||
|
while (*tmp)
|
||||||
|
{
|
||||||
|
if (a_delim == *tmp)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
last_comma = tmp;
|
||||||
|
}
|
||||||
|
tmp++;
|
||||||
|
}
|
||||||
|
|
||||||
|
count += last_comma < (a_str + strlen(a_str) - 1);
|
||||||
|
|
||||||
|
count++;
|
||||||
|
|
||||||
|
result = malloc(sizeof(char*) * count);
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
size_t idx = 0;
|
||||||
|
char* token = strtok(a_str, delim);
|
||||||
|
|
||||||
|
while (token)
|
||||||
|
{
|
||||||
|
//assert(idx < count);
|
||||||
|
*(result + idx++) = strdup(token);
|
||||||
|
token = strtok(0, delim);
|
||||||
|
}
|
||||||
|
//assert(idx == count - 1);
|
||||||
|
*(result + idx) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(a_str);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int str_index(char *str, char c) {
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
while (str[i])
|
||||||
|
if (str[i++] == c)
|
||||||
|
return i;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int number_of_element(char *str, char c) {
|
||||||
|
int nbr = 0;
|
||||||
|
for (int i = 0; str[i] != '\0'; i++)
|
||||||
|
if (str[i] == c)
|
||||||
|
nbr++;
|
||||||
|
return nbr;
|
||||||
|
}
|
||||||
|
|
||||||
|
long gmc(long a, long b) {
|
||||||
|
if (b == 0)
|
||||||
|
return a;
|
||||||
|
return gmc(b, a % b);
|
||||||
|
}
|
||||||
|
|
||||||
|
long lmc(long a, long b) {
|
||||||
|
return (a / gmc(a, b)) * b;
|
||||||
|
}
|
||||||
|
|
||||||
|
long lmcs(int array[], int n) {
|
||||||
|
long result = array[0];
|
||||||
|
for (int i = 1; i < n; i++)
|
||||||
|
result = lmc(result, array[i]);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
long strslen(char **strs) {
|
||||||
|
long count = 0;
|
||||||
|
while (strs[count])
|
||||||
|
count++;
|
||||||
|
return count;
|
||||||
|
}
|
72
06/part1.c
Normal file
72
06/part1.c
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#include "_.h"
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
char *input = argv[1];
|
||||||
|
char **inputs = str_split(strdup(input), '\n');
|
||||||
|
|
||||||
|
int x = 0, y = 0;
|
||||||
|
for (int i = 0; inputs[i] != NULL; i++)
|
||||||
|
for (int j = 0; inputs[i][j] != '\0'; j++)
|
||||||
|
if (inputs[i][j] == '^') {
|
||||||
|
y = i;
|
||||||
|
x = j;
|
||||||
|
}
|
||||||
|
|
||||||
|
int direction = 0; // 0 = top; 1 = right; 2 = down; 3 = left
|
||||||
|
while (1) {
|
||||||
|
if (direction == 0) {
|
||||||
|
if (inputs[y - 1] == NULL)
|
||||||
|
break;
|
||||||
|
if (inputs[y - 1][x] == '#')
|
||||||
|
direction++;
|
||||||
|
else {
|
||||||
|
inputs[y][x] = 'X';
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (direction == 1) {
|
||||||
|
if (x + 1 >= strlen(inputs[y]))
|
||||||
|
break;
|
||||||
|
if (inputs[y][x + 1] == '#')
|
||||||
|
direction++;
|
||||||
|
else {
|
||||||
|
inputs[y][x] = 'X';
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (direction == 2) {
|
||||||
|
if (inputs[y + 1] == NULL)
|
||||||
|
break;
|
||||||
|
if (inputs[y + 1][x] == '#')
|
||||||
|
direction++;
|
||||||
|
else {
|
||||||
|
inputs[y][x] = 'X';
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (direction == 3) {
|
||||||
|
if (x - 1 < 0)
|
||||||
|
break;
|
||||||
|
if (inputs[y][x - 1] == '#')
|
||||||
|
direction = 0;
|
||||||
|
else {
|
||||||
|
inputs[y][x] = 'X';
|
||||||
|
x--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = 1;
|
||||||
|
for (int i = 0; inputs[i] != NULL; i++)
|
||||||
|
for (int j = 0; inputs[i][j] != '\0'; j++)
|
||||||
|
if (inputs[i][j] == 'X')
|
||||||
|
count++;
|
||||||
|
|
||||||
|
printf("count: %d\n", count);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
0
template/part1.sh → 06/part1.sh
Normal file → Executable file
0
template/part1.sh → 06/part1.sh
Normal file → Executable file
78
06/part2.c
Normal file
78
06/part2.c
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#include "_.h"
|
||||||
|
|
||||||
|
int its_infinite(char **inputs, int x, int y) {
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
int direction = 0; // 0 = top; 1 = right; 2 = down; 3 = left
|
||||||
|
for (; i < 100000; i++) {
|
||||||
|
if (direction == 0) {
|
||||||
|
if (y - 1 < 0)
|
||||||
|
return 0;
|
||||||
|
if (inputs[y - 1][x] == '#')
|
||||||
|
direction++;
|
||||||
|
else
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
else if (direction == 1) {
|
||||||
|
if (x + 1 >= strlen(inputs[y]))
|
||||||
|
return 0;
|
||||||
|
if (inputs[y][x + 1] == '#')
|
||||||
|
direction++;
|
||||||
|
else
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
else if (direction == 2) {
|
||||||
|
if (inputs[y + 1] == NULL)
|
||||||
|
return 0;
|
||||||
|
if (inputs[y + 1][x] == '#')
|
||||||
|
direction++;
|
||||||
|
else
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
else if (direction == 3) {
|
||||||
|
if (x - 1 < 0)
|
||||||
|
return 0;
|
||||||
|
if (inputs[y][x - 1] == '#')
|
||||||
|
direction = 0;
|
||||||
|
else
|
||||||
|
x--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
char *input = argv[1];
|
||||||
|
char **inputs = str_split(strdup(input), '\n');
|
||||||
|
|
||||||
|
int x = 0, y = 0;
|
||||||
|
for (int i = 0; inputs[i] != NULL; i++)
|
||||||
|
for (int j = 0; inputs[i][j] != '\0'; j++)
|
||||||
|
if (inputs[i][j] == '^') {
|
||||||
|
y = i;
|
||||||
|
x = j;
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 0; inputs[i] != NULL; i++) {
|
||||||
|
for (int j = 0; inputs[i][j] != '\0'; j++) {
|
||||||
|
int replace = 0;
|
||||||
|
if (inputs[i][j] == '#')
|
||||||
|
replace = 1;
|
||||||
|
inputs[i][j] = '#';
|
||||||
|
count += its_infinite(inputs, x, y);
|
||||||
|
inputs[i][j] = '.';
|
||||||
|
if (replace)
|
||||||
|
inputs[i][j] = '#';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("count: %d\n", count);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
0
template/part2.sh → 06/part2.sh
Normal file → Executable file
0
template/part2.sh → 06/part2.sh
Normal file → Executable file
10
06/test.txt
Normal file
10
06/test.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
41
template/Makefile
Normal file
41
template/Makefile
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
CC := gcc
|
||||||
|
LD := $(CC)
|
||||||
|
LIBS := -lm
|
||||||
|
LDFLAGS :=
|
||||||
|
CFLAGS := -Wall -Wextra -Wno-override-init -std=c2x -include_.h
|
||||||
|
SRC := part1.c mylib.c
|
||||||
|
ifeq ($(PART),2)
|
||||||
|
SRC := part2.c mylib.c
|
||||||
|
endif
|
||||||
|
OBJ_DIR := build
|
||||||
|
OBJ := $(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o,$(SRC)))
|
||||||
|
DIR := .
|
||||||
|
RAW_NAME:= a.out
|
||||||
|
NAME := $(RAW_NAME)
|
||||||
|
|
||||||
|
ifeq ($(RELEASE),1)
|
||||||
|
CFLAGS += -O3
|
||||||
|
LDFLAGS += -O3 -s
|
||||||
|
else
|
||||||
|
CFLAGS += -O0 -g3
|
||||||
|
LDFLAGS += -O0 -g
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(NAME)
|
||||||
|
|
||||||
|
$(NAME): $(OBJ)
|
||||||
|
$(LD) $(LDFLAGS) -o $(DIR)/$(NAME) $(OBJ) $(LIBS)
|
||||||
|
|
||||||
|
$(OBJ_DIR)/%.o: %.c
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -rf $(OBJ_DIR)
|
||||||
|
@rm -rf $(RAW_NAME)
|
||||||
|
|
||||||
|
re:
|
||||||
|
@make --no-print clean
|
||||||
|
@make --no-print all
|
||||||
|
|
||||||
|
.PHONY: all clean re
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include "_.h"
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
char *input = argv[1];
|
||||||
|
char **inputs = str_split(strdup(input), '\n');
|
||||||
|
|
||||||
|
for (int i = 0; inputs[i] != NULL; i++) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue