Add 2021 progress
This commit is contained in:
parent
d5d7e98027
commit
49a4db6542
|
@ -0,0 +1,14 @@
|
||||||
|
#include "input.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void) {
|
||||||
|
uintmax_t cnt = 0, i;
|
||||||
|
for (i = 1; i < sizeof (input) / sizeof (*input); i++) {
|
||||||
|
if (input[i] > input[i - 1]) cnt++;
|
||||||
|
}
|
||||||
|
printf ("%ju\n", cnt);
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include "input.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static inline uintmax_t
|
||||||
|
last_three_sum (const uintmax_t *x) {
|
||||||
|
return (*(x - 2) + *(x - 1) + *(x));
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void) {
|
||||||
|
uintmax_t cnt = 0, i;
|
||||||
|
for (i = 3; i < sizeof (input) / sizeof (*input); i++) {
|
||||||
|
if (last_three_sum (&input[i]) > last_three_sum (&input[i - 1])) cnt++;
|
||||||
|
}
|
||||||
|
printf ("%ju\n", cnt);
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,92 @@
|
||||||
|
#define _POSIX_C_SOURCE 200809L
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
enum command {
|
||||||
|
UNK = 0,
|
||||||
|
FORWARD,
|
||||||
|
DOWN,
|
||||||
|
UP,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct act {
|
||||||
|
enum command cmd;
|
||||||
|
uintmax_t cnt;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
carray (FILE *f, struct act *res) {
|
||||||
|
char * str = NULL;
|
||||||
|
size_t bs = 0;
|
||||||
|
ssize_t b = getline (&str, &bs, f);
|
||||||
|
|
||||||
|
if (b == -1) {
|
||||||
|
fprintf (stderr, "getline returned a error\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *act = strtok (str, " "),
|
||||||
|
*cnt = strtok (NULL, "\n");
|
||||||
|
|
||||||
|
if (act == NULL) {
|
||||||
|
fprintf (stderr, "Action is empty.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp (act, "forward") == 0) {
|
||||||
|
res->cmd = FORWARD;
|
||||||
|
} else if (strcmp (act, "down") == 0) {
|
||||||
|
res->cmd = DOWN;
|
||||||
|
} else if (strcmp (act, "up") == 0) {
|
||||||
|
res->cmd = UP;
|
||||||
|
} else {
|
||||||
|
fprintf (stderr, "Line couldn't be parsed.\n");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
res->cnt = strtoumax (cnt, NULL, 10);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void) {
|
||||||
|
struct {
|
||||||
|
uintmax_t depth, pos;
|
||||||
|
} axis = {
|
||||||
|
.depth = 0,
|
||||||
|
.pos = 0,
|
||||||
|
};
|
||||||
|
struct act cur = {0};
|
||||||
|
while (carray (stdin, &cur) == 0) {
|
||||||
|
switch (cur.cmd) {
|
||||||
|
case FORWARD:
|
||||||
|
fprintf (stderr, "Added %zu to pos\n", cur.cnt);
|
||||||
|
axis.pos += cur.cnt;
|
||||||
|
break;
|
||||||
|
case DOWN:
|
||||||
|
fprintf (stderr, "Added %zu to depth\n", cur.cnt);
|
||||||
|
axis.depth += cur.cnt;
|
||||||
|
break;
|
||||||
|
case UP:
|
||||||
|
fprintf (stderr, "Subtracted %zu from depth\n", cur.cnt);
|
||||||
|
axis.depth -= cur.cnt;
|
||||||
|
break;
|
||||||
|
default: {
|
||||||
|
fprintf (stderr, "Invalid action was parsed.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf ("D: %zu\n"
|
||||||
|
"P: %zu\n"
|
||||||
|
"C: %zu\n",
|
||||||
|
axis.depth,
|
||||||
|
axis.pos,
|
||||||
|
axis.pos * axis.depth);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
#define _POSIX_C_SOURCE 200809L
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
enum command {
|
||||||
|
UNK = 0,
|
||||||
|
FORWARD,
|
||||||
|
DOWN,
|
||||||
|
UP,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct act {
|
||||||
|
enum command cmd;
|
||||||
|
uintmax_t cnt;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
carray (FILE *f, struct act *res) {
|
||||||
|
char * str = NULL;
|
||||||
|
size_t bs = 0;
|
||||||
|
ssize_t b = getline (&str, &bs, f);
|
||||||
|
|
||||||
|
if (b == -1) {
|
||||||
|
fprintf (stderr, "getline returned a error\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *act = strtok (str, " "),
|
||||||
|
*cnt = strtok (NULL, "\n");
|
||||||
|
|
||||||
|
if (act == NULL) {
|
||||||
|
fprintf (stderr, "Action is empty.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp (act, "forward") == 0) {
|
||||||
|
res->cmd = FORWARD;
|
||||||
|
} else if (strcmp (act, "down") == 0) {
|
||||||
|
res->cmd = DOWN;
|
||||||
|
} else if (strcmp (act, "up") == 0) {
|
||||||
|
res->cmd = UP;
|
||||||
|
} else {
|
||||||
|
fprintf (stderr, "Line couldn't be parsed.\n");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
res->cnt = strtoumax (cnt, NULL, 10);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void) {
|
||||||
|
struct {
|
||||||
|
uintmax_t depth, pos, aim;
|
||||||
|
} axis = {
|
||||||
|
.depth = 0,
|
||||||
|
.pos = 0,
|
||||||
|
.aim = 0,
|
||||||
|
};
|
||||||
|
struct act cur = {0};
|
||||||
|
while (carray (stdin, &cur) == 0) {
|
||||||
|
switch (cur.cmd) {
|
||||||
|
case FORWARD:
|
||||||
|
fprintf (stderr, "Added %zu to pos\n", cur.cnt);
|
||||||
|
axis.pos += cur.cnt;
|
||||||
|
axis.depth += axis.aim * cur.cnt;
|
||||||
|
break;
|
||||||
|
case DOWN:
|
||||||
|
fprintf (stderr, "Added %zu to depth\n", cur.cnt);
|
||||||
|
axis.aim += cur.cnt;
|
||||||
|
break;
|
||||||
|
case UP:
|
||||||
|
fprintf (stderr, "Subtracted %zu from depth\n", cur.cnt);
|
||||||
|
axis.aim -= cur.cnt;
|
||||||
|
break;
|
||||||
|
default: {
|
||||||
|
fprintf (stderr, "Invalid action was parsed.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf ("D: %zu\n"
|
||||||
|
"P: %zu\n"
|
||||||
|
"C: %zu\n",
|
||||||
|
axis.depth,
|
||||||
|
axis.pos,
|
||||||
|
axis.pos * axis.depth);
|
||||||
|
return 0;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,18 @@
|
||||||
|
include config.mk
|
||||||
|
|
||||||
|
OBJ = ${SRC:.c=.o}
|
||||||
|
|
||||||
|
all: ${OBJ} ${OUT}
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
${CC} -o $@ -c ${CFLAGS} $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f ${OBJ} ${OUT}
|
||||||
|
|
||||||
|
ifneq (${OUT},)
|
||||||
|
${OUT}: ${OBJ}
|
||||||
|
${CC} -o "$@" ${LDFLAGS} $^
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: all clean
|
|
@ -0,0 +1,42 @@
|
||||||
|
# Defaults
|
||||||
|
CC = clang
|
||||||
|
DEBUG = 1
|
||||||
|
STATIC = 0
|
||||||
|
|
||||||
|
LDFLAGS =
|
||||||
|
CFLAGS =\
|
||||||
|
-std=c99\
|
||||||
|
-Weverything\
|
||||||
|
-Wno-padded\
|
||||||
|
-Wno-disabled-macro-expansion\
|
||||||
|
-pedantic
|
||||||
|
|
||||||
|
# Sources / Results
|
||||||
|
SRC =\
|
||||||
|
2/2/main.c
|
||||||
|
|
||||||
|
LIBDIR =
|
||||||
|
LIB =\
|
||||||
|
c
|
||||||
|
|
||||||
|
INCDIR = 2/
|
||||||
|
|
||||||
|
OUT = bin
|
||||||
|
|
||||||
|
# Conditionals / Appends
|
||||||
|
LDFLAGS +=\
|
||||||
|
$(addprefix -L,${LIBDIR})\
|
||||||
|
$(addprefix -l,${LIB})
|
||||||
|
|
||||||
|
CFLAGS +=\
|
||||||
|
$(addprefix -I,${INCDIR})
|
||||||
|
|
||||||
|
ifeq (${DEBUG},1)
|
||||||
|
CFLAGS += -g
|
||||||
|
else
|
||||||
|
CFLAGS += -O2 -Werror
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (${STATIC},1)
|
||||||
|
LDFLAGS += -static
|
||||||
|
endif
|
Loading…
Reference in New Issue