add support for multiple Advent of Code years

This commit is contained in:
Zack Buhman 2024-12-11 20:25:49 -06:00
parent 4547fe2238
commit 433472ebb8
99 changed files with 1741 additions and 603 deletions

1000
2023/day1/input.txt Normal file

File diff suppressed because it is too large Load Diff

15
2023/day1/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2023_day1_input_txt_start __asm("_binary_2023_day1_input_txt_start");
extern uint32_t _binary_2023_day1_input_txt_end __asm("_binary_2023_day1_input_txt_end");
extern uint32_t _binary_2023_day1_input_txt_size __asm("_binary_2023_day1_input_txt_size");
#ifdef __cplusplus
}
#endif

4
2023/day1/sample1.txt Normal file
View File

@ -0,0 +1,4 @@
1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet

15
2023/day1/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2023_day1_sample1_txt_start __asm("_binary_2023_day1_sample1_txt_start");
extern uint32_t _binary_2023_day1_sample1_txt_end __asm("_binary_2023_day1_sample1_txt_end");
extern uint32_t _binary_2023_day1_sample1_txt_size __asm("_binary_2023_day1_sample1_txt_size");
#ifdef __cplusplus
}
#endif

7
2023/day1/sample2.txt Normal file
View File

@ -0,0 +1,7 @@
two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen

15
2023/day1/sample2.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2023_day1_sample2_txt_start __asm("_binary_2023_day1_sample2_txt_start");
extern uint32_t _binary_2023_day1_sample2_txt_end __asm("_binary_2023_day1_sample2_txt_end");
extern uint32_t _binary_2023_day1_sample2_txt_size __asm("_binary_2023_day1_sample2_txt_size");
#ifdef __cplusplus
}
#endif

11
2023/day1/solution.c Normal file
View File

@ -0,0 +1,11 @@
#include <stdint.h>
int64_t _2023_day1_part1(const char * input, int length)
{
return -1;
}
int64_t _2023_day1_part2(const char * input, int length)
{
return -1;
}

15
2024/day1/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day1_input_txt_start __asm("_binary_2024_day1_input_txt_start");
extern uint32_t _binary_2024_day1_input_txt_end __asm("_binary_2024_day1_input_txt_end");
extern uint32_t _binary_2024_day1_input_txt_size __asm("_binary_2024_day1_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day1/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day1_sample1_txt_start __asm("_binary_2024_day1_sample1_txt_start");
extern uint32_t _binary_2024_day1_sample1_txt_end __asm("_binary_2024_day1_sample1_txt_end");
extern uint32_t _binary_2024_day1_sample1_txt_size __asm("_binary_2024_day1_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -25,7 +25,7 @@ static int parse_input(const char * input, int length, struct list * list)
return i;
}
int64_t day1_part1(const char * input, int length)
int64_t _2024_day1_part1(const char * input, int length)
{
struct list list;
int list_length = parse_input(input, length, &list);
@ -42,7 +42,7 @@ int64_t day1_part1(const char * input, int length)
return sum;
}
int64_t day1_part2(const char * input, int length)
int64_t _2024_day1_part2(const char * input, int length)
{
struct list list;
int list_length = parse_input(input, length, &list);

15
2024/day10/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day10_input_txt_start __asm("_binary_2024_day10_input_txt_start");
extern uint32_t _binary_2024_day10_input_txt_end __asm("_binary_2024_day10_input_txt_end");
extern uint32_t _binary_2024_day10_input_txt_size __asm("_binary_2024_day10_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day10/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day10_sample1_txt_start __asm("_binary_2024_day10_sample1_txt_start");
extern uint32_t _binary_2024_day10_sample1_txt_end __asm("_binary_2024_day10_sample1_txt_end");
extern uint32_t _binary_2024_day10_sample1_txt_size __asm("_binary_2024_day10_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -87,7 +87,7 @@ struct rating_score find_trailheads(const char * input, int length,
return (struct rating_score){total_rating, total_score};
}
int64_t day10_part1(const char * input, int length)
int64_t _2024_day10_part1(const char * input, int length)
{
int stride = parse_stride(input, length);
int height = parse_height(input, length);
@ -98,7 +98,7 @@ int64_t day10_part1(const char * input, int length)
return rs.score;
}
int64_t day10_part2(const char * input, int length)
int64_t _2024_day10_part2(const char * input, int length)
{
int stride = parse_stride(input, length);
int height = parse_height(input, length);

15
2024/day11/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day11_input_txt_start __asm("_binary_2024_day11_input_txt_start");
extern uint32_t _binary_2024_day11_input_txt_end __asm("_binary_2024_day11_input_txt_end");
extern uint32_t _binary_2024_day11_input_txt_size __asm("_binary_2024_day11_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day11/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day11_sample1_txt_start __asm("_binary_2024_day11_sample1_txt_start");
extern uint32_t _binary_2024_day11_sample1_txt_end __asm("_binary_2024_day11_sample1_txt_end");
extern uint32_t _binary_2024_day11_sample1_txt_size __asm("_binary_2024_day11_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -161,12 +161,12 @@ static int64_t solve(const char * input, int length, int max_depth)
return sum;
}
int64_t day11_part1(const char * input, int length)
int64_t _2024_day11_part1(const char * input, int length)
{
return solve(input, length, 25);
}
int64_t day11_part2(const char * input, int length)
int64_t _2024_day11_part2(const char * input, int length)
{
return solve(input, length, 75);
}

15
2024/day2/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day2_input_txt_start __asm("_binary_2024_day2_input_txt_start");
extern uint32_t _binary_2024_day2_input_txt_end __asm("_binary_2024_day2_input_txt_end");
extern uint32_t _binary_2024_day2_input_txt_size __asm("_binary_2024_day2_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day2/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day2_sample1_txt_start __asm("_binary_2024_day2_sample1_txt_start");
extern uint32_t _binary_2024_day2_sample1_txt_end __asm("_binary_2024_day2_sample1_txt_end");
extern uint32_t _binary_2024_day2_sample1_txt_size __asm("_binary_2024_day2_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -65,7 +65,7 @@ static bool report_safe(struct report * report, int skip)
return true;
}
int64_t day2_part1(const char * input, int length)
int64_t _2024_day2_part1(const char * input, int length)
{
struct report report[1000];
@ -79,7 +79,7 @@ int64_t day2_part1(const char * input, int length)
return sum;
}
int64_t day2_part2(const char * input, int length)
int64_t _2024_day2_part2(const char * input, int length)
{
struct report report[1000];

15
2024/day3/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day3_input_txt_start __asm("_binary_2024_day3_input_txt_start");
extern uint32_t _binary_2024_day3_input_txt_end __asm("_binary_2024_day3_input_txt_end");
extern uint32_t _binary_2024_day3_input_txt_size __asm("_binary_2024_day3_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day3/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day3_sample1_txt_start __asm("_binary_2024_day3_sample1_txt_start");
extern uint32_t _binary_2024_day3_sample1_txt_end __asm("_binary_2024_day3_sample1_txt_end");
extern uint32_t _binary_2024_day3_sample1_txt_size __asm("_binary_2024_day3_sample1_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day3/sample2.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day3_sample2_txt_start __asm("_binary_2024_day3_sample2_txt_start");
extern uint32_t _binary_2024_day3_sample2_txt_end __asm("_binary_2024_day3_sample2_txt_end");
extern uint32_t _binary_2024_day3_sample2_txt_size __asm("_binary_2024_day3_sample2_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -89,7 +89,7 @@ int parse_input(const char * input, int length, struct instruction * ins)
return i;
}
int64_t day3_part1(const char * input, int length)
int64_t _2024_day3_part1(const char * input, int length)
{
struct instruction ins[1000];
@ -104,7 +104,7 @@ int64_t day3_part1(const char * input, int length)
return sum;
}
int64_t day3_part2(const char * input, int length)
int64_t _2024_day3_part2(const char * input, int length)
{
struct instruction ins[1000];

15
2024/day4/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day4_input_txt_start __asm("_binary_2024_day4_input_txt_start");
extern uint32_t _binary_2024_day4_input_txt_end __asm("_binary_2024_day4_input_txt_end");
extern uint32_t _binary_2024_day4_input_txt_size __asm("_binary_2024_day4_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day4/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day4_sample1_txt_start __asm("_binary_2024_day4_sample1_txt_start");
extern uint32_t _binary_2024_day4_sample1_txt_end __asm("_binary_2024_day4_sample1_txt_end");
extern uint32_t _binary_2024_day4_sample1_txt_size __asm("_binary_2024_day4_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -121,7 +121,7 @@ static bool offset_match_cross(const char * input,
return match1 || match2;
}
int64_t day4_part1(const char * input, int length)
int64_t _2024_day4_part1(const char * input, int length)
{
int stride = parse_stride(input, length);
int height = parse_height(input, length);
@ -149,7 +149,7 @@ int64_t day4_part1(const char * input, int length)
return match_count;
}
int64_t day4_part2(const char * input, int length)
int64_t _2024_day4_part2(const char * input, int length)
{
int stride = parse_stride(input, length);
int height = parse_height(input, length);

15
2024/day5/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day5_input_txt_start __asm("_binary_2024_day5_input_txt_start");
extern uint32_t _binary_2024_day5_input_txt_end __asm("_binary_2024_day5_input_txt_end");
extern uint32_t _binary_2024_day5_input_txt_size __asm("_binary_2024_day5_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day5/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day5_sample1_txt_start __asm("_binary_2024_day5_sample1_txt_start");
extern uint32_t _binary_2024_day5_sample1_txt_end __asm("_binary_2024_day5_sample1_txt_end");
extern uint32_t _binary_2024_day5_sample1_txt_size __asm("_binary_2024_day5_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -116,12 +116,12 @@ static int solve(const char * input, int length, bool correctly_ordered)
return sum;
}
int64_t day5_part1(const char * input, int length)
int64_t _2024_day5_part1(const char * input, int length)
{
return solve(input, length, true);
}
int64_t day5_part2(const char * input, int length)
int64_t _2024_day5_part2(const char * input, int length)
{
return solve(input, length, false);
}

15
2024/day6/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day6_input_txt_start __asm("_binary_2024_day6_input_txt_start");
extern uint32_t _binary_2024_day6_input_txt_end __asm("_binary_2024_day6_input_txt_end");
extern uint32_t _binary_2024_day6_input_txt_size __asm("_binary_2024_day6_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -152,9 +152,9 @@ void a_press()
}
extern "C"
void day6_render(const struct font * font,
const struct glyph * glyphs,
ft0::data_transfer::data_format * maple_ft0_data)
void _2024_day6_render(const struct font * font,
const struct glyph * glyphs,
ft0::data_transfer::data_format * maple_ft0_data)
{
return;

15
2024/day6/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day6_sample1_txt_start __asm("_binary_2024_day6_sample1_txt_start");
extern uint32_t _binary_2024_day6_sample1_txt_end __asm("_binary_2024_day6_sample1_txt_end");
extern uint32_t _binary_2024_day6_sample1_txt_size __asm("_binary_2024_day6_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -121,7 +121,7 @@ void state_init(int part,
day6_state.guard[0] = guard;
}
int64_t day6_part1(const char * input, int length)
int64_t _2024_day6_part1(const char * input, int length)
{
int stride = parse_stride(input, length);
int height = parse_height(input, length);
@ -196,7 +196,7 @@ static bool speculative_obstacle_causes_loop(const char * input,
return false;
}
int64_t day6_part2(const char * input, int length)
int64_t _2024_day6_part2(const char * input, int length)
{
int stride = parse_stride(input, length);
int height = parse_height(input, length);

15
2024/day7/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day7_input_txt_start __asm("_binary_2024_day7_input_txt_start");
extern uint32_t _binary_2024_day7_input_txt_end __asm("_binary_2024_day7_input_txt_end");
extern uint32_t _binary_2024_day7_input_txt_size __asm("_binary_2024_day7_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day7/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day7_sample1_txt_start __asm("_binary_2024_day7_sample1_txt_start");
extern uint32_t _binary_2024_day7_sample1_txt_end __asm("_binary_2024_day7_sample1_txt_end");
extern uint32_t _binary_2024_day7_sample1_txt_size __asm("_binary_2024_day7_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -40,7 +40,7 @@ static bool evaluate_equation1(struct equation * equation, int64_t acc, int dept
|| evaluate_equation1(equation, acc2, depth + 1);
}
int64_t day7_part1(const char * input, int length)
int64_t _2024_day7_part1(const char * input, int length)
{
const char * end = input + length;
@ -103,7 +103,7 @@ static bool evaluate_equation2(struct equation * equation, int64_t acc, int dept
|| evaluate_equation2(equation, acc3, depth + 1);
}
int64_t day7_part2(const char * input, int length)
int64_t _2024_day7_part2(const char * input, int length)
{
const char * end = input + length;

15
2024/day8/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day8_input_txt_start __asm("_binary_2024_day8_input_txt_start");
extern uint32_t _binary_2024_day8_input_txt_end __asm("_binary_2024_day8_input_txt_end");
extern uint32_t _binary_2024_day8_input_txt_size __asm("_binary_2024_day8_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day8/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day8_sample1_txt_start __asm("_binary_2024_day8_sample1_txt_start");
extern uint32_t _binary_2024_day8_sample1_txt_end __asm("_binary_2024_day8_sample1_txt_end");
extern uint32_t _binary_2024_day8_sample1_txt_size __asm("_binary_2024_day8_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -117,7 +117,7 @@ void find_antinodes(int width, int height,
}
}
int64_t day8_part1(const char * input, int length)
int64_t _2024_day8_part1(const char * input, int length)
{
int stride = parse_stride(input, length);
int height = parse_height(input, length);
@ -137,7 +137,7 @@ int64_t day8_part1(const char * input, int length)
return array_sum_char(antinodes, width * height);
}
int64_t day8_part2(const char * input, int length)
int64_t _2024_day8_part2(const char * input, int length)
{
int stride = parse_stride(input, length);
int height = parse_height(input, length);

15
2024/day9/input.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day9_input_txt_start __asm("_binary_2024_day9_input_txt_start");
extern uint32_t _binary_2024_day9_input_txt_end __asm("_binary_2024_day9_input_txt_end");
extern uint32_t _binary_2024_day9_input_txt_size __asm("_binary_2024_day9_input_txt_size");
#ifdef __cplusplus
}
#endif

15
2024/day9/sample1.txt.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_2024_day9_sample1_txt_start __asm("_binary_2024_day9_sample1_txt_start");
extern uint32_t _binary_2024_day9_sample1_txt_end __asm("_binary_2024_day9_sample1_txt_end");
extern uint32_t _binary_2024_day9_sample1_txt_size __asm("_binary_2024_day9_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -159,7 +159,7 @@ static void print_blocks(int * blocks, int length)
print_char('\n');
}
int64_t day9_part1(const char * input, int length)
int64_t _2024_day9_part1(const char * input, int length)
{
int blocks[length * 9];
int ix = disk_map_to_blocks1(input, length, blocks);
@ -167,7 +167,7 @@ int64_t day9_part1(const char * input, int length)
return calculate_checksum(blocks, ix);
}
int64_t day9_part2(const char * input, int length)
int64_t _2024_day9_part2(const char * input, int length)
{
int blocks[length * 9];
int ix = disk_map_to_blocks2(input, length, blocks);

View File

@ -12,4 +12,12 @@ CFLAGS += -I$(MAKEFILE_PATH)/dreamcast/
CFLAGS += -Wno-char-subscripts
LIB ?= $(MAKEFILE_PATH)/dreamcast
libgcc/%.o: $(LIBGCC)
ar x --output $(dir $@) $(LIBGCC) $(notdir $@)
sh4-none-elf-objdump -t $@ \
| grep -E '[.]hidden' \
| grep -vE 'UND' \
| cut -d' ' -f10 \
| xargs rebind --visibility=default $@
include aoc.mk

10
aoc.mk
View File

@ -19,11 +19,11 @@ DREAMCAST_OBJ = \
$(LIB)/holly/video_output.o \
$(LIB)/font/dejavusansmono/dejavusansmono.data.o \
$(LIB)/sh7091/serial.o \
$(LIB)/maple/maple.o
# libgcc/_divdi3.o \
# libgcc/_moddi3.o \
# libgcc/_udiv_qrnnd_16.o \
# libgcc/_clz.o
$(LIB)/maple/maple.o \
libgcc/_divdi3.o \
libgcc/_moddi3.o \
libgcc/_udiv_qrnnd_16.o \
libgcc/_clz.o
include solutions.mk

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day1_input_txt_start __asm("_binary_day1_input_txt_start");
extern uint32_t _binary_day1_input_txt_end __asm("_binary_day1_input_txt_end");
extern uint32_t _binary_day1_input_txt_size __asm("_binary_day1_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day1_sample1_txt_start __asm("_binary_day1_sample1_txt_start");
extern uint32_t _binary_day1_sample1_txt_end __asm("_binary_day1_sample1_txt_end");
extern uint32_t _binary_day1_sample1_txt_size __asm("_binary_day1_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day10_input_txt_start __asm("_binary_day10_input_txt_start");
extern uint32_t _binary_day10_input_txt_end __asm("_binary_day10_input_txt_end");
extern uint32_t _binary_day10_input_txt_size __asm("_binary_day10_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day10_sample1_txt_start __asm("_binary_day10_sample1_txt_start");
extern uint32_t _binary_day10_sample1_txt_end __asm("_binary_day10_sample1_txt_end");
extern uint32_t _binary_day10_sample1_txt_size __asm("_binary_day10_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day11_input_txt_start __asm("_binary_day11_input_txt_start");
extern uint32_t _binary_day11_input_txt_end __asm("_binary_day11_input_txt_end");
extern uint32_t _binary_day11_input_txt_size __asm("_binary_day11_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day11_sample1_txt_start __asm("_binary_day11_sample1_txt_start");
extern uint32_t _binary_day11_sample1_txt_end __asm("_binary_day11_sample1_txt_end");
extern uint32_t _binary_day11_sample1_txt_size __asm("_binary_day11_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day2_input_txt_start __asm("_binary_day2_input_txt_start");
extern uint32_t _binary_day2_input_txt_end __asm("_binary_day2_input_txt_end");
extern uint32_t _binary_day2_input_txt_size __asm("_binary_day2_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day2_sample1_txt_start __asm("_binary_day2_sample1_txt_start");
extern uint32_t _binary_day2_sample1_txt_end __asm("_binary_day2_sample1_txt_end");
extern uint32_t _binary_day2_sample1_txt_size __asm("_binary_day2_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day3_input_txt_start __asm("_binary_day3_input_txt_start");
extern uint32_t _binary_day3_input_txt_end __asm("_binary_day3_input_txt_end");
extern uint32_t _binary_day3_input_txt_size __asm("_binary_day3_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day3_sample1_txt_start __asm("_binary_day3_sample1_txt_start");
extern uint32_t _binary_day3_sample1_txt_end __asm("_binary_day3_sample1_txt_end");
extern uint32_t _binary_day3_sample1_txt_size __asm("_binary_day3_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day3_sample2_txt_start __asm("_binary_day3_sample2_txt_start");
extern uint32_t _binary_day3_sample2_txt_end __asm("_binary_day3_sample2_txt_end");
extern uint32_t _binary_day3_sample2_txt_size __asm("_binary_day3_sample2_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day4_input_txt_start __asm("_binary_day4_input_txt_start");
extern uint32_t _binary_day4_input_txt_end __asm("_binary_day4_input_txt_end");
extern uint32_t _binary_day4_input_txt_size __asm("_binary_day4_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day4_sample1_txt_start __asm("_binary_day4_sample1_txt_start");
extern uint32_t _binary_day4_sample1_txt_end __asm("_binary_day4_sample1_txt_end");
extern uint32_t _binary_day4_sample1_txt_size __asm("_binary_day4_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day5_input_txt_start __asm("_binary_day5_input_txt_start");
extern uint32_t _binary_day5_input_txt_end __asm("_binary_day5_input_txt_end");
extern uint32_t _binary_day5_input_txt_size __asm("_binary_day5_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day5_sample1_txt_start __asm("_binary_day5_sample1_txt_start");
extern uint32_t _binary_day5_sample1_txt_end __asm("_binary_day5_sample1_txt_end");
extern uint32_t _binary_day5_sample1_txt_size __asm("_binary_day5_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day6_input_txt_start __asm("_binary_day6_input_txt_start");
extern uint32_t _binary_day6_input_txt_end __asm("_binary_day6_input_txt_end");
extern uint32_t _binary_day6_input_txt_size __asm("_binary_day6_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day6_sample1_txt_start __asm("_binary_day6_sample1_txt_start");
extern uint32_t _binary_day6_sample1_txt_end __asm("_binary_day6_sample1_txt_end");
extern uint32_t _binary_day6_sample1_txt_size __asm("_binary_day6_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day7_input_txt_start __asm("_binary_day7_input_txt_start");
extern uint32_t _binary_day7_input_txt_end __asm("_binary_day7_input_txt_end");
extern uint32_t _binary_day7_input_txt_size __asm("_binary_day7_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day7_sample1_txt_start __asm("_binary_day7_sample1_txt_start");
extern uint32_t _binary_day7_sample1_txt_end __asm("_binary_day7_sample1_txt_end");
extern uint32_t _binary_day7_sample1_txt_size __asm("_binary_day7_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day8_input_txt_start __asm("_binary_day8_input_txt_start");
extern uint32_t _binary_day8_input_txt_end __asm("_binary_day8_input_txt_end");
extern uint32_t _binary_day8_input_txt_size __asm("_binary_day8_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day8_sample1_txt_start __asm("_binary_day8_sample1_txt_start");
extern uint32_t _binary_day8_sample1_txt_end __asm("_binary_day8_sample1_txt_end");
extern uint32_t _binary_day8_sample1_txt_size __asm("_binary_day8_sample1_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day9_input_txt_start __asm("_binary_day9_input_txt_start");
extern uint32_t _binary_day9_input_txt_end __asm("_binary_day9_input_txt_end");
extern uint32_t _binary_day9_input_txt_size __asm("_binary_day9_input_txt_size");
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_day9_sample1_txt_start __asm("_binary_day9_sample1_txt_start");
extern uint32_t _binary_day9_sample1_txt_end __asm("_binary_day9_sample1_txt_end");
extern uint32_t _binary_day9_sample1_txt_size __asm("_binary_day9_sample1_txt_size");
#ifdef __cplusplus
}
#endif

122
gen.sh
View File

@ -2,87 +2,100 @@
set -ex
day="$1"
year="$1"
day="$2"
if [ ! -z "$day" ]; then
if [ ! -z $year && ! -z "$year/$day" ]; then
re='^[0-9]+$'
if ! [[ $year =~ $re ]] ; then
echo "error: $year: not a number" >&2
exit 1
fi
if ! [[ $day =~ $re ]] ; then
echo "error: $day: not a number" >&2
exit 1
fi
mkdir -p day${day}
cat <<EOF > day${day}/solution.c
mkdir -p ${year}/day${day}
cat <<EOF > ${year}/day${day}/solution.c
#include <stdint.h>
int64_t day${day}_part1(const char * input, int length)
int64_t ${year}_day${day}_part1(const char * input, int length)
{
return -1;
}
int64_t day${day}_part2(const char * input, int length)
int64_t ${year}_day${day}_part2(const char * input, int length)
{
return -1;
}
EOF
if [ ! -f day${day}/sample1.txt ]; then
touch day${day}/sample1.txt
if [ ! -f ${year}/day${day}/sample1.txt ]; then
touch ${year}/day${day}/sample1.txt
fi
if [ ! -f day${day}/input.txt ]; then
touch day${day}/input.txt
if [ ! -f ${year}/day${day}/input.txt ]; then
touch ${year}/day${day}/input.txt
fi
fi
function gen_start_size ()
function binary_header_include ()
{
echo "$1 { ( char *)&_binary_${2}_${3}_txt_start," >> input_dreamcast.inc
echo "$1 (uint32_t)&_binary_${2}_${3}_txt_size }," >> input_dreamcast.inc
echo "#include \"${1}/sample1.txt.h\"" >> input_dreamcast.inc
if [ -f ${i}/sample2.txt ]; then
echo "#include \"${1}/sample2.txt.h\"" >> input_dreamcast.inc
fi
echo "#include \"${1}/input.txt.h\"" >> input_dreamcast.inc
}
function gen_start_size ()
{
local name=${2//\//_}
echo "$1 { ( char *)&_binary_${name}_${3}_txt_start," >> input_dreamcast.inc
echo "$1 (uint32_t)&_binary_${name}_${3}_txt_size }," >> input_dreamcast.inc
}
for i in day? day?? ; do
function sample ()
{
echo " {" >> input_dreamcast.inc
gen_start_size " " "${1}" "sample1"
if [ ! -f ${i}/sample2.txt ]; then
gen_start_size " " "${1}" "sample1"
else
gen_start_size " " "${1}" "sample2"
fi
echo " }," >> input_dreamcast.inc
}
for i in ????/day? ????/day?? ; do
make ${i}/sample1.txt.h ${i}/input.txt.h
if [ -f ${i}/sample2.txt ]; then
make ${i}/sample2.txt.h
fi
done
truncate -s0 input_dreamcast.inc
for i in day? day?? ; do
echo "#include \"${i}/sample1.txt.h\"" >> input_dreamcast.inc
if [ -f ${i}/sample2.txt ]; then
echo "#include \"${i}/sample2.txt.h\"" >> input_dreamcast.inc
fi
echo "#include \"${i}/input.txt.h\"" >> input_dreamcast.inc
for i in ????/day? ????/day?? ; do
binary_header_include ${i}
done
echo >> input_dreamcast.inc
echo "static struct start_size sample[][2] = {" >> input_dreamcast.inc
for i in day? day?? ; do
echo " {" >> input_dreamcast.inc
gen_start_size " " "${i}" "sample1"
if [ ! -f ${i}/sample2.txt ]; then
gen_start_size " " "${i}" "sample1"
else
gen_start_size " " "${i}" "sample2"
fi
echo " }," >> input_dreamcast.inc
for i in ????/day? ????/day?? ; do
sample ${i}
done
echo "};" >> input_dreamcast.inc
echo >> input_dreamcast.inc
echo "static struct start_size input[] = {" >> input_dreamcast.inc
for i in day? day?? ; do
for i in ????/day? ????/day?? ; do
gen_start_size "" "${i}" "input"
done
echo "};" >> input_dreamcast.inc
truncate -s0 solutions.mk
echo -n "DAY_OBJ =" >> solutions.mk
for i in day? day?? ; do
for i in ????/day? ????/day?? ; do
echo " \\" >> solutions.mk
echo " ${i}/sample1.txt.o \\" >> solutions.mk
if [ -f ${i}/sample2.txt ]; then
@ -96,26 +109,41 @@ for i in day? day?? ; do
done
echo >> solutions.mk
truncate -s0 runner.inc
for i in day? day?? ; do
echo "int64_t ${i}_part1(const char * input, int length);" >> runner.inc
echo "int64_t ${i}_part2(const char * input, int length);" >> runner.inc
if [ -f ${i}/render.cpp ]; then
echo "void ${i}_render(const struct font * font," >> runner.inc
echo " const struct glyph * glyphs," >> runner.inc
echo " const void * maple_ft0_data);" >> runner.inc
function part_declaration ()
{
local name=${1//\//_}
echo "int64_t _${name}_part1(const char * input, int length);" >> runner.inc
echo "int64_t _${name}_part2(const char * input, int length);" >> runner.inc
if [ -f ${1}/render.cpp ]; then
echo "void _${name}_render(const struct font * font," >> runner.inc
echo " const struct glyph * glyphs," >> runner.inc
echo " const void * maple_ft0_data);" >> runner.inc
fi
done
echo >> runner.inc
echo "struct day_funcs solution[] = {" >> runner.inc
for i in day? day?? ; do
}
function solution_array_content ()
{
local name=${1//\//_}
regex='([0-9]+)/day([0-9]+)'
[[ $1 =~ $regex ]]
echo " {" >> runner.inc
echo " {${i}_part1, ${i}_part2}," >> runner.inc
echo " ${BASH_REMATCH[1]}, ${BASH_REMATCH[2]}," >> runner.inc
echo " {_${name}_part1, _${name}_part2}," >> runner.inc
if [ -f ${i}/render.cpp ]; then
echo " ${i}_render," >> runner.inc
echo " _${name}_render," >> runner.inc
else
echo " NULL," >> runner.inc
fi
echo " }," >> runner.inc
}
truncate -s0 runner.inc
for i in ????/day? ????/day?? ; do
part_declaration ${i}
done
echo >> runner.inc
echo "struct day_funcs solution[] = {" >> runner.inc
for i in ????/day? ????/day?? ; do
solution_array_content ${i}
done
echo "};" >> runner.inc

View File

@ -4,8 +4,8 @@
extern "C" {
#endif
void open_input(int day, char ** buf, int * length);
void open_sample(int day, int part, char ** buf, int * length);
void open_input(int ix, char ** buf, int * length);
void open_sample(int ix, int part, char ** buf, int * length);
#ifdef __cplusplus
}

View File

@ -12,24 +12,24 @@ struct start_size {
const int input_size = (sizeof (input)) / (sizeof (input[0]));
void open_input(int day, char ** buf, int * length)
void open_input(int ix, char ** buf, int * length)
{
if (day < 1 || day > input_size) {
if (ix < 0 || ix >= input_size) {
*buf = NULL;
*length = 0;
} else {
*buf = input[day - 1].start;
*length = input[day - 1].size;
*buf = input[ix].start;
*length = input[ix].size;
}
}
void open_sample(int day, int part, char ** buf, int * length)
void open_sample(int ix, int part, char ** buf, int * length)
{
if (day < 1 || day > input_size || part < 1 || part > 2) {
if (ix < 1 || ix > input_size || part < 0 || part > 1) {
*buf = NULL;
*length = 0;
} else {
*buf = sample[day - 1][part - 1].start;
*length = sample[day - 1][part - 1].size;
*buf = sample[ix][part].start;
*length = sample[ix][part].size;
}
}

View File

@ -1,117 +1,128 @@
#include "day1/sample1.txt.h"
#include "day1/input.txt.h"
#include "day2/sample1.txt.h"
#include "day2/input.txt.h"
#include "day3/sample1.txt.h"
#include "day3/sample2.txt.h"
#include "day3/input.txt.h"
#include "day4/sample1.txt.h"
#include "day4/input.txt.h"
#include "day5/sample1.txt.h"
#include "day5/input.txt.h"
#include "day6/sample1.txt.h"
#include "day6/input.txt.h"
#include "day7/sample1.txt.h"
#include "day7/input.txt.h"
#include "day8/sample1.txt.h"
#include "day8/input.txt.h"
#include "day9/sample1.txt.h"
#include "day9/input.txt.h"
#include "day10/sample1.txt.h"
#include "day10/input.txt.h"
#include "day11/sample1.txt.h"
#include "day11/input.txt.h"
#include "2023/day1/sample1.txt.h"
#include "2023/day1/sample2.txt.h"
#include "2023/day1/input.txt.h"
#include "2024/day1/sample1.txt.h"
#include "2024/day1/input.txt.h"
#include "2024/day2/sample1.txt.h"
#include "2024/day2/input.txt.h"
#include "2024/day3/sample1.txt.h"
#include "2024/day3/sample2.txt.h"
#include "2024/day3/input.txt.h"
#include "2024/day4/sample1.txt.h"
#include "2024/day4/input.txt.h"
#include "2024/day5/sample1.txt.h"
#include "2024/day5/input.txt.h"
#include "2024/day6/sample1.txt.h"
#include "2024/day6/input.txt.h"
#include "2024/day7/sample1.txt.h"
#include "2024/day7/input.txt.h"
#include "2024/day8/sample1.txt.h"
#include "2024/day8/input.txt.h"
#include "2024/day9/sample1.txt.h"
#include "2024/day9/input.txt.h"
#include "2024/day10/sample1.txt.h"
#include "2024/day10/input.txt.h"
#include "2024/day11/sample1.txt.h"
#include "2024/day11/input.txt.h"
static struct start_size sample[][2] = {
{
{ ( char *)&_binary_day1_sample1_txt_start,
(uint32_t)&_binary_day1_sample1_txt_size },
{ ( char *)&_binary_day1_sample1_txt_start,
(uint32_t)&_binary_day1_sample1_txt_size },
{ ( char *)&_binary_2023_day1_sample1_txt_start,
(uint32_t)&_binary_2023_day1_sample1_txt_size },
{ ( char *)&_binary_2023_day1_sample2_txt_start,
(uint32_t)&_binary_2023_day1_sample2_txt_size },
},
{
{ ( char *)&_binary_day2_sample1_txt_start,
(uint32_t)&_binary_day2_sample1_txt_size },
{ ( char *)&_binary_day2_sample1_txt_start,
(uint32_t)&_binary_day2_sample1_txt_size },
{ ( char *)&_binary_2024_day1_sample1_txt_start,
(uint32_t)&_binary_2024_day1_sample1_txt_size },
{ ( char *)&_binary_2024_day1_sample1_txt_start,
(uint32_t)&_binary_2024_day1_sample1_txt_size },
},
{
{ ( char *)&_binary_day3_sample1_txt_start,
(uint32_t)&_binary_day3_sample1_txt_size },
{ ( char *)&_binary_day3_sample2_txt_start,
(uint32_t)&_binary_day3_sample2_txt_size },
{ ( char *)&_binary_2024_day2_sample1_txt_start,
(uint32_t)&_binary_2024_day2_sample1_txt_size },
{ ( char *)&_binary_2024_day2_sample1_txt_start,
(uint32_t)&_binary_2024_day2_sample1_txt_size },
},
{
{ ( char *)&_binary_day4_sample1_txt_start,
(uint32_t)&_binary_day4_sample1_txt_size },
{ ( char *)&_binary_day4_sample1_txt_start,
(uint32_t)&_binary_day4_sample1_txt_size },
{ ( char *)&_binary_2024_day3_sample1_txt_start,
(uint32_t)&_binary_2024_day3_sample1_txt_size },
{ ( char *)&_binary_2024_day3_sample2_txt_start,
(uint32_t)&_binary_2024_day3_sample2_txt_size },
},
{
{ ( char *)&_binary_day5_sample1_txt_start,
(uint32_t)&_binary_day5_sample1_txt_size },
{ ( char *)&_binary_day5_sample1_txt_start,
(uint32_t)&_binary_day5_sample1_txt_size },
{ ( char *)&_binary_2024_day4_sample1_txt_start,
(uint32_t)&_binary_2024_day4_sample1_txt_size },
{ ( char *)&_binary_2024_day4_sample1_txt_start,
(uint32_t)&_binary_2024_day4_sample1_txt_size },
},
{
{ ( char *)&_binary_day6_sample1_txt_start,
(uint32_t)&_binary_day6_sample1_txt_size },
{ ( char *)&_binary_day6_sample1_txt_start,
(uint32_t)&_binary_day6_sample1_txt_size },
{ ( char *)&_binary_2024_day5_sample1_txt_start,
(uint32_t)&_binary_2024_day5_sample1_txt_size },
{ ( char *)&_binary_2024_day5_sample1_txt_start,
(uint32_t)&_binary_2024_day5_sample1_txt_size },
},
{
{ ( char *)&_binary_day7_sample1_txt_start,
(uint32_t)&_binary_day7_sample1_txt_size },
{ ( char *)&_binary_day7_sample1_txt_start,
(uint32_t)&_binary_day7_sample1_txt_size },
{ ( char *)&_binary_2024_day6_sample1_txt_start,
(uint32_t)&_binary_2024_day6_sample1_txt_size },
{ ( char *)&_binary_2024_day6_sample1_txt_start,
(uint32_t)&_binary_2024_day6_sample1_txt_size },
},
{
{ ( char *)&_binary_day8_sample1_txt_start,
(uint32_t)&_binary_day8_sample1_txt_size },
{ ( char *)&_binary_day8_sample1_txt_start,
(uint32_t)&_binary_day8_sample1_txt_size },
{ ( char *)&_binary_2024_day7_sample1_txt_start,
(uint32_t)&_binary_2024_day7_sample1_txt_size },
{ ( char *)&_binary_2024_day7_sample1_txt_start,
(uint32_t)&_binary_2024_day7_sample1_txt_size },
},
{
{ ( char *)&_binary_day9_sample1_txt_start,
(uint32_t)&_binary_day9_sample1_txt_size },
{ ( char *)&_binary_day9_sample1_txt_start,
(uint32_t)&_binary_day9_sample1_txt_size },
{ ( char *)&_binary_2024_day8_sample1_txt_start,
(uint32_t)&_binary_2024_day8_sample1_txt_size },
{ ( char *)&_binary_2024_day8_sample1_txt_start,
(uint32_t)&_binary_2024_day8_sample1_txt_size },
},
{
{ ( char *)&_binary_day10_sample1_txt_start,
(uint32_t)&_binary_day10_sample1_txt_size },
{ ( char *)&_binary_day10_sample1_txt_start,
(uint32_t)&_binary_day10_sample1_txt_size },
{ ( char *)&_binary_2024_day9_sample1_txt_start,
(uint32_t)&_binary_2024_day9_sample1_txt_size },
{ ( char *)&_binary_2024_day9_sample1_txt_start,
(uint32_t)&_binary_2024_day9_sample1_txt_size },
},
{
{ ( char *)&_binary_day11_sample1_txt_start,
(uint32_t)&_binary_day11_sample1_txt_size },
{ ( char *)&_binary_day11_sample1_txt_start,
(uint32_t)&_binary_day11_sample1_txt_size },
{ ( char *)&_binary_2024_day10_sample1_txt_start,
(uint32_t)&_binary_2024_day10_sample1_txt_size },
{ ( char *)&_binary_2024_day10_sample1_txt_start,
(uint32_t)&_binary_2024_day10_sample1_txt_size },
},
{
{ ( char *)&_binary_2024_day11_sample1_txt_start,
(uint32_t)&_binary_2024_day11_sample1_txt_size },
{ ( char *)&_binary_2024_day11_sample1_txt_start,
(uint32_t)&_binary_2024_day11_sample1_txt_size },
},
};
static struct start_size input[] = {
{ ( char *)&_binary_day1_input_txt_start,
(uint32_t)&_binary_day1_input_txt_size },
{ ( char *)&_binary_day2_input_txt_start,
(uint32_t)&_binary_day2_input_txt_size },
{ ( char *)&_binary_day3_input_txt_start,
(uint32_t)&_binary_day3_input_txt_size },
{ ( char *)&_binary_day4_input_txt_start,
(uint32_t)&_binary_day4_input_txt_size },
{ ( char *)&_binary_day5_input_txt_start,
(uint32_t)&_binary_day5_input_txt_size },
{ ( char *)&_binary_day6_input_txt_start,
(uint32_t)&_binary_day6_input_txt_size },
{ ( char *)&_binary_day7_input_txt_start,
(uint32_t)&_binary_day7_input_txt_size },
{ ( char *)&_binary_day8_input_txt_start,
(uint32_t)&_binary_day8_input_txt_size },
{ ( char *)&_binary_day9_input_txt_start,
(uint32_t)&_binary_day9_input_txt_size },
{ ( char *)&_binary_day10_input_txt_start,
(uint32_t)&_binary_day10_input_txt_size },
{ ( char *)&_binary_day11_input_txt_start,
(uint32_t)&_binary_day11_input_txt_size },
{ ( char *)&_binary_2023_day1_input_txt_start,
(uint32_t)&_binary_2023_day1_input_txt_size },
{ ( char *)&_binary_2024_day1_input_txt_start,
(uint32_t)&_binary_2024_day1_input_txt_size },
{ ( char *)&_binary_2024_day2_input_txt_start,
(uint32_t)&_binary_2024_day2_input_txt_size },
{ ( char *)&_binary_2024_day3_input_txt_start,
(uint32_t)&_binary_2024_day3_input_txt_size },
{ ( char *)&_binary_2024_day4_input_txt_start,
(uint32_t)&_binary_2024_day4_input_txt_size },
{ ( char *)&_binary_2024_day5_input_txt_start,
(uint32_t)&_binary_2024_day5_input_txt_size },
{ ( char *)&_binary_2024_day6_input_txt_start,
(uint32_t)&_binary_2024_day6_input_txt_size },
{ ( char *)&_binary_2024_day7_input_txt_start,
(uint32_t)&_binary_2024_day7_input_txt_size },
{ ( char *)&_binary_2024_day8_input_txt_start,
(uint32_t)&_binary_2024_day8_input_txt_size },
{ ( char *)&_binary_2024_day9_input_txt_start,
(uint32_t)&_binary_2024_day9_input_txt_size },
{ ( char *)&_binary_2024_day10_input_txt_start,
(uint32_t)&_binary_2024_day10_input_txt_size },
{ ( char *)&_binary_2024_day11_input_txt_start,
(uint32_t)&_binary_2024_day11_input_txt_size },
};

View File

@ -12,6 +12,8 @@ typedef void (* render_func)(const struct font * font,
const void * maple_ft0_data);
struct day_funcs {
int year;
int day;
part_func part[2];
render_func render;
};
@ -23,6 +25,7 @@ const int solution_ticks = solution_days * 2;
bool runner_tick(struct runner_state * runner_state)
{
int tick = (solution_ticks - 1) - runner_state->tick;
//int tick = runner_state->tick;
if (tick < 0) {
runner_state->want_render = false;
@ -30,20 +33,19 @@ bool runner_tick(struct runner_state * runner_state)
}
int part = tick % 2;
int day = tick / 2;
int ix = tick / 2;
int year = solution[ix].year;
int day = solution[ix].day;
if (day < 10)
return true;
runner_state->want_render = solution[day].render != NULL;
runner_state->want_render = solution[ix].render != NULL;
char * buf;
int length;
//open_sample(day + 1, part + 1, &buf, &length);
open_input(day + 1, &buf, &length);
open_sample(ix, part, &buf, &length);
//open_input(ix, &buf, &length);
int64_t answer = solution[day].part[part](buf, length);
printf("day %d part %d: %l\n", day + 1, part + 1, answer);
printf("%d day %d part %d: %l\n", year, day, part + 1, answer);
runner_state->tick += 1;

View File

@ -1,72 +1,90 @@
int64_t day1_part1(const char * input, int length);
int64_t day1_part2(const char * input, int length);
int64_t day2_part1(const char * input, int length);
int64_t day2_part2(const char * input, int length);
int64_t day3_part1(const char * input, int length);
int64_t day3_part2(const char * input, int length);
int64_t day4_part1(const char * input, int length);
int64_t day4_part2(const char * input, int length);
int64_t day5_part1(const char * input, int length);
int64_t day5_part2(const char * input, int length);
int64_t day6_part1(const char * input, int length);
int64_t day6_part2(const char * input, int length);
void day6_render(const struct font * font,
const struct glyph * glyphs,
const void * maple_ft0_data);
int64_t day7_part1(const char * input, int length);
int64_t day7_part2(const char * input, int length);
int64_t day8_part1(const char * input, int length);
int64_t day8_part2(const char * input, int length);
int64_t day9_part1(const char * input, int length);
int64_t day9_part2(const char * input, int length);
int64_t day10_part1(const char * input, int length);
int64_t day10_part2(const char * input, int length);
int64_t day11_part1(const char * input, int length);
int64_t day11_part2(const char * input, int length);
int64_t _2023_day1_part1(const char * input, int length);
int64_t _2023_day1_part2(const char * input, int length);
int64_t _2024_day1_part1(const char * input, int length);
int64_t _2024_day1_part2(const char * input, int length);
int64_t _2024_day2_part1(const char * input, int length);
int64_t _2024_day2_part2(const char * input, int length);
int64_t _2024_day3_part1(const char * input, int length);
int64_t _2024_day3_part2(const char * input, int length);
int64_t _2024_day4_part1(const char * input, int length);
int64_t _2024_day4_part2(const char * input, int length);
int64_t _2024_day5_part1(const char * input, int length);
int64_t _2024_day5_part2(const char * input, int length);
int64_t _2024_day6_part1(const char * input, int length);
int64_t _2024_day6_part2(const char * input, int length);
void _2024_day6_render(const struct font * font,
const struct glyph * glyphs,
const void * maple_ft0_data);
int64_t _2024_day7_part1(const char * input, int length);
int64_t _2024_day7_part2(const char * input, int length);
int64_t _2024_day8_part1(const char * input, int length);
int64_t _2024_day8_part2(const char * input, int length);
int64_t _2024_day9_part1(const char * input, int length);
int64_t _2024_day9_part2(const char * input, int length);
int64_t _2024_day10_part1(const char * input, int length);
int64_t _2024_day10_part2(const char * input, int length);
int64_t _2024_day11_part1(const char * input, int length);
int64_t _2024_day11_part2(const char * input, int length);
struct day_funcs solution[] = {
{
{day1_part1, day1_part2},
2023, 1,
{_2023_day1_part1, _2023_day1_part2},
NULL,
},
{
{day2_part1, day2_part2},
2024, 1,
{_2024_day1_part1, _2024_day1_part2},
NULL,
},
{
{day3_part1, day3_part2},
2024, 2,
{_2024_day2_part1, _2024_day2_part2},
NULL,
},
{
{day4_part1, day4_part2},
2024, 3,
{_2024_day3_part1, _2024_day3_part2},
NULL,
},
{
{day5_part1, day5_part2},
2024, 4,
{_2024_day4_part1, _2024_day4_part2},
NULL,
},
{
{day6_part1, day6_part2},
day6_render,
},
{
{day7_part1, day7_part2},
2024, 5,
{_2024_day5_part1, _2024_day5_part2},
NULL,
},
{
{day8_part1, day8_part2},
2024, 6,
{_2024_day6_part1, _2024_day6_part2},
_2024_day6_render,
},
{
2024, 7,
{_2024_day7_part1, _2024_day7_part2},
NULL,
},
{
{day9_part1, day9_part2},
2024, 8,
{_2024_day8_part1, _2024_day8_part2},
NULL,
},
{
{day10_part1, day10_part2},
2024, 9,
{_2024_day9_part1, _2024_day9_part2},
NULL,
},
{
{day11_part1, day11_part2},
2024, 10,
{_2024_day10_part1, _2024_day10_part2},
NULL,
},
{
2024, 11,
{_2024_day11_part1, _2024_day11_part2},
NULL,
},
};

View File

@ -1,36 +1,40 @@
DAY_OBJ = \
day1/sample1.txt.o \
day1/input.txt.o \
day1/solution.o \
day2/sample1.txt.o \
day2/input.txt.o \
day2/solution.o \
day3/sample1.txt.o \
day3/sample2.txt.o \
day3/input.txt.o \
day3/solution.o \
day4/sample1.txt.o \
day4/input.txt.o \
day4/solution.o \
day5/sample1.txt.o \
day5/input.txt.o \
day5/solution.o \
day6/sample1.txt.o \
day6/input.txt.o \
day6/render.o \
day6/solution.o \
day7/sample1.txt.o \
day7/input.txt.o \
day7/solution.o \
day8/sample1.txt.o \
day8/input.txt.o \
day8/solution.o \
day9/sample1.txt.o \
day9/input.txt.o \
day9/solution.o \
day10/sample1.txt.o \
day10/input.txt.o \
day10/solution.o \
day11/sample1.txt.o \
day11/input.txt.o \
day11/solution.o
2023/day1/sample1.txt.o \
2023/day1/sample2.txt.o \
2023/day1/input.txt.o \
2023/day1/solution.o \
2024/day1/sample1.txt.o \
2024/day1/input.txt.o \
2024/day1/solution.o \
2024/day2/sample1.txt.o \
2024/day2/input.txt.o \
2024/day2/solution.o \
2024/day3/sample1.txt.o \
2024/day3/sample2.txt.o \
2024/day3/input.txt.o \
2024/day3/solution.o \
2024/day4/sample1.txt.o \
2024/day4/input.txt.o \
2024/day4/solution.o \
2024/day5/sample1.txt.o \
2024/day5/input.txt.o \
2024/day5/solution.o \
2024/day6/sample1.txt.o \
2024/day6/input.txt.o \
2024/day6/render.o \
2024/day6/solution.o \
2024/day7/sample1.txt.o \
2024/day7/input.txt.o \
2024/day7/solution.o \
2024/day8/sample1.txt.o \
2024/day8/input.txt.o \
2024/day8/solution.o \
2024/day9/sample1.txt.o \
2024/day9/input.txt.o \
2024/day9/solution.o \
2024/day10/sample1.txt.o \
2024/day10/input.txt.o \
2024/day10/solution.o \
2024/day11/sample1.txt.o \
2024/day11/input.txt.o \
2024/day11/solution.o