diff --git a/CMakeLists.txt b/CMakeLists.txt index 254e52a..e896054 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,10 +14,11 @@ file(GLOB SRC2017 src/2017/*.c) file(GLOB SRC2018 src/2018/*.c) file(GLOB SRC2019 src/2019/*.c) file(GLOB SRC2020 src/2020/*.c) +file(GLOB SRC2021 src/2021/*.c) file(COPY input DESTINATION ${CMAKE_BINARY_DIR}) -add_executable(advent ${SRC} ${SRC2015} ${SRC2016} ${SRC2017} ${SRC2018} ${SRC2019} ${SRC2020}) +add_executable(advent ${SRC} ${SRC2015} ${SRC2016} ${SRC2017} ${SRC2018} ${SRC2019} ${SRC2020} ${SRC2021}) if ((${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")) target_link_libraries(advent PRIVATE flint) diff --git a/README.md b/README.md index 9287730..1fdd6a9 100644 --- a/README.md +++ b/README.md @@ -24,3 +24,11 @@ The supplied `build.sh` script does the above for you. Inputs can be generated from `get_input.sh`. You will need to get your session cookie from the Advent of Code website. The easiest way to do this is to inspect any input page in your browser. The script can then be run with `bash get_input.sh SESSIONCOOKIE`, with `SESSIONCOOKIE` replaced by your unique session cookie's hash. + +## Usage + +```bash +./advent $YEAR $DAY +``` + +For example, `./advent 15 1` will run Day 01 from the 2015 problems diff --git a/build.sh b/build.sh index 3d4f896..e8415ba 100755 --- a/build.sh +++ b/build.sh @@ -1,4 +1,4 @@ -#! /usr/bin/env sh +#!/bin/sh -e mkdir -p build cd build diff --git a/generator.sh b/generator.sh index 469d4f4..de36cc1 100755 --- a/generator.sh +++ b/generator.sh @@ -2,7 +2,7 @@ mkdir -p include -for year in {2015..2020}; do +for year in {2015..2021}; do rm -rf "src/${year}" mkdir -p "src/${year}" diff --git a/get_input.sh b/get_input.sh index 965c220..5dc3ecd 100755 --- a/get_input.sh +++ b/get_input.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash rm -rf input -for year in {2015..2020}; do +for year in {2015..2021}; do mkdir -p input/$year for day in {1..25}; do if [[ day -lt 10 ]]; then diff --git a/include/advent2021.h b/include/advent2021.h new file mode 100644 index 0000000..2459cdf --- /dev/null +++ b/include/advent2021.h @@ -0,0 +1,58 @@ +#ifndef ADVENT_2021_H +#define ADVENT_2021_H + +void advent2021day01(void); +void advent2021day02(void); +void advent2021day03(void); +void advent2021day04(void); +void advent2021day05(void); +void advent2021day06(void); +void advent2021day07(void); +void advent2021day08(void); +void advent2021day09(void); +void advent2021day10(void); +void advent2021day11(void); +void advent2021day12(void); +void advent2021day13(void); +void advent2021day14(void); +void advent2021day15(void); +void advent2021day16(void); +void advent2021day17(void); +void advent2021day18(void); +void advent2021day19(void); +void advent2021day20(void); +void advent2021day21(void); +void advent2021day22(void); +void advent2021day23(void); +void advent2021day24(void); +void advent2021day25(void); + +void (*solutions2021[25])(void) = { + advent2021day01, + advent2021day02, + advent2021day03, + advent2021day04, + advent2021day05, + advent2021day06, + advent2021day07, + advent2021day08, + advent2021day09, + advent2021day10, + advent2021day11, + advent2021day12, + advent2021day13, + advent2021day14, + advent2021day15, + advent2021day16, + advent2021day17, + advent2021day18, + advent2021day19, + advent2021day20, + advent2021day21, + advent2021day22, + advent2021day23, + advent2021day24, + advent2021day25 +}; + +#endif diff --git a/src/2021/01.c b/src/2021/01.c new file mode 100644 index 0000000..22621a6 --- /dev/null +++ b/src/2021/01.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day01(void) { + char *input = get_input("input/2021/01"); + printf("Solution for Day 01 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/02.c b/src/2021/02.c new file mode 100644 index 0000000..1e29e7c --- /dev/null +++ b/src/2021/02.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day02(void) { + char *input = get_input("input/2021/02"); + printf("Solution for Day 02 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/03.c b/src/2021/03.c new file mode 100644 index 0000000..d7b287d --- /dev/null +++ b/src/2021/03.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day03(void) { + char *input = get_input("input/2021/03"); + printf("Solution for Day 03 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/04.c b/src/2021/04.c new file mode 100644 index 0000000..87dfc82 --- /dev/null +++ b/src/2021/04.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day04(void) { + char *input = get_input("input/2021/04"); + printf("Solution for Day 04 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/05.c b/src/2021/05.c new file mode 100644 index 0000000..bb88d5a --- /dev/null +++ b/src/2021/05.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day05(void) { + char *input = get_input("input/2021/05"); + printf("Solution for Day 05 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/06.c b/src/2021/06.c new file mode 100644 index 0000000..330049c --- /dev/null +++ b/src/2021/06.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day06(void) { + char *input = get_input("input/2021/06"); + printf("Solution for Day 06 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/07.c b/src/2021/07.c new file mode 100644 index 0000000..82277d3 --- /dev/null +++ b/src/2021/07.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day07(void) { + char *input = get_input("input/2021/07"); + printf("Solution for Day 07 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/08.c b/src/2021/08.c new file mode 100644 index 0000000..f3c78b7 --- /dev/null +++ b/src/2021/08.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day08(void) { + char *input = get_input("input/2021/08"); + printf("Solution for Day 08 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/09.c b/src/2021/09.c new file mode 100644 index 0000000..444dfe4 --- /dev/null +++ b/src/2021/09.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day09(void) { + char *input = get_input("input/2021/09"); + printf("Solution for Day 09 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/10.c b/src/2021/10.c new file mode 100644 index 0000000..6aaf133 --- /dev/null +++ b/src/2021/10.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day10(void) { + char *input = get_input("input/2021/10"); + printf("Solution for Day 10 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/11.c b/src/2021/11.c new file mode 100644 index 0000000..fb71a7d --- /dev/null +++ b/src/2021/11.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day11(void) { + char *input = get_input("input/2021/11"); + printf("Solution for Day 11 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/12.c b/src/2021/12.c new file mode 100644 index 0000000..ce6441c --- /dev/null +++ b/src/2021/12.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day12(void) { + char *input = get_input("input/2021/12"); + printf("Solution for Day 12 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/13.c b/src/2021/13.c new file mode 100644 index 0000000..6482801 --- /dev/null +++ b/src/2021/13.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day13(void) { + char *input = get_input("input/2021/13"); + printf("Solution for Day 13 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/14.c b/src/2021/14.c new file mode 100644 index 0000000..a7395fc --- /dev/null +++ b/src/2021/14.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day14(void) { + char *input = get_input("input/2021/14"); + printf("Solution for Day 14 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/15.c b/src/2021/15.c new file mode 100644 index 0000000..901b0a8 --- /dev/null +++ b/src/2021/15.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day15(void) { + char *input = get_input("input/2021/15"); + printf("Solution for Day 15 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/16.c b/src/2021/16.c new file mode 100644 index 0000000..29823eb --- /dev/null +++ b/src/2021/16.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day16(void) { + char *input = get_input("input/2021/16"); + printf("Solution for Day 16 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/17.c b/src/2021/17.c new file mode 100644 index 0000000..deaf639 --- /dev/null +++ b/src/2021/17.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day17(void) { + char *input = get_input("input/2021/17"); + printf("Solution for Day 17 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/18.c b/src/2021/18.c new file mode 100644 index 0000000..9f28670 --- /dev/null +++ b/src/2021/18.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day18(void) { + char *input = get_input("input/2021/18"); + printf("Solution for Day 18 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/19.c b/src/2021/19.c new file mode 100644 index 0000000..c34082f --- /dev/null +++ b/src/2021/19.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day19(void) { + char *input = get_input("input/2021/19"); + printf("Solution for Day 19 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/20.c b/src/2021/20.c new file mode 100644 index 0000000..7b044ee --- /dev/null +++ b/src/2021/20.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day20(void) { + char *input = get_input("input/2021/20"); + printf("Solution for Day 20 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/21.c b/src/2021/21.c new file mode 100644 index 0000000..08fc45a --- /dev/null +++ b/src/2021/21.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day21(void) { + char *input = get_input("input/2021/21"); + printf("Solution for Day 21 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/22.c b/src/2021/22.c new file mode 100644 index 0000000..87901f2 --- /dev/null +++ b/src/2021/22.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day22(void) { + char *input = get_input("input/2021/22"); + printf("Solution for Day 22 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/23.c b/src/2021/23.c new file mode 100644 index 0000000..351545d --- /dev/null +++ b/src/2021/23.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day23(void) { + char *input = get_input("input/2021/23"); + printf("Solution for Day 23 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/24.c b/src/2021/24.c new file mode 100644 index 0000000..1574f78 --- /dev/null +++ b/src/2021/24.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day24(void) { + char *input = get_input("input/2021/24"); + printf("Solution for Day 24 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/2021/25.c b/src/2021/25.c new file mode 100644 index 0000000..32ee3cd --- /dev/null +++ b/src/2021/25.c @@ -0,0 +1,10 @@ +#include +#include + +#include "input.h" + +void advent2021day25(void) { + char *input = get_input("input/2021/25"); + printf("Solution for Day 25 of 2021 is not completed yet\n"); + free(input); +} diff --git a/src/main.c b/src/main.c index 5d47917..be93a0c 100644 --- a/src/main.c +++ b/src/main.c @@ -12,52 +12,38 @@ #include "advent2018.h" #include "advent2019.h" #include "advent2020.h" +#include "advent2021.h" -int main(void) { - int day, year; +int main(int argc, char** argv) { + if (argc != 3) { + printf("Usage: advent $YEAR $DAY\nExample: advent 15 1 will run Solution Day 01 of 2015\n\n"); + return 1; + } + + int day = 0, year = 0; char buf[32]; - const char *errstr; + const char *errstr = NULL; - printf("--- Advent of Code ---\n"); + year = strtonum(argv[1], 15, 21, &errstr); + if (NULL != errstr) { + printf("Input error: %s\n\n", errstr); + return 1; + } - while (1) { - day = 0; - year = 0; - errstr = NULL; + day = strtonum(argv[2], 1, 25, &errstr); + if (NULL != errstr) { + printf("Input error: %s\n\n", errstr); + return 1; + } - printf("Enter a year (15-20). Enter 'q' to quit: "); - scanf("%s", buf); - - if (0 == strcmp(buf, "Q") || 0 == strcmp(buf, "q")) { - break; - } - - year = strtonum(buf, 15, 20, &errstr); - if (NULL != errstr) { - printf("Input error: %s\n\n", errstr); - continue; - } - - printf("Enter a day (1-25): "); - scanf("%s", buf); - day = strtonum(buf, 1, 25, &errstr); - if (NULL != errstr) { - printf("Input error: %s\n\n", errstr); - continue; - } - - printf("\n"); - - switch(year) { - case 15: solutions2015[day-1](); break; - case 16: solutions2016[day-1](); break; - case 17: solutions2017[day-1](); break; - case 18: solutions2018[day-1](); break; - case 19: solutions2019[day-1](); break; - case 20: solutions2020[day-1](); break; - } - - printf("\n"); + switch(year) { + case 15: solutions2015[day-1](); break; + case 16: solutions2016[day-1](); break; + case 17: solutions2017[day-1](); break; + case 18: solutions2018[day-1](); break; + case 19: solutions2019[day-1](); break; + case 20: solutions2020[day-1](); break; + case 21: solutions2021[day-1](); break; } return 0;