BuildSystem: Rework the whole cmake build system
Now files are installed using the install() command instead of manually copying files to their destinations. This allows automatic recompilation of headers that did not work previously
This commit is contained in:
@@ -1,7 +1,3 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023 CXX)
|
||||
|
||||
set(AOC2023_PROJECTS
|
||||
day1
|
||||
day2
|
||||
@@ -30,20 +26,21 @@ set(AOC2023_PROJECTS
|
||||
full
|
||||
)
|
||||
|
||||
set(BANAN_AOC2023_BIN ${BANAN_BIN}/aoc2023)
|
||||
set(BANAN_AOC2023_BIN ${CMAKE_INSTALL_BINDIR}/aoc2023)
|
||||
set(BANAN_AOC2023_INPUT ${BANAN_SHARE}/aoc2023)
|
||||
|
||||
set(CMAKE_INSTALL_BINDIR ${BANAN_AOC2023_BIN})
|
||||
|
||||
add_custom_target(aoc2023)
|
||||
add_custom_target(aoc2023_always
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${BANAN_AOC2023_BIN}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${BANAN_AOC2023_INPUT}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/input/* ${BANAN_AOC2023_INPUT}/
|
||||
)
|
||||
add_custom_target(aoc2023-install DEPENDS aoc2023 aoc2023_always)
|
||||
|
||||
file(GLOB_RECURSE input_files "input/*")
|
||||
foreach(file ${input_files})
|
||||
install(FILES ${file} DESTINATION ${BANAN_AOC2023_INPUT})
|
||||
endforeach()
|
||||
|
||||
foreach(AOC2023_PROJECT ${AOC2023_PROJECTS})
|
||||
add_subdirectory(${AOC2023_PROJECT})
|
||||
add_dependencies(aoc2023 aoc2023_${AOC2023_PROJECT})
|
||||
endforeach()
|
||||
|
||||
add_dependencies(userspace aoc2023)
|
||||
add_dependencies(userspace-install aoc2023-install)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day-template CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day-template ${SOURCES})
|
||||
target_compile_options(aoc2023_day-template PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day-template PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day-template ban)
|
||||
banan_link_library(aoc2023_day-template libc)
|
||||
|
||||
add_dependencies(aoc2023_day-template libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day-template-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day-template ${BANAN_AOC2023_BIN}/day-template
|
||||
DEPENDS aoc2023_day-template
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day-template)
|
||||
add_dependencies(aoc2023-install aoc2023_day-template-install)
|
||||
install(TARGETS aoc2023_day-template)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day1 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day1 ${SOURCES})
|
||||
target_compile_options(aoc2023_day1 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day1 PUBLIC libc)
|
||||
banan_include_headers(aoc2023_day1 ban)
|
||||
banan_link_library(aoc2023_day1 libc)
|
||||
|
||||
add_dependencies(aoc2023_day1 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day1-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day1 ${BANAN_AOC2023_BIN}/day1
|
||||
DEPENDS aoc2023_day1
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day1)
|
||||
add_dependencies(aoc2023-install aoc2023_day1-install)
|
||||
install(TARGETS aoc2023_day1)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day10 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day10 ${SOURCES})
|
||||
target_compile_options(aoc2023_day10 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day10 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day10 ban)
|
||||
banan_link_library(aoc2023_day10 libc)
|
||||
|
||||
add_dependencies(aoc2023_day10 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day10-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day10 ${BANAN_AOC2023_BIN}/day10
|
||||
DEPENDS aoc2023_day10
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day10)
|
||||
add_dependencies(aoc2023-install aoc2023_day10-install)
|
||||
install(TARGETS aoc2023_day10)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day11 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day11 ${SOURCES})
|
||||
target_compile_options(aoc2023_day11 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day11 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day11 ban)
|
||||
banan_link_library(aoc2023_day11 libc)
|
||||
|
||||
add_dependencies(aoc2023_day11 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day11-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day11 ${BANAN_AOC2023_BIN}/day11
|
||||
DEPENDS aoc2023_day11
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day11)
|
||||
add_dependencies(aoc2023-install aoc2023_day11-install)
|
||||
install(TARGETS aoc2023_day11)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day12 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day12 ${SOURCES})
|
||||
target_compile_options(aoc2023_day12 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day12 PUBLIC libc ban)
|
||||
banan_link_library(aoc2023_day12 ban)
|
||||
banan_link_library(aoc2023_day12 libc)
|
||||
|
||||
add_dependencies(aoc2023_day12 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day12-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day12 ${BANAN_AOC2023_BIN}/day12
|
||||
DEPENDS aoc2023_day12
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day12)
|
||||
add_dependencies(aoc2023-install aoc2023_day12-install)
|
||||
install(TARGETS aoc2023_day12)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day13 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day13 ${SOURCES})
|
||||
target_compile_options(aoc2023_day13 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day13 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day13 ban)
|
||||
banan_link_library(aoc2023_day13 libc)
|
||||
|
||||
add_dependencies(aoc2023_day13 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day13-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day13 ${BANAN_AOC2023_BIN}/day13
|
||||
DEPENDS aoc2023_day13
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day13)
|
||||
add_dependencies(aoc2023-install aoc2023_day13-install)
|
||||
install(TARGETS aoc2023_day13)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day14 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day14 ${SOURCES})
|
||||
target_compile_options(aoc2023_day14 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day14 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day14 ban)
|
||||
banan_link_library(aoc2023_day14 libc)
|
||||
|
||||
add_dependencies(aoc2023_day14 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day14-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day14 ${BANAN_AOC2023_BIN}/day14
|
||||
DEPENDS aoc2023_day14
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day14)
|
||||
add_dependencies(aoc2023-install aoc2023_day14-install)
|
||||
install(TARGETS aoc2023_day14)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day15 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day15 ${SOURCES})
|
||||
target_compile_options(aoc2023_day15 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day15 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day15 ban)
|
||||
banan_link_library(aoc2023_day15 libc)
|
||||
|
||||
add_dependencies(aoc2023_day15 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day15-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day15 ${BANAN_AOC2023_BIN}/day15
|
||||
DEPENDS aoc2023_day15
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day15)
|
||||
add_dependencies(aoc2023-install aoc2023_day15-install)
|
||||
install(TARGETS aoc2023_day15)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day16 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day16 ${SOURCES})
|
||||
target_compile_options(aoc2023_day16 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day16 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day16 ban)
|
||||
banan_link_library(aoc2023_day16 libc)
|
||||
|
||||
add_dependencies(aoc2023_day16 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day16-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day16 ${BANAN_AOC2023_BIN}/day16
|
||||
DEPENDS aoc2023_day16
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day16)
|
||||
add_dependencies(aoc2023-install aoc2023_day16-install)
|
||||
install(TARGETS aoc2023_day16)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day17 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day17 ${SOURCES})
|
||||
target_compile_options(aoc2023_day17 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day17 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day17 ban)
|
||||
banan_link_library(aoc2023_day17 libc)
|
||||
|
||||
add_dependencies(aoc2023_day17 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day17-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day17 ${BANAN_AOC2023_BIN}/day17
|
||||
DEPENDS aoc2023_day17
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day17)
|
||||
add_dependencies(aoc2023-install aoc2023_day17-install)
|
||||
install(TARGETS aoc2023_day17)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day18 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day18 ${SOURCES})
|
||||
target_compile_options(aoc2023_day18 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day18 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day18 ban)
|
||||
banan_link_library(aoc2023_day18 libc)
|
||||
|
||||
add_dependencies(aoc2023_day18 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day18-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day18 ${BANAN_AOC2023_BIN}/day18
|
||||
DEPENDS aoc2023_day18
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day18)
|
||||
add_dependencies(aoc2023-install aoc2023_day18-install)
|
||||
install(TARGETS aoc2023_day18)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day19 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day19 ${SOURCES})
|
||||
target_compile_options(aoc2023_day19 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day19 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day19 ban)
|
||||
banan_link_library(aoc2023_day19 libc)
|
||||
|
||||
add_dependencies(aoc2023_day19 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day19-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day19 ${BANAN_AOC2023_BIN}/day19
|
||||
DEPENDS aoc2023_day19
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day19)
|
||||
add_dependencies(aoc2023-install aoc2023_day19-install)
|
||||
install(TARGETS aoc2023_day19)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day2 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day2 ${SOURCES})
|
||||
target_compile_options(aoc2023_day2 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day2 PUBLIC libc)
|
||||
banan_include_headers(aoc2023_day2 ban)
|
||||
banan_link_library(aoc2023_day2 libc)
|
||||
|
||||
add_dependencies(aoc2023_day2 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day2-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day2 ${BANAN_AOC2023_BIN}/day2
|
||||
DEPENDS aoc2023_day2
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day2)
|
||||
add_dependencies(aoc2023-install aoc2023_day2-install)
|
||||
install(TARGETS aoc2023_day2)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day20 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day20 ${SOURCES})
|
||||
target_compile_options(aoc2023_day20 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day20 PUBLIC libc ban)
|
||||
banan_link_library(aoc2023_day20 ban)
|
||||
banan_link_library(aoc2023_day20 libc)
|
||||
|
||||
add_dependencies(aoc2023_day20 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day20-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day20 ${BANAN_AOC2023_BIN}/day20
|
||||
DEPENDS aoc2023_day20
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day20)
|
||||
add_dependencies(aoc2023-install aoc2023_day20-install)
|
||||
install(TARGETS aoc2023_day20)
|
||||
|
||||
@@ -30,6 +30,8 @@ struct Module
|
||||
BAN::String name;
|
||||
BAN::Vector<BAN::String> targets;
|
||||
|
||||
virtual ~Module() {}
|
||||
|
||||
virtual void handle_signal(const Signal& signal, BAN::Queue<Signal>& signal_queue) = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day21 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day21 ${SOURCES})
|
||||
target_compile_options(aoc2023_day21 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day21 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day21 ban)
|
||||
banan_link_library(aoc2023_day21 libc)
|
||||
|
||||
add_dependencies(aoc2023_day21 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day21-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day21 ${BANAN_AOC2023_BIN}/day21
|
||||
DEPENDS aoc2023_day21
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day21)
|
||||
add_dependencies(aoc2023-install aoc2023_day21-install)
|
||||
install(TARGETS aoc2023_day21)
|
||||
|
||||
9
userspace/aoc2023/day22/CMakeLists.txt
Normal file
9
userspace/aoc2023/day22/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day22 ${SOURCES})
|
||||
banan_include_headers(aoc2023_day22 ban)
|
||||
banan_link_library(aoc2023_day22 libc)
|
||||
|
||||
install(TARGETS aoc2023_day22)
|
||||
191
userspace/aoc2023/day22/main.cpp
Normal file
191
userspace/aoc2023/day22/main.cpp
Normal file
@@ -0,0 +1,191 @@
|
||||
#include <BAN/HashSet.h>
|
||||
#include <BAN/Sort.h>
|
||||
#include <BAN/Vector.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
|
||||
using i8 = int8_t;
|
||||
using i16 = int16_t;
|
||||
using i32 = int32_t;
|
||||
using i64 = int64_t;
|
||||
|
||||
using u8 = uint8_t;
|
||||
using u16 = uint16_t;
|
||||
using u32 = uint32_t;
|
||||
using u64 = uint64_t;
|
||||
|
||||
struct Position
|
||||
{
|
||||
i64 x, y, z;
|
||||
|
||||
bool operator==(const Position& other) const
|
||||
{
|
||||
return x == other.x && y == other.y && z == other.z;
|
||||
}
|
||||
};
|
||||
|
||||
static constexpr bool rectangle_contains(const Position& c1, const Position& c2, const Position& p)
|
||||
{
|
||||
ASSERT(c1.x <= c2.x);
|
||||
ASSERT(c1.y <= c2.y);
|
||||
return (c1.x <= p.x && p.x <= c2.x) && (c1.y <= p.y && p.y <= c2.y);
|
||||
}
|
||||
|
||||
struct Brick
|
||||
{
|
||||
Position corners[2];
|
||||
BAN::HashSet<Brick*> supporting;
|
||||
BAN::HashSet<Brick*> supported_by;
|
||||
|
||||
bool supports(const Brick& other) const
|
||||
{
|
||||
if (corners[1].z + 1 != other.corners[0].z)
|
||||
return false;
|
||||
|
||||
for (i32 i = 0; i < 4; i++)
|
||||
if (rectangle_contains(corners[0], corners[1], { other.corners[i / 2].x, other.corners[i % 2].y, 0 }))
|
||||
return true;
|
||||
|
||||
for (i32 i = 0; i < 4; i++)
|
||||
if (rectangle_contains(other.corners[0], other.corners[1], { corners[i / 2].x, corners[i % 2].y, 0 }))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
i64 parse_i64(BAN::StringView str)
|
||||
{
|
||||
i64 result = 0;
|
||||
for (char c : str)
|
||||
{
|
||||
ASSERT(isdigit(c));
|
||||
result = (result * 10) + (c - '0');
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
BAN::Vector<Brick> parse_bricks(FILE* fp)
|
||||
{
|
||||
BAN::Vector<Brick> bricks;
|
||||
|
||||
char buffer[64];
|
||||
while (fgets(buffer, sizeof(buffer), fp))
|
||||
{
|
||||
BAN::StringView line(buffer);
|
||||
ASSERT(line.back() == '\n');
|
||||
line = line.substring(0, line.size() - 1);
|
||||
if (line.empty())
|
||||
break;
|
||||
|
||||
auto corner_strs = MUST(line.split('~'));
|
||||
ASSERT(corner_strs.size() == 2);
|
||||
|
||||
Brick brick;
|
||||
for (i32 i = 0; i < 2; i++)
|
||||
{
|
||||
auto coords = MUST(corner_strs[i].split(','));
|
||||
ASSERT(coords.size() == 3);
|
||||
brick.corners[i].x = parse_i64(coords[0]);
|
||||
brick.corners[i].y = parse_i64(coords[1]);
|
||||
brick.corners[i].z = parse_i64(coords[2]);
|
||||
}
|
||||
ASSERT(brick.corners[0].x <= brick.corners[1].x);
|
||||
ASSERT(brick.corners[0].y <= brick.corners[1].y);
|
||||
ASSERT(brick.corners[0].z <= brick.corners[1].z);
|
||||
MUST(bricks.push_back(brick));
|
||||
}
|
||||
|
||||
return bricks;
|
||||
}
|
||||
|
||||
i64 puzzle1(FILE* fp)
|
||||
{
|
||||
auto brick_comp = [](const Brick& b1, const Brick& b2) { return b1.corners[0].z < b2.corners[0].z; };
|
||||
|
||||
auto bricks = parse_bricks(fp);
|
||||
BAN::sort::sort(bricks.begin(), bricks.end(), brick_comp);
|
||||
|
||||
// Simulate brick falling
|
||||
for (size_t i = 0; i < bricks.size();)
|
||||
{
|
||||
bool can_fall = bricks[i].corners[0].z > 1;
|
||||
for (size_t j = 0; j < i && can_fall; j++)
|
||||
if (bricks[j].supports(bricks[i]))
|
||||
can_fall = false;
|
||||
|
||||
if (!can_fall)
|
||||
i++;
|
||||
else
|
||||
{
|
||||
bricks[i].corners[0].z--;
|
||||
bricks[i].corners[1].z--;
|
||||
for (; i > 0; i--)
|
||||
{
|
||||
if (brick_comp(bricks[i - 1], bricks[i]))
|
||||
break;
|
||||
BAN::swap(bricks[i - 1], bricks[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Store brick supporting structures
|
||||
for (size_t i = 0; i < bricks.size(); i++)
|
||||
{
|
||||
for (size_t j = 0; j < bricks.size(); j++)
|
||||
{
|
||||
if (i == j)
|
||||
continue;
|
||||
if (bricks[i].supports(bricks[j]))
|
||||
{
|
||||
MUST(bricks[i].supporting.insert(&bricks[j]));
|
||||
MUST(bricks[j].supported_by.insert(&bricks[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
i64 result = 0;
|
||||
for (const auto& brick : bricks)
|
||||
{
|
||||
bool disintegratable = true;
|
||||
for (const auto* support : brick.supporting)
|
||||
if (support->supported_by.size() <= 1)
|
||||
disintegratable = false;
|
||||
result += disintegratable;
|
||||
}
|
||||
|
||||
// OFF BY 7
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
i64 puzzle2(FILE* fp)
|
||||
{
|
||||
(void)fp;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
const char* file_path = "/usr/share/aoc2023/day22_input.txt";
|
||||
|
||||
if (argc >= 2)
|
||||
file_path = argv[1];
|
||||
|
||||
FILE* fp = fopen(file_path, "r");
|
||||
if (fp == nullptr)
|
||||
{
|
||||
perror("fopen");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("puzzle1: %" PRId64 "\n", puzzle1(fp));
|
||||
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
printf("puzzle2: %" PRId64 "\n", puzzle2(fp));
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day23 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day23 ${SOURCES})
|
||||
target_compile_options(aoc2023_day23 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day23 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day23 ban)
|
||||
banan_link_library(aoc2023_day23 libc)
|
||||
|
||||
add_dependencies(aoc2023_day23 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day23-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day23 ${BANAN_AOC2023_BIN}/day23
|
||||
DEPENDS aoc2023_day23
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day23)
|
||||
add_dependencies(aoc2023-install aoc2023_day23-install)
|
||||
install(TARGETS aoc2023_day23)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day24 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day24 ${SOURCES})
|
||||
target_compile_options(aoc2023_day24 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day24 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day24 ban)
|
||||
banan_link_library(aoc2023_day24 libc)
|
||||
|
||||
add_dependencies(aoc2023_day24 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day24-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day24 ${BANAN_AOC2023_BIN}/day24
|
||||
DEPENDS aoc2023_day24
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day24)
|
||||
add_dependencies(aoc2023-install aoc2023_day24-install)
|
||||
install(TARGETS aoc2023_day24)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day25 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day25 ${SOURCES})
|
||||
target_compile_options(aoc2023_day25 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day25 PUBLIC libc ban)
|
||||
banan_link_library(aoc2023_day25 ban)
|
||||
banan_link_library(aoc2023_day25 libc)
|
||||
|
||||
add_dependencies(aoc2023_day25 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day25-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day25 ${BANAN_AOC2023_BIN}/day25
|
||||
DEPENDS aoc2023_day25
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day25)
|
||||
add_dependencies(aoc2023-install aoc2023_day25-install)
|
||||
install(TARGETS aoc2023_day25)
|
||||
|
||||
@@ -21,6 +21,9 @@ using u64 = uint64_t;
|
||||
|
||||
struct Component
|
||||
{
|
||||
Component(BAN::String name)
|
||||
: name(BAN::move(name))
|
||||
{}
|
||||
BAN::String name;
|
||||
BAN::Vector<BAN::String> connections;
|
||||
};
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day3 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day3 ${SOURCES})
|
||||
target_compile_options(aoc2023_day3 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day3 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day3 ban)
|
||||
banan_link_library(aoc2023_day3 libc)
|
||||
|
||||
add_dependencies(aoc2023_day3 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day3-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day3 ${BANAN_AOC2023_BIN}/day3
|
||||
DEPENDS aoc2023_day3
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day3)
|
||||
add_dependencies(aoc2023-install aoc2023_day3-install)
|
||||
install(TARGETS aoc2023_day3)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day4 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day4 ${SOURCES})
|
||||
target_compile_options(aoc2023_day4 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day4 PUBLIC libc ban)
|
||||
banan_link_library(aoc2023_day4 ban)
|
||||
banan_link_library(aoc2023_day4 libc)
|
||||
|
||||
add_dependencies(aoc2023_day4 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day4-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day4 ${BANAN_AOC2023_BIN}/day4
|
||||
DEPENDS aoc2023_day4
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day4)
|
||||
add_dependencies(aoc2023-install aoc2023_day4-install)
|
||||
install(TARGETS aoc2023_day4)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day5 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day5 ${SOURCES})
|
||||
target_compile_options(aoc2023_day5 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day5 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day5 ban)
|
||||
banan_link_library(aoc2023_day5 libc)
|
||||
|
||||
add_dependencies(aoc2023_day5 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day5-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day5 ${BANAN_AOC2023_BIN}/day5
|
||||
DEPENDS aoc2023_day5
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day5)
|
||||
add_dependencies(aoc2023-install aoc2023_day5-install)
|
||||
install(TARGETS aoc2023_day5)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day6 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day6 ${SOURCES})
|
||||
target_compile_options(aoc2023_day6 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day6 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day6 ban)
|
||||
banan_link_library(aoc2023_day6 libc)
|
||||
|
||||
add_dependencies(aoc2023_day6 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day6-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day6 ${BANAN_AOC2023_BIN}/day6
|
||||
DEPENDS aoc2023_day6
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day6)
|
||||
add_dependencies(aoc2023-install aoc2023_day6-install)
|
||||
install(TARGETS aoc2023_day6)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day7 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day7 ${SOURCES})
|
||||
target_compile_options(aoc2023_day7 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day7 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day7 ban)
|
||||
banan_link_library(aoc2023_day7 libc)
|
||||
|
||||
add_dependencies(aoc2023_day7 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day7-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day7 ${BANAN_AOC2023_BIN}/day7
|
||||
DEPENDS aoc2023_day7
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day7)
|
||||
add_dependencies(aoc2023-install aoc2023_day7-install)
|
||||
install(TARGETS aoc2023_day7)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day8 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day8 ${SOURCES})
|
||||
target_compile_options(aoc2023_day8 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day8 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day8 ban)
|
||||
banan_link_library(aoc2023_day8 libc)
|
||||
|
||||
add_dependencies(aoc2023_day8 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day8-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day8 ${BANAN_AOC2023_BIN}/day8
|
||||
DEPENDS aoc2023_day8
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day8)
|
||||
add_dependencies(aoc2023-install aoc2023_day8-install)
|
||||
install(TARGETS aoc2023_day8)
|
||||
|
||||
@@ -1,22 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023_day9 CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023_day9 ${SOURCES})
|
||||
target_compile_options(aoc2023_day9 PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023_day9 PUBLIC libc ban)
|
||||
banan_include_headers(aoc2023_day9 ban)
|
||||
banan_link_library(aoc2023_day9 libc)
|
||||
|
||||
add_dependencies(aoc2023_day9 libc-install ban-install)
|
||||
|
||||
add_custom_target(aoc2023_day9-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day9 ${BANAN_AOC2023_BIN}/day9
|
||||
DEPENDS aoc2023_day9
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023_day9)
|
||||
add_dependencies(aoc2023-install aoc2023_day9-install)
|
||||
install(TARGETS aoc2023_day9)
|
||||
|
||||
@@ -1,20 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(aoc2023-full CXX)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
add_executable(aoc2023-full ${SOURCES})
|
||||
target_compile_options(aoc2023-full PUBLIC -O2 -g)
|
||||
target_link_libraries(aoc2023-full PUBLIC libc)
|
||||
add_executable(aoc2023_full ${SOURCES})
|
||||
banan_include_headers(aoc2023_full ban)
|
||||
banan_link_library(aoc2023_full libc)
|
||||
|
||||
add_custom_target(aoc2023-full-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023-full ${BANAN_AOC2023_BIN}/full
|
||||
DEPENDS aoc2023-full
|
||||
DEPENDS aoc2023_always
|
||||
)
|
||||
|
||||
add_dependencies(aoc2023 aoc2023-full)
|
||||
add_dependencies(aoc2023-install aoc2023-full-install)
|
||||
install(TARGETS aoc2023_full)
|
||||
|
||||
Reference in New Issue
Block a user