1
0
mirror of https://github.com/chylex/Advent-of-Code.git synced 2025-09-15 15:32:11 +02:00

Compare commits

..

29 Commits

Author SHA1 Message Date
04e2c35138 Add 2022 - Day 8 - Part 2 2022-12-27 13:50:18 +01:00
c83c50eeaf Add 2022 - Day 8 - Part 1 2022-12-26 14:00:21 +01:00
c90b93c155 Add 2022 - Day 7 - Part 2 2022-12-26 11:06:51 +01:00
2456d3d7a0 Add 2022 - Day 7 - Part 1 2022-12-26 11:02:07 +01:00
20f7f156e0 Add 2022 - Day 6 - Part 2 2022-12-26 07:59:39 +01:00
cb9a50198d Add 2022 - Day 6 - Part 1 2022-12-26 07:56:55 +01:00
638c5c88b6 Add 2022 - Day 5 - Part 2 2022-12-14 10:45:13 +01:00
94bfc58598 Add 2022 - Day 5 - Part 1 2022-12-12 23:08:42 +01:00
ca7b829db3 Add 2022 - Day 4 - Part 2 2022-12-12 22:31:47 +01:00
4304efd023 Add 2022 - Day 4 - Part 1 2022-12-12 22:24:51 +01:00
c2b2da271b Refactor 2017 code 2022-12-05 03:21:16 +01:00
dbd9e028e6 Add 2017 - Day 2 - Part 2 2022-12-04 16:40:45 +01:00
7bd6da2c29 Add 2017 - Day 2 - Part 1 2022-12-04 16:26:33 +01:00
5bb9f0af43 Add 2017 - Day 1 - Part 2 2022-12-04 15:54:05 +01:00
dff04944f6 Add 2017 - Day 1 - Part 1 2022-12-04 15:52:40 +01:00
0d85994dc4 Add folder for PostgreSQL scripts for 2017 & update README 2022-12-04 15:45:52 +01:00
c81f9a4d99 Add 2022 - Day 3 - Part 2 2022-12-04 02:43:30 +01:00
eba4d3ff3e Add 2022 - Day 3 - Part 1 2022-12-03 18:25:35 +01:00
db090e6176 Add 2022 - Day 2 - Part 2 2022-12-03 16:08:52 +01:00
84975e8708 Add 2022 - Day 2 - Part 1 2022-12-03 15:43:52 +01:00
91339c9d02 Add 2022 - Day 1 - Part 2 2022-12-03 13:32:12 +01:00
fb795c2a38 Add 2022 - Day 1 - Part 1 2022-12-03 13:28:29 +01:00
0fd3573077 Add folder for Python scripts for 2022 & update README 2022-12-03 13:28:29 +01:00
c199556965 Improve README 2022-12-03 13:28:29 +01:00
f4b90f89e8 Move and rename input files 2022-12-03 04:51:10 +01:00
4407184536 Add .gitattributes to force LF 2022-12-03 01:09:07 +01:00
ee22516eb6 Restructure project configuration (2015) 2022-12-03 01:07:43 +01:00
c4d7d26bfd Restructure project configuration (2020) 2022-12-03 00:55:38 +01:00
9e3e084c76 Restructure project configuration (2021) 2022-12-02 23:49:35 +01:00
114 changed files with 8826 additions and 231 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
* text=auto eol=lf

12
.gitignore vendored
View File

@@ -1,12 +0,0 @@
/.gradle/
/build/
/.idea/compiler.xml
/.idea/dictionaries
/.idea/encodings.xml
/.idea/gradle.xml
/.idea/inspectionProfiles/
/.idea/jarRepositories.xml
/.idea/modules.xml
/.idea/vcs.xml
/.idea/*.iml

3
.idea/.gitignore generated vendored
View File

@@ -1,3 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml

1
.idea/.name generated
View File

@@ -1 +0,0 @@
AdventOfCode

34
.idea/misc.xml generated
View File

@@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$/2015">
<contentRoot DIR="$PROJECT_DIR$" />
</component>
<component name="CidrRootsConfiguration">
<sourceRoots>
<file path="$PROJECT_DIR$/2015" />
<file path="$PROJECT_DIR$/2020" />
</sourceRoots>
<excludeRoots>
<file path="$PROJECT_DIR$/.gradle" />
<file path="$PROJECT_DIR$/2020/target" />
<file path="$PROJECT_DIR$/2021" />
<file path="$PROJECT_DIR$/build" />
<file path="$PROJECT_DIR$/gradle" />
</excludeRoots>
</component>
<component name="CodeInsightWorkspaceSettings">
<option name="optimizeImportsOnTheFly" value="true" />
</component>
<component name="ComposerSettings">
<execution />
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="JsFlowSettings">
<service-enabled>true</service-enabled>
<exe-path />
<other-services-enabled>true</other-services-enabled>
<auto-save>true</auto-save>
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="7.4" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK" />
</project>

View File

@@ -1,7 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2015 - Day 01" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" WORKING_DIR="file://$PROJECT_DIR$/2015/01" PASS_PARENT_ENVS_2="true" PROJECT_NAME="AOC" TARGET_NAME="AOC_2015_01" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="AOC" RUN_TARGET_NAME="AOC_2015_01">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@@ -1,7 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2015 - Day 02" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" WORKING_DIR="file://$PROJECT_DIR$/2015/02" PASS_PARENT_ENVS_2="true" PROJECT_NAME="AOC" TARGET_NAME="AOC_2015_02" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="AOC" RUN_TARGET_NAME="AOC_2015_02">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@@ -1,7 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2015 - Day 03" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" WORKING_DIR="file://$PROJECT_DIR$/2015/03" PASS_PARENT_ENVS_2="true" PROJECT_NAME="AOC" TARGET_NAME="AOC_2015_03" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="AOC" RUN_TARGET_NAME="AOC_2015_03">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@@ -1,11 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2021 - Day 01" type="JetRunConfigurationType">
<option name="MAIN_CLASS_NAME" value="MainKt" />
<module name="Advent_of_Code.2021-01" />
<shortenClasspath name="NONE" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/2021/01" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@@ -1,11 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2021 - Day 02" type="JetRunConfigurationType">
<option name="MAIN_CLASS_NAME" value="MainKt" />
<module name="Advent_of_Code.2021-02" />
<shortenClasspath name="NONE" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/2021/02" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@@ -1,11 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2021 - Day 03" type="JetRunConfigurationType">
<option name="MAIN_CLASS_NAME" value="MainKt" />
<module name="Advent_of_Code.2021-03" />
<shortenClasspath name="NONE" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/2021/03" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@@ -1,11 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2021 - Day 04" type="JetRunConfigurationType">
<option name="MAIN_CLASS_NAME" value="MainKt" />
<module name="Advent_of_Code.2021-04" />
<shortenClasspath name="NONE" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/2021/04" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

5
2015/.gitignore vendored
View File

@@ -1,2 +1,7 @@
/.idea/*
!/.idea/cmake.xml
!/.idea/misc.xml
!/.idea/runConfigurations
/cmake-build-debug/
/cmake-build-release/

12
2015/.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
<component name="CidrRootsConfiguration">
<sourceRoots>
<file path="$PROJECT_DIR$/01" />
<file path="$PROJECT_DIR$/02" />
<file path="$PROJECT_DIR$/03" />
<file path="$PROJECT_DIR$/utils" />
</sourceRoots>
</component>
</project>

7
2015/.idea/runConfigurations/Day_01.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 01" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" WORKING_DIR="file://$PROJECT_DIR$/01" PASS_PARENT_ENVS_2="true" PROJECT_NAME="2015" TARGET_NAME="2015_01" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="2015" RUN_TARGET_NAME="2015_01">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

7
2015/.idea/runConfigurations/Day_02.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 02" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" WORKING_DIR="file://$PROJECT_DIR$/02" PASS_PARENT_ENVS_2="true" PROJECT_NAME="2015" TARGET_NAME="2015_02" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="2015" RUN_TARGET_NAME="2015_02">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

7
2015/.idea/runConfigurations/Day_03.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 03" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" WORKING_DIR="file://$PROJECT_DIR$/03" PASS_PARENT_ENVS_2="true" PROJECT_NAME="2015" TARGET_NAME="2015_03" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="2015" RUN_TARGET_NAME="2015_03">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@@ -1,4 +1,4 @@
set(PROJECT_NAME AOC_2015_01)
set(PROJECT_NAME 2015_01)
project(${PROJECT_NAME} C ASM_NASM)

View File

@@ -1,4 +1,4 @@
set(PROJECT_NAME AOC_2015_02)
set(PROJECT_NAME 2015_02)
project(${PROJECT_NAME} C ASM_NASM)

View File

@@ -1,4 +1,4 @@
set(PROJECT_NAME AOC_2015_03)
set(PROJECT_NAME 2015_03)
project(${PROJECT_NAME} C ASM_NASM)

View File

@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.20)
project(AOC)
project(2015)
enable_language(ASM_NASM)

View File

@@ -1,5 +1,5 @@
#ifndef ADVENTOFCODE_BENCHMARK_H
#define ADVENTOFCODE_BENCHMARK_H
#ifndef INC_2015_BENCHMARK_H
#define INC_2015_BENCHMARK_H
#include "stdio.h"
@@ -64,4 +64,4 @@ void runBenchmark(const entryPointCallback ep, char* input) {
#undef BENCHMARK_RUNS
#endif //ADVENTOFCODE_BENCHMARK_H
#endif //INC_2015_BENCHMARK_H

View File

@@ -1,5 +1,5 @@
#ifndef ADVENTOFCODE_FILE_H
#define ADVENTOFCODE_FILE_H
#ifndef INC_2015_FILE_H
#define INC_2015_FILE_H
#include "stdio.h"
#include "stdlib.h"
@@ -65,4 +65,4 @@ char* readFile(const char* filename) {
return contents;
}
#endif //ADVENTOFCODE_FILE_H
#endif //INC_2015_FILE_H

View File

@@ -16,7 +16,7 @@ extern void print(const char *format, ...) {
}
int main(void) {
char *input = readFile("input/1.txt");
char *input = readFile("input.txt");
if (input == NULL) {
return 1;

2
2017/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/.idea/*
!/.idea/runConfigurations

1
2017/01/input.txt Normal file
View File

@@ -0,0 +1 @@
494751136895345894732582362629576539599184296195318162664695189393364372585778868512194863927652788149779748657989318645936221887731542718562643272683862627537378624843614831337441659741281289638765171452576466381314558821636595394981788588673443769343597851883955668818165723174939893841654914556681324133667446412138511724424292394454166623639872425168644336248217213826339741267546823779383343362789527461579565822966859349777937921933694912369552152772735167832762563719664315456987186713541153781499646178238762644186484381142249926194743713139262596264878458636595896487362658672224346241358667234115974528626523648311919886566497837217169673923935143386823757293148719377821517314629812886912412829924484513493885672343964151252433622341141661523814465991516961684511941471572895453711624986269342398786175846925783918686856442684489873327497698963658862856336682422797551251489126661954848572297228765445646745256499679451426358865477844467458533962981852292513358871483321161973583245698763531598395467675529181496911117769834127516441369261275244225978893617456524385518493112272169767775861256649728253754964675812534546226295535939697352141217337346738553495616832783757866928174519145357234834584788253893618549484385733283627199445369658339175644484859385884574943219267922729967571943843794565736975716174727852348441254492886794362934343868643337828637454277582276962353246357835493338372219824371517526474283541714897994127864461433627894831268659336264234436872715374727211764167739169341999573855627775114848275268739159272518673316753672995297888734844388928439859359992475637439771269232916542385876779616695129412366735112593669719335783511355773814685491876721452994714318863716542473187246351548626157775143333161422867924437526253865859969947366972895674966845993244925218766937543487875485647329995285821739359369998935331986126873726737672159265827566443794515755939813676194755474477224152139987944419463371386499841415227734673733555261543871359797796529847861748979527579985757964742667473767269248335229836818297477665453189662485548925521497365877771665365728224394427883312135322325169141784

28
2017/01/main.sql Normal file
View File

@@ -0,0 +1,28 @@
CALL aoc_load_file_lines('01');
CREATE TABLE "01.characters" AS
SELECT r.row - 1 AS index, r.character
FROM "01.input"
CROSS JOIN REGEXP_SPLIT_TO_TABLE(input, '') WITH ORDINALITY AS r(character, row);
CREATE UNIQUE INDEX "01.characters.index" ON "01.characters" (index);
UPDATE "01.output"
SET result = (
SELECT SUM(a.character::INT) AS result
FROM "01.characters" a
INNER JOIN "01.characters" b ON a.index = (b.index + 1) % (SELECT MAX(index) + 1 FROM "01.characters")
WHERE a.character = b.character
)
WHERE part = 1;
UPDATE "01.output"
SET result = (
SELECT SUM(a.character::INT) AS result
FROM "01.characters" a
INNER JOIN "01.characters" b ON a.index = (b.index + (SELECT (MAX(index) + 1) / 2 FROM "01.characters")) % (SELECT MAX(index) + 1 FROM "01.characters")
WHERE a.character = b.character
)
WHERE part = 2;
SELECT aoc_results('01')

16
2017/02/input.txt Normal file
View File

@@ -0,0 +1,16 @@
414 382 1515 319 83 1327 116 391 101 749 1388 1046 1427 105 1341 1590
960 930 192 147 932 621 1139 198 865 820 597 165 232 417 19 183
3379 987 190 3844 1245 1503 3151 3349 2844 4033 175 3625 3565 179 3938 184
116 51 32 155 102 92 65 42 48 91 74 69 52 89 20 143
221 781 819 121 821 839 95 117 626 127 559 803 779 543 44 369
199 2556 93 1101 122 124 2714 625 2432 1839 2700 2636 118 2306 1616 2799
56 804 52 881 1409 47 246 1368 1371 583 49 1352 976 400 1276 1240
1189 73 148 1089 93 76 3205 3440 3627 92 853 95 3314 3551 2929 3626
702 169 492 167 712 488 357 414 187 278 87 150 19 818 178 686
140 2220 1961 1014 2204 2173 1513 2225 443 123 148 580 833 1473 137 245
662 213 1234 199 1353 1358 1408 235 917 1395 1347 194 565 179 768 650
119 137 1908 1324 1085 661 1557 1661 1828 1865 432 110 658 821 1740 145
1594 222 4140 963 209 2782 180 2591 4390 244 4328 3748 4535 192 157 3817
334 275 395 128 347 118 353 281 430 156 312 386 160 194 63 141
146 1116 153 815 2212 2070 599 3018 2640 47 125 2292 165 2348 2694 184
1704 2194 1753 146 2063 1668 1280 615 163 190 2269 1856 150 158 2250 2459

19
2017/02/main.sql Normal file
View File

@@ -0,0 +1,19 @@
CALL aoc_load_file_lines('02');
CALL aoc_input_extract_cells('02', '\t', 'INT');
UPDATE "02.output" SET result = (
SELECT SUM(row.difference)
FROM (
SELECT MAX(value::INT) - MIN(value::INT) AS difference
FROM "02.input.cells"
GROUP BY row
) row
) WHERE part = 1;
UPDATE "02.output" SET result = (
SELECT SUM(a.value / b.value)
FROM "02.input.cells" a
INNER JOIN "02.input.cells" b ON a.row = b.row AND a.value != b.value AND a.value % b.value = 0
) WHERE part = 2;
SELECT aoc_results('02');

19
2017/docker-compose.yml Normal file
View File

@@ -0,0 +1,19 @@
version: "3.9"
services:
postgres:
image: postgres:15
container_name: "aoc-2017-postgres"
ports:
- "127.0.0.1:2017:5432"
volumes:
- postgres:/var/lib/postgresql/data
- .:/aoc:ro
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: aoc2017
POSTGRES_DB: postgres
volumes:
postgres:
name: "aoc-2017-postgres"

55
2017/utils/procedures.sql Normal file
View File

@@ -0,0 +1,55 @@
CREATE OR REPLACE PROCEDURE aoc_drop_tables(day TEXT) AS
$$
DECLARE
row RECORD;
BEGIN
FOR row IN
SELECT table_name
FROM information_schema.tables
WHERE table_name LIKE (day || '.%') AND table_schema = CURRENT_SCHEMA()
LOOP
EXECUTE FORMAT('DROP TABLE %I CASCADE', row.table_name);
END LOOP;
END
$$ LANGUAGE plpgsql;
CREATE OR REPLACE PROCEDURE aoc_setup_tables(day TEXT, input_columns TEXT) AS
$$
BEGIN
CALL aoc_drop_tables(day);
EXECUTE FORMAT('CREATE TABLE %I (%s)', day || '.input', input_columns);
EXECUTE FORMAT('CREATE TABLE %I (part INT, result TEXT NULL)', day || '.output');
EXECUTE FORMAT('INSERT INTO %I (part) VALUES (1), (2)', day || '.output');
END
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION aoc_results(day TEXT)
RETURNS TABLE (
RESULT TEXT
)
STABLE
ROWS 2
AS
$$
BEGIN
RETURN QUERY EXECUTE FORMAT('SELECT result FROM %I ORDER BY part', day || '.output');
END
$$ LANGUAGE plpgsql;
CREATE OR REPLACE PROCEDURE aoc_load_file_lines(day TEXT) AS
$$
BEGIN
CALL aoc_setup_tables(day, 'input TEXT');
EXECUTE FORMAT('COPY %I FROM ''/aoc/%s/input.txt'' WITH DELIMITER E''\1''', day || '.input', day);
END
$$ LANGUAGE plpgsql;
CREATE OR REPLACE PROCEDURE aoc_input_extract_cells(day TEXT, delimiter TEXT, value_type TEXT) AS
$$
BEGIN
EXECUTE FORMAT('CREATE TABLE %I AS
SELECT input.row, cell.col, cell.value::%s
FROM (SELECT ROW_NUMBER() OVER () AS row, input AS line FROM %I) input
CROSS JOIN REGEXP_SPLIT_TO_TABLE(input.line, %L) WITH ORDINALITY AS cell(value, col)', day || '.input.cells', value_type, day || '.input', delimiter);
END
$$ LANGUAGE plpgsql;

3
2020/.gitignore vendored
View File

@@ -1 +1,4 @@
/.idea/*
!/.idea/runConfigurations
/target/

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2020 - Day 01" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<configuration default="false" name="Day 01" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<option name="command" value="run --bin 01" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/2020/01" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/01" />
<option name="channel" value="DEFAULT" />
<option name="requiredFeatures" value="true" />
<option name="allFeatures" value="false" />
<option name="emulateTerminal" value="false" />
<option name="withSudo" value="false" />
<option name="buildTarget" value="REMOTE" />
<option name="backtrace" value="SHORT" />
<envs />
<option name="isRedirectInput" value="false" />

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2020 - Day 02" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<configuration default="false" name="Day 02" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<option name="command" value="run --bin 02" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/2020/02" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/02" />
<option name="channel" value="DEFAULT" />
<option name="requiredFeatures" value="true" />
<option name="allFeatures" value="false" />
<option name="emulateTerminal" value="false" />
<option name="withSudo" value="false" />
<option name="buildTarget" value="REMOTE" />
<option name="backtrace" value="SHORT" />
<envs />
<option name="isRedirectInput" value="false" />

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2020 - Day 03" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<configuration default="false" name="Day 03" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<option name="command" value="run --bin 03" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/2020/03" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/03" />
<option name="channel" value="DEFAULT" />
<option name="requiredFeatures" value="true" />
<option name="allFeatures" value="false" />
<option name="emulateTerminal" value="false" />
<option name="withSudo" value="false" />
<option name="buildTarget" value="REMOTE" />
<option name="backtrace" value="SHORT" />
<envs />
<option name="isRedirectInput" value="false" />

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2020 - Day 04" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<configuration default="false" name="Day 04" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<option name="command" value="run --bin 04" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/2020/04" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/04" />
<option name="channel" value="DEFAULT" />
<option name="requiredFeatures" value="true" />
<option name="allFeatures" value="false" />
<option name="emulateTerminal" value="false" />
<option name="withSudo" value="false" />
<option name="buildTarget" value="REMOTE" />
<option name="backtrace" value="SHORT" />
<envs />
<option name="isRedirectInput" value="false" />

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2020 - Day 05" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<configuration default="false" name="Day 05" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<option name="command" value="run --bin 05" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/2020/05" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/05" />
<option name="channel" value="DEFAULT" />
<option name="requiredFeatures" value="true" />
<option name="allFeatures" value="false" />
<option name="emulateTerminal" value="false" />
<option name="withSudo" value="false" />
<option name="buildTarget" value="REMOTE" />
<option name="backtrace" value="SHORT" />
<envs />
<option name="isRedirectInput" value="false" />

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2020 - Day 06" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<configuration default="false" name="Day 06" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<option name="command" value="run --bin 06" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/2020/06" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/06" />
<option name="channel" value="DEFAULT" />
<option name="requiredFeatures" value="true" />
<option name="allFeatures" value="false" />
<option name="emulateTerminal" value="false" />
<option name="withSudo" value="false" />
<option name="buildTarget" value="REMOTE" />
<option name="backtrace" value="SHORT" />
<envs />
<option name="isRedirectInput" value="false" />

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2020 - Day 07" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<configuration default="false" name="Day 07" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<option name="command" value="run --bin 07" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/2020/07" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/07" />
<option name="channel" value="DEFAULT" />
<option name="requiredFeatures" value="true" />
<option name="allFeatures" value="false" />
<option name="emulateTerminal" value="false" />
<option name="withSudo" value="false" />
<option name="buildTarget" value="REMOTE" />
<option name="backtrace" value="SHORT" />
<envs />
<option name="isRedirectInput" value="false" />

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2020 - Day 08" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<configuration default="false" name="Day 08" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
<option name="command" value="run --bin 08" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/2020/08" />
<option name="workingDirectory" value="file://$PROJECT_DIR$/08" />
<option name="channel" value="DEFAULT" />
<option name="requiredFeatures" value="true" />
<option name="allFeatures" value="false" />
<option name="emulateTerminal" value="false" />
<option name="withSudo" value="false" />
<option name="buildTarget" value="REMOTE" />
<option name="backtrace" value="SHORT" />
<envs />
<option name="isRedirectInput" value="false" />

View File

@@ -1,3 +1,5 @@
#![allow(dead_code)]
use std::error::Error;
use std::fmt::{Debug, Display, Formatter};
use std::fs::File;
@@ -6,11 +8,10 @@ use std::io::{BufRead, BufReader};
use std::str::FromStr;
pub fn read_input_lines() -> Result<Vec<String>, io::Error> {
let file = File::open("input/1.txt")?;
let file = File::open("input.txt")?;
return BufReader::new(file).lines().collect();
}
#[allow(dead_code)]
pub fn parse_input_lines<T : FromStr>() -> Result<Vec<T>, Box<dyn Error>> where <T as FromStr>::Err : Into<Box<dyn Error>> {
return read_input_lines()?.iter().map(|line| line.parse::<T>()).collect::<Result<Vec<T>, T::Err>>().map_err(Into::into);
}

5
2021/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
/.idea/*
!/.idea/runConfigurations
/.gradle/
/build/

23
2021/.idea/runConfigurations/Day_01.xml generated Normal file
View File

@@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 01" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="--quiet" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="01" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

23
2021/.idea/runConfigurations/Day_02.xml generated Normal file
View File

@@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 02" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="--quiet" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="02" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

23
2021/.idea/runConfigurations/Day_03.xml generated Normal file
View File

@@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 03" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="--quiet" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="03" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

23
2021/.idea/runConfigurations/Day_04.xml generated Normal file
View File

@@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 04" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="--quiet" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="04" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

23
2021/.idea/runConfigurations/Day_05.xml generated Normal file
View File

@@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 05" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="--quiet" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="05" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

23
2021/.idea/runConfigurations/Day_06.xml generated Normal file
View File

@@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 06" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="--quiet" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="06" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

23
2021/.idea/runConfigurations/Day_07.xml generated Normal file
View File

@@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 07" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="--quiet" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="07" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

23
2021/.idea/runConfigurations/Day_08.xml generated Normal file
View File

@@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 08" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="--quiet" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="08" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

View File

@@ -1,7 +1,7 @@
import java.io.File
fun main() {
val lines = File("input/1.txt").readLines().map(String::toInt)
val lines = File("input.txt").readLines().map(String::toInt)
val totalIncreases = lines.windowed(2).count { it[1] > it[0] }
val windowedIncreases = lines.windowed(3).map(List<Int>::sum).windowed(2).count { it[1] > it[0] }

View File

@@ -1,7 +1,7 @@
import java.io.File
fun main() {
val lines = File("input/1.txt").readLines()
val lines = File("input.txt").readLines()
val directions = lines.map { line -> line.split(' ', limit = 2).let { it[0] to it[1].toInt() } }
println("Part 1:")

View File

@@ -1,7 +1,7 @@
import java.io.File
fun main() {
val lines = File("input/1.txt").readLines().filter(String::isNotEmpty)
val lines = File("input.txt").readLines().filter(String::isNotEmpty)
val input = Input(lines)
part1(input)
part2(input)

View File

@@ -3,7 +3,7 @@ import java.io.File
const val SIZE = 5
fun main() {
val lineIterator = File("input/1.txt").readLines().iterator()
val lineIterator = File("input.txt").readLines().iterator()
val numbersToDraw = lineIterator.next().split(',').map(String::toInt).toList()
val boards = mutableListOf<Board>()

View File

@@ -6,7 +6,7 @@ import kotlin.system.measureTimeMillis
fun main() {
val lineRegex = Regex("^(\\d+),(\\d+) -> (\\d+),(\\d+)$")
val lines = File("input/1.txt").readLines()
val lines = File("input.txt").readLines()
.mapNotNull(lineRegex::matchEntire)
.map { it.groupValues.takeLast(4).map(String::toInt) }
.map { Line(it[0], it[1], it[2], it[3]) }
@@ -15,7 +15,7 @@ fun main() {
println("(Took ${measureTimeMillis { part2(lines) }} ms)")
}
@Suppress("ProtectedInFinal", "MemberVisibilityCanBePrivate")
@Suppress("MemberVisibilityCanBePrivate")
data class Line(val x1: Int, val y1: Int, val x2: Int, val y2: Int) {
val minX = min(x1, x2)
val minY = min(y1, y2)

View File

@@ -3,7 +3,7 @@ import java.math.BigInteger
import kotlin.system.measureTimeMillis
fun main() {
val initialConfiguration = File("input/1.txt").readLines()
val initialConfiguration = File("input.txt").readLines()
.single()
.split(',')
.map(String::toInt)

View File

@@ -2,7 +2,7 @@ import java.io.File
import kotlin.math.abs
fun main() {
val originalPositions = File("input/1.txt").readLines().single().split(',').map(String::toInt).toIntArray()
val originalPositions = File("input.txt").readLines().single().split(',').map(String::toInt).toIntArray()
val p1 = originalPositions.minOrNull() ?: return
val p2 = originalPositions.maxOrNull() ?: return

View File

@@ -9,7 +9,7 @@ import java.io.File
import java.util.EnumSet
fun main() {
val records = File("input/1.txt").readLines().map { line ->
val records = File("input.txt").readLines().map { line ->
line.split(" | ", limit = 2).map { it.split(' ') }.let { Record(it[0], it[1]) }
}
@@ -19,7 +19,7 @@ fun main() {
fun part1(records: List<Record>) {
@Suppress("ConvertLambdaToReference")
val segmentCountToDigits = DIGITS
val segmentCountToDigits = allDigits
.map { it.value to it.positions.size }
.groupBy { it.second }
.mapValues { it.value.map { e -> e.first } }
@@ -48,7 +48,7 @@ enum class Position {
BOTTOM
}
private val DIGITS = listOf(
private val allDigits = listOf(
Digit(0, EnumSet.of(TOP, TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT, BOTTOM)),
Digit(1, EnumSet.of(TOP_RIGHT, BOTTOM_RIGHT)),
Digit(2, EnumSet.of(TOP, TOP_RIGHT, MIDDLE, BOTTOM_LEFT, BOTTOM)),
@@ -124,7 +124,7 @@ data class Record(val patterns: List<String>, val output: List<String>) {
return output.fold(0) { total, digit ->
val positions = digit.map(mapping::getValue).toSet()
val value = DIGITS.first { it.positions == positions }.value
val value = allDigits.first { it.positions == positions }.value
(total * 10) + value
}

52
2021/build.gradle.kts Normal file
View File

@@ -0,0 +1,52 @@
@file:Suppress("ConvertLambdaToReference")
plugins {
kotlin("jvm") version "1.6.0"
idea
}
group = "com.chylex.adventofcode"
version = "1.0"
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib"))
}
idea {
module.excludeDirs.add(file("gradle"))
}
sourceSets {
fun make(day: Int) {
val paddedDay = day.toString().padStart(2, '0')
val sourceFolder = file(paddedDay)
if (!sourceFolder.exists()) {
sourceFolder.mkdir()
sourceFolder.resolve("main.kt").writeText("fun main() {\n\t\n}")
sourceFolder.resolve("input.txt").writeText("")
}
create(paddedDay) {
java.setSrcDirs(listOf(sourceFolder))
resources.setSrcDirs(listOf(sourceFolder))
resources.include("*.txt")
}
tasks.register<JavaExec>(paddedDay) {
group = "run"
mainClass.set("MainKt")
workingDir = sourceFolder
classpath = sourceSets[paddedDay].runtimeClasspath
}
}
for (day in 1..8) {
make(day)
}
}

View File

View File

1
2021/settings.gradle.kts Normal file
View File

@@ -0,0 +1 @@
rootProject.name = "2021"

2
2022/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/.idea/*
!/.idea/runConfigurations

24
2022/.idea/runConfigurations/Day_01.xml generated Normal file
View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 01" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/01" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/01/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

24
2022/.idea/runConfigurations/Day_02.xml generated Normal file
View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 02" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/02" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/02/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

24
2022/.idea/runConfigurations/Day_03.xml generated Normal file
View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 03" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/03" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/03/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

24
2022/.idea/runConfigurations/Day_04.xml generated Normal file
View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 04" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/04" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/04/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

24
2022/.idea/runConfigurations/Day_05.xml generated Normal file
View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 05" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/05" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/05/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

24
2022/.idea/runConfigurations/Day_06.xml generated Normal file
View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 06" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/06" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/06/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

24
2022/.idea/runConfigurations/Day_07.xml generated Normal file
View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 07" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/07" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/07/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

24
2022/.idea/runConfigurations/Day_08.xml generated Normal file
View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 08" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/08" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/08/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

2262
2022/01/input.txt Normal file

File diff suppressed because it is too large Load Diff

17
2022/01/main.py Normal file
View File

@@ -0,0 +1,17 @@
from itertools import groupby
from utils.input import read_input_lines
lines = read_input_lines()
groups = [list(group) for is_group, group in groupby(lines, lambda x: x != '') if is_group]
carrying_calories = ((int(item) for item in group) for group in groups)
carrying_total_calories = [sum(group) for group in carrying_calories]
most_calories_carried = max(carrying_total_calories)
print(f"Most calories carried: {most_calories_carried}")
top3_most_calories_carried = sorted(carrying_total_calories, reverse=True)[:3]
top3_most_calories_carried_total = sum(top3_most_calories_carried)
print(f"Total calories carried by the top 3: {top3_most_calories_carried_total}")

2500
2022/02/input.txt Normal file

File diff suppressed because it is too large Load Diff

88
2022/02/main.py Normal file
View File

@@ -0,0 +1,88 @@
from enum import Enum
from typing import Callable
from utils.input import read_input_lines
class Move(Enum):
ROCK = 1
PAPER = 2
SCISSORS = 3
def __init__(self, points: int):
self.points = points
class Outcome(Enum):
LOSS = 0
DRAW = 3
WIN = 6
def __init__(self, points: int):
self.points = points
def play_game_from_line(line: str, strategy: Callable[[Move, str], Move]) -> int:
(opponent_char, response_char) = line.split(" ", maxsplit = 2)
match opponent_char:
case "A": opponent = Move.ROCK
case "B": opponent = Move.PAPER
case "C": opponent = Move.SCISSORS
case _: raise ValueError(f"Invalid opponent move: {opponent_char}")
response = strategy(opponent, response_char)
outcome = play_game(response, opponent)
return response.points + outcome.points
def play_game(me: Move, opponent: Move) -> Outcome:
if me == opponent:
return Outcome.DRAW
elif me == Move.ROCK:
return Outcome.WIN if opponent == Move.SCISSORS else Outcome.LOSS
elif me == Move.PAPER:
return Outcome.WIN if opponent == Move.ROCK else Outcome.LOSS
elif me == Move.SCISSORS:
return Outcome.WIN if opponent == Move.PAPER else Outcome.LOSS
else:
raise ValueError(f"Invalid move: {me}")
# noinspection PyShadowingNames
def play_games_from_all_lines(lines: list[str], strategy) -> int:
return sum(play_game_from_line(line, strategy) for line in lines)
def strategy_response_char_determines_move(_: Move, response_char: str) -> Move:
match response_char:
case "X": return Move.ROCK
case "Y": return Move.PAPER
case "Z": return Move.SCISSORS
case _: raise ValueError(f"Invalid response move: {response_char}")
def strategy_response_char_determines_outcome(opponent: Move, response_char: str) -> Move:
match response_char:
case "Y": # Draw
return opponent
case "Z": # Win
match opponent:
case Move.ROCK: return Move.PAPER
case Move.PAPER: return Move.SCISSORS
case Move.SCISSORS: return Move.ROCK
case "X": # Lose
match opponent:
case Move.ROCK: return Move.SCISSORS
case Move.PAPER: return Move.ROCK
case Move.SCISSORS: return Move.PAPER
case _:
raise ValueError(f"Invalid response move: {response_char}")
lines = read_input_lines()
first_strategy_score = play_games_from_all_lines(lines, strategy_response_char_determines_move)
second_strategy_score = play_games_from_all_lines(lines, strategy_response_char_determines_outcome)
print(f"First strategy score: {first_strategy_score}")
print(f"Second strategy score: {second_strategy_score}")

300
2022/03/input.txt Normal file
View File

@@ -0,0 +1,300 @@
VdzVHmNpdVmBBCpmQLTNfTtMhMJnhFhTTf
FgqsZbqDDFqRrhhJnsnLMTfhJG
bRRRPrRRwSwbDqgjvDZbRbQzpzmQVWCzzBdvQBFCzlWV
GcDdRdvhRssRhGDdShCRtqWjlQzqWgqzNfNjfQWWjt
mwwnnPFwmVrPmJmzfNzqCjQCbgVlgC
nPnHHLrHwmJTrCTJpThBscBSdSLGZvZBvRhZ
RVQQcVlcSRclfZCCCnMJJTSTnC
NdHwjdwjbBBZrrZrbJDZJJ
wmhjGGBGwwmjtjtdPlfRcpVQlhRppVJF
pplbNBPPrppllrFNbpvppSTcwqcWFhTTShhJDTchqd
RGzRfLjjmZmfmwLftTWhStStJWTdWmDm
nfsMjQssnpPvNnrPrw
SjjBgllzlQjBZvlBBgcFbgJHsMhJqbMHPggJbM
hRLRVDdRRWnJqnnHTqMCnH
GRfLddRRpVhNVrWSjwQQzSzcGSBQSc
qMwNqqBdQdnTVBBVVhMVnVFzTHPggTPjGRDzvPTjjmvPDj
sbSrWJpStrtPtRPttzmmDD
pfbJJcbsrcLpWLllsnFmcqcwQncnQQqVNQ
RBTWCMwCwdZThPZcZZ
pVmVpHLFFFHHVgVmvNmHSQNvddlPPzZJMPcdhclhjczLdZMP
vnnNnFStGMRDwWnn
fWDdJTpDJzdBBBdmDSbSRHRwPqbPbHgSbz
slQtQvNsMVvrrgPRgRglnhwWPH
sGMMQFrsjvNMfWmdpfFDFZBf
vnMRMWCMJwWWwwWPjmSdVmLdzvVbLrhL
HsNfDHQlZpNqfQzbLbrqhjLmVdjd
dfDZQsNpstHHHptZDDtZWgngtgBMPMMRwCPtBBGW
HwQwwbwFNWHwHBVFQFLQzRznZnSzcjjjpPbcPpSP
vTfTJsCmsftJZmTSSdPvzdjRSvPdjd
TrGtTJfmGDfDhrhJJJsqrZhDBFLHHLLQWFwwlWBVBBVwgLFD
FFTJRLccQgmTbSsbGm
PBPPqCvCwqwhQQVhQngmVmSgglmGnHbnmb
zqthvtQPBfCCzPwQPtwQzPwNLfNRFNLdLRLFRFFNLFdFdW
nszjQnsPwjznzCCrhJqvjqhmBv
tFWdHGWFGtctlNNpZBBhmqTrrbWqvTBT
dlFtcpHDVVVHFdNGHGpGfQgsPDzSMsQwwPwgLLBQ
TzQqTJGvnnSzqrWTnvfbbcflQcVltfcCMPVM
jFjNZFFJLpFwmBwblcpptcVtfbbVlR
jmmJdBBLNdGDWDDrdzqn
pzddqQmGgbqgGpbJmmdnLZDCRZnZvFlLRZLSlLRT
rVwchcBBMwVBHhHTZCTSGSCRTZlTDr
HtccPfjfBhMtVBGHWpNqJdJdpjNJppWz
WThTWWhtPbZRvvWbbvRTSRMjVRLLgFssgLpVsfSF
JdwrlJcCwfzdqwwjsjzpLMgVsMFgML
lQrwHNGJHClvTmfhBmPQmt
lbRLhcLRpLJzgdGddF
qvhwqDDCVtBDVhfMVGFnzGGzTBnGzGGgFg
VjCwCWCMtjVDtChvQhtffcSmHpNWrrcHZHHZpplWbp
DJVDVdvpmZdPgrCbgbgCJC
lzczcWwwznGhBgPSvTlCrNgqNC
wGzzQhzGGsBBGRBcQwGwnwjmmRHpRfmmMpppMjjHDvLL
HJjJQWjFmmWtFmJTMchghhDwNMhVMWML
SznPSRfRSSPdrrPSShbDVhbLPwcwGGwVNh
ddRfzdRrCrRsZDSnFjspvFvqFqFqTvJt
lflfjQfjvljfbfMLTTDCmHNLNVbL
HSJnRrrJZJssnGRrnsrcqqRnDCLBMhVCTLVLhVNVJBBBhhBm
SsrGGqqnSsWSnnqWHSrPfzftvFdvWlwfQgQwWvzz
nQlsGnFGwwqNJWmJJjpplt
HMTLPTRdvsTCCThDCZdLdLDNNpJBWJbjJMpBmbtNptBWmm
DLCzPzTzZDdLdGSGfSGrsnQGzr
LNPPLHNPHQNQSBFDWDPgggFv
hszfWCWJhrBMsSSBgvFD
GGZjfmJTjmZfrJrZrZJRGwNQnlLNHWjLVjlwdVNHpV
BdNVdTcGVclmTwrTnwPwrHCr
zttBWzfLsCggHPwDrf
szsWSMbWzzbqBbzJjtjsvMzzvdmdVpGllpcRNZZhmRpZcGGc
CjdbMmmmZFnzzgHlttGBVqtBGtsldG
LvPPWNcFSSRslWhBsllT
ppccvLPpcSNwLLwrDNNpLvwJHCMDmbCJbFzgmZZmFgbgnM
TTNRwZqhcTTjsNTTsmrJlvrmmmqqHSrlJH
fLQCCdtcfCDDVbVVQdFbQbdJHMHrJHrHnMllHdMHPrMdln
WfQLQWWDbwRTWcRssN
HQGQWHPDHNjMNQGNWNTWCvZllzqFZqzvvzhCtvFj
DfgwdgfcFpchztvt
sRggdwwVdgmnSTnnDBPBNWLn
WbCZCfTVTTJjSwGdWNDGGw
MMRqggMsqhlmlhrssHgRnRmRvdzdczvdNGNLzScGDrNzrLNc
lRqsnRhmqqQnQpgQMlgDqRfBTJVFbJZQtBCbZQJVZFFb
JnhQcCnmLDsmgmgr
bbMZppRFGGRPfBMMRGMZssTTrLlLfsLlVLdsLsdn
GZGSpPGMZtGGPFFRGBCwhvwjjcnJctvQcvHq
vvrPrHZMGJNRMnqn
BVChWWcDVWsBwCWwGrJNhRLJJnJtLqnq
cjDfcfpWWsfWccBsHgPgrPTdpZbbgggv
GshtVtVtjSCVtVvVGtlVvFZLMvLRZmHmZwbLwZdLdZmR
JWzNDQzjcgJgQBJgzgMwLLHZZcdPwRLwRdHZ
QWTppBWfDrrNBTTfffhFCpVSjnhCGsFtsqSl
nmbCnzHHNzCjCJHJNSCWHLBLrvBrrSGRBDhrDRLrGL
TVtPllwcgdmTRhLQTQhT
fdFtccFcpPmggfdfNzHzCMsbCnWnJs
fMgddvjgRRvjvjVJVdTlZGGtGnrlnqTccNjl
HHSFSWSmmpbBpZlGncrNGbNtrn
WDWBDDBDBDCwPBWBDWNQDgzvVvLRvsVLRwvwdJVLwL
ZSmmvcpsmcJmJvqgBZgZqqtCtZjl
WhDwhFSDgtBFjnFg
rTrSTLWTTHNMNwNrMVddwNNhsmJGQcRsRcJGsJzQJsrzPsPm
GBtLmPsCQqsGqgghZHDzzgLbFz
zjjVTzTlRjRJfznrvrfpnNhFSghbbNFgHrbHZbDHbH
vpfcTJVpcVlfcQPMPCGzCBsd
HMhZNffcPZfNMrzjjFdGcJDjvJ
VSBVVLlSQQmTVSWpSQzDrHzTTvDvFjFdGGzT
mQSplVHWbHLSgWQnShNwsZMZPfbsNCRNCt
MMqvDzLwZzlMqQfdGWPfgPffPglH
ShTcJshsrRdnrdfrrfHp
VVRtFhsCJVJVvwQqDdbDQd
dmnNMlFNvmvljnbpMWNDFQvfQJJGvfPCfHGgQQgcJg
bRVzLBSSTRBRBBrwTrVtRwCfcGHcsJgJgzgGsggHCzcC
ZbtVTTrrqrSSVwhqqwBRwFWMDFNdjdZpWjdDDppjMW
MTzqtbLtwFzJgbHgfbdWWH
VMNBjNVjvNfhhhhfNPhP
jmGMvlDZZnVMtzlwzqqCpwFt
PpzGspGmpPsFLrTnTLzzBg
QCWvfjfWjRPFZgrvqrBvTg
wwNRCNQQVNRWjNWfQbHCCClHGDGJdGhpdhtPGhltDlJD
dhbpGzhllzGlPvnzNcvtNVnc
gcFMsTJDMMwrZqfjjqvvfnPtqJ
sWRWTRFwrTgLDDFWgMsTlpSlpbSCdWWdcbmpChGd
QccdFFFcFbcQPQPHMgpPMp
NJlNSSMLDfJfmlSqHZRNpRqNBRPRPq
LlMmJfvDVVTJSmVMscsCFtvwcjWjrjCj
NVVMGWFSMRVGWSthwhTJWzcJCcJsTs
jqRLqlfRZcmjcCzT
rlRRrdrflpdvPbHpflfPlfDBgBMQpGVQMgpVDGMggBDV
VwRhccRsnQStRhtGQVQVsmjgDgqJdggDjqLDgJlLzmLl
BWFZpWHBNCBCNBzBNvWBpzHZqqlMqgNdlllDdqDgJDLlfDdd
pFbTrrrBzbzTtSwStQnnsrVn
DRfFbFqzbddfPFtsJnJRsnClJRsn
cgjgQgWvSLVQgmWWgWVjVSSSBTltThLnqJssnTCZsTThntZT
qjwpSrmWgcSrGMfdFDFdwHFd
RWjDDWDjDNjjgDtSRRgjcjzFpnzwdFbFNdbFbpnldwFF
vQfPfTQJbZdThTzL
PrBQJQsfQqrrbfmPqMBfJbggjRVgWjttsHRSgRctDjSs
NgqNWqqWWdnJdqpBNFtCmJGCDHttDGDsHsHm
BjvzhRLTrTBQhTMQRjRRcjPGtmDCZZDZSCmmMSSZmVmSSt
vQzRvRzQcPcvfQzRnddppFgnFfWwBFlb
nnPvfvgrtPDHgvvGTRRRPZQGpGCLLV
FlBsBdbllFdfWpbGMCVMZLVbZQ
lhchNcqFsJBlBszztvwHjvzgrzmzffgH
zZhdjTpJJpjmmpPZhvqnnZHqZcggvgMbgv
tFpFQFSFtBGlFNwFfNMnHfbHcnvcvcfvcqrM
GBFlNLSNVGVSSGtQSLLBBlNtphDdzpmmPmTPhRmdzdVCCDdR
rpRCCDLpmnCdJCjn
vMhSFvgsMGLmnmWMmm
wVqFFvwvPPHhFhhgHPwHshpqrDDzqlfRbpftRLblrllr
CRNDzdJCVDWzVgDjdjzRJzWRMTbHsMNZNbZMMbsfhTtMTLMB
wSlwQcSpqPpcqcqFSqpwslsTfZtLhtlthtBHtTMZ
SPGFGFFmpcPGDrWDmjDJVffR
dsmdtJthJphWqHRPnRRsvvnnfR
cDBMDDDlBZglDZTMDfzVvNRrvNPVHzRRTV
PGMCCDClBDDbbFqmmhqQdpWGmmWp
BJjcGhcvCnBdGHsmHSzZDzSDMHmRMQ
qLWPLVrTwWlwwwrfrFfGDNmDQRMbQMzzmmbQLNMM
rVWrFlGqlqwVwVGgWGphnvgBBsnvsjdBnCBnBg
sNNsfBsmcGmgNTcHHSpnTWHnpV
QlrhlrlMglhDQrdFblvFtMdnDWwSHDWWwnTSjLwVDSwwwT
QtdMvltZhbFlPPZbQtQthZQdqCsJJGzBqqCBmCNCqgRCBsfP
SZnQnnHRWRQRVjHnqlJTQPfdlqfJftqG
pDzmbDBFbBLvvzttfdlTTl
gsDLLpcmsSZVwlnRsV
LHsWjwjWqCLsqCHcLsjdLqcdbpMGZPPtBhthbZBpBhMllwPG
VFnVbbvJSfbgphSpGlhRBBSP
JrrTgmFgzvNbrmNnmnvzgTLjCQWDLDCsTjssjqcHLc
QmwwqTqsrdqNNqgtvnVDVcGNNtvv
WBFBpzzjSJBJzJbfntgPzVzcvPnzDf
HcpbHZJBFpjpcSZrZsdRQZrCwrwd
JqmLmbtTWThBTWvWGVSrrVDsSGSG
wwzRzNjNNbsPVPds
jfgQRZwpQclQfffHgpRpwpfTcqtLLqCbbFFFLmbmTTBnFB
fGpcccNNqcctqGMprvMPmbbzFSflSRzPBBlBbS
JCjnjTZTTGPSGmTFPb
ZWHhJjHLDVDgHLLDGjnhctsstwqctNwWqNwwQrtv
sDwQhcwhBDDwrhGsQnRBQHHMHHMNJMZFCFRbCRftMM
zjjlmjqfdTqlWdzTqmLzlzVjNCHJNHNFMFtbJNZgVNMMCCtN
vPTfLmPTLWBsPDnSscnS
ngznwDPPTzhPPDCTQnTTDQBQqHNNrHFVppbbjRFFqFhHqRqr
tZJtcGsGtLLcctRqVBbbqrspbHNq
BmZSvGBMdWPzMPgnnz
MpNWPVNWWZWVVNZHVcvJjgBjJMStMJSjjg
rzdCzrCTTLRCslvJDSjjdScgDm
RLhCQzqTCssThRQzRzwGQrrCFffbfWppNpWNWVcHqZbHpVPp
zQzCVWdSSjCdjpchWcGftflGZcgG
RwnJTJwmvFHTBFmtBccZZfBGMstllM
wwvvHRwqDnHFrmqnrSbQVVQfSbqQjbqjbQ
ttDftStSlftPgSHmJbFwnMnFwzbrLHMMzz
GqTBqhBqBvppBvMMTznrCbCnLwfr
RBjjpZZvvZqGcNhjjpNmDPfDcsgfDfgScsQQQg
rsSFccvBHppHPsvQrSHSprFjnbLGdbzLfbGLLtLjjzLzvl
JWWJhmwwTDTGtnzlhdbtLG
CWNqWRNCwnCJVppQFFFFNrgHBB
MSRVnMjnVRVnPlcsrtMtschgDl
NWHBwJBwBBQCHHqwWQGBNgdrFFtsthcqdltdDsqttq
CCTTGCNCCBfNJNNWbGGnvVzDSRfDRSZvLPSzRn
MpRfjRjWpZzzzRzZSpjzZjTCQcGdHLWNGqdBdcBWWBLccn
lrbrsPQDPQglDtwggcLCqnCdNNdHBLsqNd
blwbJggvgbwlvQbvtgwmvVwRfTzfMMjFVfSFjZjMTSTSzj
ttSGjHWVrwWrWWvhzvhmhDfR
qMBdNNsccQgfDRzRmqlhRl
gQJdfJPdQBsMggMjPrTCLjrGrCrtVT
tGFdlwDwGFdNtStghWWdQFSnTVfCfZhrfVTVCVprnRRhVn
cLsBPQJsQPmbmPHTnRRnHprCVfns
MjmvPqqQjPbQzjLwwDWDSlzSlGSgwl
NSCpFgfbscbZZZwrtgPZJT
zGCQlVGmmQGVqqJwGtHZGrPHHRTH
qQvVmvzmqCdhhjzCQLjljLQMnMDSFWcSfnMfpbfnNcFFbFDN
zFgqjQBmWNlWlfHrHdLc
wnbCpSSZZTJSJSnmdrtHfGtftlcpltpH
ZSwhVPPJgNVmNFzs
WNVJthVHRRfLqpqN
gdCGcCgJBCrgScRLzbjQQLfRRR
SCFdGSFvlhTJsnvW
FFZwFZZwRmFFhHtNLNLGRtsqjLMt
gbDnnrMbMCffMPbPLNjGNlcppNtspp
rgbzrzDrgVgnrBzFWMWmWBwHWHShSB
zjRVjDqzRjvSBnBGGsfsrFsV
fLccLLZpJMctwJWWWJWpJGCwFwsgnngFBPsCnnTBPT
LbJlZNWMtpMlHRNHzdfSDfdj
VGbbnJGSTsVTssTTnVVWMtfBBmvftRHfHBMJJfZp
ghqtrzgPrjdzQCjmZMHfRHZHBmQmmB
gltFtDqFVlTVWlTl
HqNqZDTvNvVTLPSTvzfrfHfdndffwnbdnwrH
MpSJlFcMJmcpFlmClcMcRnWbWtthrnfwnCGrrWfrwC
RjcJJmSFMRQpMRFjMNVvTZjNPPvLTBPBBB
MzClDtlzJzFzNGGm
bjcLRHlTBsFJGmRm
HcPSSfTSpLZLbSwtrtvMnlDCDPCl
gWWgQJCsVhgRLCWsdjpmcBHvfvrrnvCvBB
TqDtztqtStlbNTPtllqZpvmcFHjNjvjNvHvmrrmj
ztPPGZqTPSbJgchGgwRQgQ
wVrdtTqtCCvbNgbNTTDN
mhGzWhGzMGWGrRmbFLBHZRNHNvZvgB
hhGhShpnsSrqVCVSSj
HnlbmGnlHZHnlBcjgwfDVfwLsGLGLDgR
WhWMWTvQPWPLDMFRCDMsVD
QdzJQPSPZqJnJRnZ
TTjTjFBcRBGjwsDTBLmrCftfRVrrCftCVNRP
WnqbJWnnQJhSqVfVPfDnggfrVN
hSlDMllvhbQqllZlSWQdSQTBjsFHBjTwGdHBTBszLzcc
rNWqWDLZWcqFqLLLgQQJnndnQdNzzJVMzd
cPtsPvChtRsGswHPGbwcPcdVnpzvnmBmVvJBJdJVJdzn
PfRfRGtsHsSRftbbbbHhwCCsjZgSTgSZWDTcgDZjLqgqFWLq
BNzPnPJNNMwHJRhBGRWRdjFQddFlFjWd
npbZrgnLSCSrWFjjdlZGlcDF
gqtmmngSbmgHJqfqzNBHBJ
stgzttBPRRRdpSVVpdpS
WJFcLQmJZHcCFLJmcZLMfbpGSWMNpGftSSpMrb
mcvvQvHmtLCJmHZQHZHCDHJJnjqPjjPzwvwhnwPqTjPBzPnB
DDmbbPqgFSbSQPtPQJttrltJ
CRfcnZWmRRhJNVtsVnQlsp
fcBvWvWzcZWCzTTCTTvccFMBHGDdSwGFFbqwFSGSmF
tCRBPCPRjzsJszBmtjmCvSpHcppJpvZdHHHcHZJG
qbrlLnWlQDQDNvmHHHHcrZZvdm
nmnWnnWmgQsCFzFCRVCg
sHMHCDZfcwMcRcLMcZDCRCHMPdJqgjvVdvqgdgfdJbQgvWQb
FFhTzmzGrnmtjTBjBBprrmFtqGgQqvVdPbbgqQQWJvvWJQqV
TrNjrnFSlwNZNlNL
JQGdsdzSzsdFQFSdssnndNlZjNPTJZNljVjTPhVPhT
GgGLfRmHGLhNVjjNTLhV
HvGvwpbHHRwpBrvBgSSzSFndtzndCrsFMd
DptFshMrhDhDwmPPhwSNhmmS
RLdcdRvBjnvRVcvlcLbCcbCwwpGBwSmfZqqPPPPwzmfqZq
VlRLvVjCJLnlpvvRdllLcJJWDHgMMHDDHtWFFDDQgH
SsSdrndpDlCdLftd
VGPVJgmQrVGHHZfwLlfCTmfwlDlT
PcJHcGgcWWbJpjRrphRbFpRn
PdPSMHMLzPPSShBdffMMzMRHQQrpppcqTCQQpCccTGTRCnCQ
vsbWmFbmJmZFFsmsbfpGVrGnWrrpVpnnVcTV
JZslstfZNNSSPdlSMwlM
bLLzRzZLbRqJJrDGGVZdwssDvGQw
FCtNJlTFtmPfldSvDvQFVVsjSv
PmCPHBhhPpWLWgzgHJ
qwmwFHCgPgPPqPwMCrHHFBVVRBttVRRffVfmsjVNNB
WSvcSnvbSWbhcbjlQbvlSQhlfBGcspVVsVGfVscpzpNcpBtN
hJSLhlvlTjPFHMLCCq
bggDpTggncGVVWbQcG
sRvSwwwFBSpFzvRvMFZqmPmMVqmcmPPVqhqqWq
SRBBrFZZwrddBFRjlptnLgDnTggdtd
PPfMcZMflbMQcMllPVfTVMwjWWmZvpWWpWhhjjpdWWww
sDQNnzsnQgDNsFzFqtGjGmWWSpWrGhdpvphdSW
nNQNqLBHLqzDnHgnVJfPJPCRBbfCcJlT
fppppWsjcSDPjjDpGhgwbfTgHTCbHJwbHbTR
rLBdQnvMNMmFPbLqHqTqgLHCgL
nrFznvMNMQdttrBcScsDstWcPGtWSc
lclnRSDnGZtvSwnZDZzhLffqdsCNwTBCBBdNsd
mPjmjmrFFpmQjMJQjlNdlhCsCLsTlNLs
ggmrHHVVQVPJpWrgpWScRvzZzGGRnZvlgzZn
GjGJGQJGcMTVfFDQzNVQzP
mHqdbmmdnJqVzVhRVNzPbR
wStmHJsJsLZLjTvM
QssMbVGdMQjZPjwVwHVZPZClllvgSgvlTgwwSSCgSCtC
WmmFBmJrcFRBFrJJBFchzWCStgCTgvhvTlfsNqfTlvTv
sFzzssDLzrBPjDVVddHMQD
fztDZSGrNrlnbnPTgFFpln
jvvQMMcLcjJmQwHdJvjQJnnbTbRFRphnnpsWgmFRPR
vTLHHCQLHBBjJCSZrVCZtSfSfrft
gHfHffHLjwHrRjLrLRZVMnTdTBsNTBwTVBsBnN
DWPhqhhDhvSGvWPzSzMBQBQVMMBBmvssvQvQ
CDGbqCDbChSbWGrHcHRgbcVcfrLJ
frlTLmtllbbbdpJS
qFjhzjThjHTFGHTjqhhjMzBhVpVpdbBnSJQRpBnVVdbRRQJd
vjWPWjWPPPWgwmfCrNvTvZ

34
2022/03/main.py Normal file
View File

@@ -0,0 +1,34 @@
from itertools import chain, zip_longest
from utils.input import read_input_lines
def middle(iterable) -> int:
return int(len(iterable) / 2)
lines = read_input_lines()
compartments = ((set(line[middle(line):]), set(line[:middle(line)])) for line in lines)
misplaced_item_sets = (set.intersection(*compartment) for compartment in compartments)
misplaced_items = chain.from_iterable(misplaced_item_sets)
def get_priority(item: chr) -> int:
if 'a' <= item <= 'z':
return ord(item) - ord('a') + 1
elif 'A' <= item <= 'Z':
return ord(item) - ord('A') + 27
else:
raise ValueError(f"Invalid item: {item}")
total_misplaced_priority = sum(map(get_priority, misplaced_items))
print(f"Total misplaced item priority: {total_misplaced_priority}")
line_iterator = iter(lines)
rucksacks_per_group = zip_longest(line_iterator, line_iterator, line_iterator)
rucksack_items_per_group = (list(set(item) for item in rucksack) for rucksack in rucksacks_per_group)
common_items_per_group = (set.intersection(*rucksack_items) for rucksack_items in rucksack_items_per_group)
badges = chain.from_iterable(common_items_per_group)
total_badge_priority = sum(map(get_priority, badges))
print(f"Total badge priority: {total_badge_priority}")

Some files were not shown because too many files have changed in this diff Show More