From acff0d9dd374f53821eab616a138aebabc0bde81 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Wed, 4 Dec 2024 11:32:44 -0600 Subject: [PATCH] day4 --- Makefile | 10 +- day2/solution.c | 10 +- day4/input.txt | 140 ++++++++++++++++++++++++++++ day4/input.txt.h | 15 +++ day4/sample1.txt | 10 ++ day4/sample1.txt.h | 15 +++ day4/solution.c | 217 +++++++++++++++++++++++++++++++++++++++++++ input_dreamcast.inc | 10 ++ runner.inc | 3 + runner_dreamcast.cpp | 2 +- solutions.mk | 5 +- 11 files changed, 430 insertions(+), 7 deletions(-) create mode 100644 day4/input.txt create mode 100644 day4/input.txt.h create mode 100644 day4/sample1.txt create mode 100644 day4/sample1.txt.h create mode 100644 day4/solution.c diff --git a/Makefile b/Makefile index 0674557..96b4694 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,14 @@ all: $(patsubst %.cpp,%.elf,$(wildcard example/*.cpp)) +OPT = -Og + include dreamcast/base.mk include dreamcast/common.mk include dreamcast/headers.mk -MAKEFILE_PATH := $(abspath $(firstword $(MAKEFILE_LIST))) -CFLAGS += -I$(dir $(MAKEFILE_PATH)) -CFLAGS += -I$(dir $(MAKEFILE_PATH))dreamcast/ -LIB ?= $(dir $(MAKEFILE_PATH))dreamcast +MAKEFILE_PATH := $(patsubst %/,%,$(dir $(abspath $(firstword $(MAKEFILE_LIST))))) +CFLAGS += -I$(MAKEFILE_PATH) +CFLAGS += -I$(MAKEFILE_PATH)/dreamcast/ +LIB ?= $(MAKEFILE_PATH)/dreamcast include aoc.mk diff --git a/day2/solution.c b/day2/solution.c index 861718e..3ccaa66 100644 --- a/day2/solution.c +++ b/day2/solution.c @@ -28,6 +28,14 @@ static int parse_input(const char * input, int length, struct report * report) return i; } +static int int_sign(int n) +{ + if (n < 0) + return -1; + else + return 1; +} + static bool report_safe(struct report * report, int skip) { int last_sign = 0; @@ -45,7 +53,7 @@ static bool report_safe(struct report * report, int skip) if (abs(rate) < 1 || abs(rate) > 3) return false; // unsafe - int sign = rate / abs(rate); + int sign = int_sign(sign); if (last_sign != 0 && sign != last_sign) return false; // unsafe diff --git a/day4/input.txt b/day4/input.txt new file mode 100644 index 0000000..d423a55 --- /dev/null +++ b/day4/input.txt @@ -0,0 +1,140 @@ +XXASMSMSXMXSMMXMAXMMMAMSAMASMSAMXMAXSXMASMAMMXXMASASXAMAMXSXMMSXSAMXSSXXMXAAXMAXMXXSXMXMMAAMMMMMMMMMMXXMSMSSSMXAAMAMMMSAMXXXXSMSAXMMXXMASMSS +ASMMAAAMAMASAXSSMMSASAMXAAAAXXXMAXXAMSASXMASMSSMSAMSAMMSXMAXSMAAMMSAMAAMSMSMSSSSXSXSMSAAXMXMAAAAMMSAMXSXMAAAAAXMAMAMAMAMMXMSASAXMXSAMXSAMXAS +XSAMSMMSAMASXMXAAXSASXXSSMXXXMMSMSMSMAMMASASXAAXXAMXAXAMAXMASMMSMAMMSMSMAAAAAAAAASASASXSMSASXSSXSAXAMAMAMMMSMMMMAXASMSMXSAAMAMXMMAMAXXAMXMMS +AMAMXAASMMXSAMSMMMMMMMMMAMMSMMAAAAAAXAXSAMASMSSMSAMSAMMSMMMXXAAAMXMAAAAMXMMMMSMMMMAMAMAMAMMSXMAXMASXMSSMSAMXAAASMSMXAAXAMMSMAAMAMXSMMSASXSXM +XSAMMMMXAXSMXXAMAAXSAAXSAMASAAMMSMSMSMMMSMAMMAAXMAMSASXAMXXXSMMMSAMMMSMSSSXXAXXAXMXMXMMMSMMMMMSMMAMAAAAXSMSSMMMMAAAMSMMXSAXXXMSXMAMAAXMAXMAX +MSASXMXSSMSAMSMSSMSMSMXMXMASMMSMMMAXXAAAAMAMMXXMXSMSAMMMMSMAXXAASASXXAXAAXMMXSMMXMXMAMXAAAAAAXAAMXSMMMSAMXAXAXAMSMMMXAMXMMMMXAMAMMSMMSASXSMM +ASXMASAAAXMAMXMAAMSMMSSXXMASAMAAASXMXMMXSSSSMMSSMAAMSMXMASMSMMMXSAMAMMMMMMSSMMMMAXAMAMMSSSMSSSSSMAMXASXXSMSSMMMAAAASMMMMXSAMXMSSMAMMSMMXAASX +XMXSAXMXMAMASXMMSMSAMASAMXAXMXSSMSAMSXAAMMMAAXAAMMMMAMAMXMAXMASMMAMXMAAAXAAAAAAMSMMMAMAAAXAAAAAAMAXAMXMASXMAXMXSSSMSAMSXAXASXAAAMXXSAAXMMMXM +MSMMASMAMXSASMXMAMMAMMMMSMXXSAMXASAMSMMMSASXMMSSMXMSASAMAMMMSMSASXMASASXMMSSMMSMXASXMXSMXMMMSSSMSSSMSAMXXASMMMMMXXAMAMXMXSASMMMSMXSXXXMMASAX +AAAAMXXAMXAMMMSAMASXMXSXAXSAMXXSXMXMMAXXSAMASXAXAXAXASMSSMXAAAMXMASASAMXMXAXXXXXSAMASAXXAXXAAAAXXXAMSXSAMMMSAMXMXSMSAMXAMMAMAASAMXXSSSXSASAS +SSSMSASXXXAXAXSASAMMMAXXAXMAMMMSAMXXSSMMMAMASMSMMMXMAMAAAMMSMSMASMMMXAMAXMASAMXMMMMAMXSMMSMMMSMMXSSMMMSMMSASXSXSAMXAMSMSMMASXMMMXAMXMAAAAXXA +MAMAMXXMSSSMSXSAMMSAMXSMMMMAMAAMAMXASXSASXMAXMAAAXXAMMMMSMAXAAXAMAASXSMMXSAAMAAAASMXSMXAAXMAMXASMXXAXASAAMASXAAMXMMXMAAMXSMSASMXMSSSMMMMSMSS +MAMMMXSAXAAAXXMXMSSXSAXAAASXSMSSSMMXMAMXMXMAMSMSMSMSMAMSAMAXSXMXSSMSAAAAAMASXSMSMSAMXASMMXMSASXMASXXMXMMMSSSMMMMSMASMMSMMSASAMXAAAAMXAAXAAXA +SSSXAXMMMSMMMSXMXASAXMSSMXSAAAAAXXMMMSMSMSMSXSAMAAAASMMMAMMXMXMMMMXXMXMMXSXMAMAAMMMMMXMSAASAMXAMSMMXSSMMMXAXXXXAAMMMAMXXAMAMXMXMMMSMSSSSMMMM +MMAMXSAMXXMSAMXAMMMMMXMASAMXMMMSMSMAMAAAAAAMAMXMSMSMSSXSAMXAXAAAMSMSXMASXMMMAMMMSAMMXXAMSMSAXSMMAAXMASAASMMMSMMSXSASXMMMXSAMXMAMAXAAMAAXXXAX +MSMASAMXAMMMASMMAXAXAMSSMMSXXSXAAXXAMMXMSMAMSMXXAAAXXXXMMSXMSMXMSAAMXMAMAXXMXXXXSMSMAMMMMXSMMXXSXSMSASMMMMMAAXMAMMMMAAAAMXASXXSMMXMMMSMXXSSS +XXXXSXSAMXSMMMASXSSXSAMXASAMXMMMMMMSMSAXXXAXMMSSMSMSMMSXMAMMAMAMMMSMAMXSMMSMAMSMSAAXMASAMMSXMXASAAAMAXAMXXMSSXMSSMASMSMSSSSMMAXASMXSAMXMMAAM +MAMXMAMASASAXMXMAAAXMAMXMMMMASAMXSXAASXSMMXXXAAAAXXXAAASMSMSASMSAAAXXMASMAXMAMAAMSSSMMMASASASAAXSMXMMMSSMSMAMMAMAMAXXAAXAMMAXMMAMAMMAMAAAMXM +AAMAMAMMMASXMSAMMMMMSAMASAMMAXASAXMMMMAAMMSSMMSSMMMSMSSSXAAMAMASMSSSSMAMMSSSSSMSMAMAMXSAMASAMMSMMMXMXAXAAXMASXAXMMXSAMXMMMSSMSMXMAMMMMMSSXMA +SASASASAMXMMAMAXAAAASASXSASMMMMMMSAMMMSMAAXAXAAXAMAAAMAMMMMMXMAMAAAAXMASXMAAAXMAMASAMXMASMMXMAMAAXAXMAXMMMMASMMSXAMMMXAMXMSAAAMMSASAAAMXXXAM +MASASASXSAMSSSMMSSSXSAMAMAMMSAMAAXXXAAAXMASMMMMSMMSMXMAMAAAXXMXSMMMMMMAXAMMMMMSXSASASXSMMAAAMASMMSMSMSAMAAMASASMMXSAMMMXAXMMMMMASASMSSSMMMSA +MAMXMAMASAAAMAAAMAMXMAMXMXMASMSMSMMSMSMXXAXXXMXSXAXMASAMMSXSSXASMXXAAMMSMMSXMAXAMXMAMAXMSMMXSASAMAAAAMASXSSMMMAXAXSAMASMSMXXXXMMMAMXXXMAAMAS +MSSXMAMMMMMMSSMMSMAMXAMAXXMASXSMXAAMAAMXMSSXASAMMXXSASASAXMMAMXSASMMMSMAMAXAXSMSMSXMMSMMMMAMMMXAXMSMSMAMAAAXXXMMSASAMXMAMXMSMSXSMMMSSXSSMSAM +XAMASMSXXMMMAXAXMMASMMSMSMAAXASASMMMMMSAAMAMMMASXSXMASAMAXMSMAMSAMAMAXMAMXSXMAAMASMMAXAAAMAXAMSSMMXXXMXMMSMMAXXAMMMAMXMAMMMAASAMXMMAMMAXXMAS +MXSAMMAMMSAMSSMSAMASAMXXAMMMSXMAMXXMSASMSMAXXMMMXMMMMMXMMMMAXMXXASXMASAXMMMMAMXMAMAMMSMMMSMSMMAXAMXMMXSAXMMMSSMMMXXAMSMMSASMMMXMAXMASMAMXMAM +AMMMSAMXAXMAAAXSXMASAMSXMMAMXMMMMMSAMASXAMSMXSAMAAAAAMASXASMSMMSMMMMMSMMMAAAMXSMXSSMASASMSXAMMMSAMAAAASMMSAAMAMAAMSMMSAASXSXMSAXXXSXXMMSAMAS +MXAAXMXMMMXXXSMSAMASAMAASXMXAAMAAAMAMAXMAMXAMSAMSMSXXMASMMSAXAAXMASAXMASXSXXMAXAAAAMXSAMASXMXAXAASMSMMSAASMMSAMXXMAMASMMSASAXMASMMSAXMXSASXS +SSMMSSSSSSXMXMXXAMASAMMSMASMSSMMMSXXMSSSMSMXMXAMXAMAAMSMMMMMSMMMSASMMSAMXXXMAMXMSSMMAMMMAMMMSSXSAMXAMMSMMSMMSXSAMXAMASAAXASXMMSMMAMAMSAMXMMX +XAAAAAAAAAAAXMASMMXSASMMMAMAMAASAMXAMAAAAAAASMSMMAMAMXMAMXMXSMSASAXXMXAMSMSAXSAMAAAMSMSMSXMAAXMASMSXSMSMAMAASMMAMXMMASAMMAMMXMAAMXMAMMAMSXSM +SSMMSMMMMMXMAMAMAAASMMAAMSSSMSMMAXMASMMMSMSMSAAXMMMMXMSSMAMSMAMASXMXMSSMAAMAXMASXSMMAAXAXMMMMSAMXMAAMASMXMMMXAMXMASMMSXMASMAASXSMSMSMSAMXAXX +AMXAAAAXMASXSMSMMMMSXSMMMAAAAAXMMMAMXXXXXXAAMMMMMXAMMMAXSXMAMAMMMMAAMXMSMSMMMSAMMMMMSSMAMMXSAMXSAMMSMAMAMSMMSXMXSAMAMSAMXMASMSXAAXAAMMMSMMMM +MSMSSSMSMASAMAMASXMXAMASXMSMMAXAAXSXMAMSSMMSMSMAMXAXAMXMMSSMSSSXAXSXMAMAMAAAAMXXAMAAAAMXMSAMMSMMASAXMSMMMAAMAMXAMMSSMXSMASXMASMMMMSMXSAAAAAA +XAAAAAMXXAMMMXXAMAMMXSAMXXXMASMSMSXMXSMAAXMAXASAXXSXMMXSAAXXMAMMMMMXSASASMSMSMMMSXMMSSMSAMAXXAMMXMASMXASMSXMASMAXAAXMAMSASAMAMAXSAMXXMSSMMSS +SMSMSMMSMSSSMMMAXAMSMMASMXSSMMAAXXASAAMSMMMSSMSMSMXAASAMMMSMMMAAXAAMXMSMSXXAAXMAXAAAXAAXAXAMSAXSASAMASAMAAXXAMMSMMSSXMMMXSAMMSMMMAXXMXXXXMAM +SAMXAMXMAAAAAXSAMSXSASMMMMMAXMSMXMAMSMMAAAAAAXXAAAMSMMASAXXMASXMSMSSXXMASAMSMSMASXMXSMMSSMMMAAXSAMXMMMMSMMSMAMAXAMXMASXXXSXMMAMSAMMSSMSSXAAX +MAMSMSAMXMSMMMXAMXAXXXMAAASAMXAAMMSMMXMSMMMSSMMSMSMXASAMXSMSMXAMAAAMXXSMMMMAASMMMAMXXAAAXAXXMSMMXMASXAXSXAXXAMSXSMAMXMMMAXXXSASMAMAXAAAXXSMM +SAMXAAAXMMXAXMXSMSMMMXSXSXSMMSMAMAAAAXAAAMMAXAXXXMAXXMASXSAAXMXMXMMSXMAMAMMMSXASMMMAMMMXSAMXXMASXSASXXMSMSSSXSMAXSSSMAAMMAAMMMMMAMASMMMMAMSA +XAMAMSMMMASMMSAMMMAAXMMXXXMAAASXMSSSMSSSSMMASMMMXMASXSXMAMSMSASMMAMAMSAMASXMXXAMASMSSXAAMAMSMSAMMMASASASAMAMSMMMMAXXMMXXMSASAAMSSSMXXMXSASAS +SXSAXAAXMAXSAMXMAMXMSXSASASMSXSXMXAXAXAAMAMMMMSMXMSAAAXXXMAMXMAAAXMAXSASASAMASXSXMAMAMMMMAMAAMASXMAMXMAMSMAMSSSSMMMXMMSAXMASMMXAAAXXSAAMXMAX +MMMMMSSMMMSMXXSSSXSAXAAASXMMXMSASAMMSMMMSAMXAAMXAMXMMMMMMSAMXXSAMMSXXXMMMXAMAMAMXMXMASXMSSSSSSXMXSXMMMAMAMAMMAMAAXMASAMAXXASMSMMSMMMAMSXXMXM +SMXSXMXXAXSAXXAAAAMXXMMMMASASASAMASAXASXSMSSMMSMMSAMXAAAASASAMXAAXXSSMSAMXAMSMSSXMASXMAAAAAAMXAMASAMASASMSSSMASXMMSAMASMXMMSAMXAXAASMXXAMSSM +XMAMAASMMSMASMMMMMMAXMAMXAMMMAMXMAMMSXMAXSAAXAXASXMSSSSMXXSAMXXMMMAMXASASMMMMAMAASASASMMMSMSMSMMASAMXMXSAAAXMXXAMXMAXMAXASXMMMMSSXXXXAMAMAAS +XMAXMMMAMXMAMAAXAXMXMMASMSSXMAMSMMSAXMXMMMSSMMSSMSXAMAMXAXXMSMMMAMAMMXMMMAAAMAMSMMASAMXSAMAMXMAMMMMMMXMMMMMMXMXMMXSSMSMSMSXSXAAXXMAMXMSMMSSM +XMMSMAMXMXMAXSMMMXSAMXAMXAMMMSXXAAMXSMAMAXXXAMXMASMSSMMMXSAXXMASASMSMMAMSSMMXSMMXMXMXMASAMXMMXAMXXSXSAAASMSSMSAMSXMAMAXMAMMMMMSMSMMMSXAAMXMA +MXMAXMSMMSSSXMSMSAMASMAMMMMSXMMSMMSAXXASAXXXSSMMAMAAMAAAXXXMASMSASAAXSMMXMASAXAMXMAMASMMMMMSASMSMASASXMMMAAMAMASAAXSSMXMAMXMASAAAAAMAMXSXAXS +AASAXMAAMMAMAAASMAMAMMAMAXASASAXASMMSSXSAMMXMAXMSSSMSSMSSSMMXMXSAMMMXXSAMXXMASAMASASXXAAXAXMMXAAMXMXMMMSMMMSSSMMMXMMAMMSXMASMSASMSMSSSMMMMMM +SMMASMXSMMAXMMMSSXMMSSMSSMASAMXSXMASAXMXAASASAMXAMXXXXAMXAASXXAMXMAMSAMXMASMAMAMASMSXMSMSMSMAMXMMSSXMAASAMMAASAMXSASAMMSAXXMASAMXXAAMMMAAASX +AXMAXAAXXSXSXAAXMMMAAXMAXMMMXMXMASXMMSXMSMSASASXMXSAMMXMASAMXMMXMXAMMAMXSASMMSMMASAMAMMAXAAMSXSAXAMMSAMXAMXMAMXMXMAMMSASMMMSMMAMXMMMXAMSSXXA +XMASMMSMASAMXMMXXAMMSSMSSMXXAXAXMMSAXMMAMXMXMAMMMAXMXSMSAXAMMMAASXSSSSMAMXSXMAMMAMASMMSSMXMXAAMXMMXAMXXXMMXXMMSXAMMMMMMXAAAAXSAMXSASXMXMMMSM +XAAXXAMXMMAMMMSMSASAAXXMAXSSMSSXSAMSAMXSAMXXXMSMMASMXXAMASAMAMMXSAXMAXMAMSMMSSSMXSAMXAAXMXSMMSMMMXMSSXSASXMSAAMMSMASMSXSSMSSMSASXXASXSAAAAAX +MMASMMMAXMXMAMAMXAMMSSSMAMMAAAMMMASXXXAXXAMAMXAAXAXAMMSMAMASMSXAMMMMAMSAXAAXAMAAAMAMMMMSXAXMAAMASAMMAASAMXASMASAXMMMAXAAMXMMXSAMXMAMMSSSMSSS +AXASASMSSMMSXSASXSAXXAXMAMXMMMSSMMMMSMMMMMMMASXSMMXSXXAMAXXMXMXMMAAMSMSMSSXMASMMMSAMMAAXMMSMSMSASASMMMMXMMXMSAMMSSSMSMSMSASMMMAMAAMSAMAMAMMM +SMXSAMAASMAAASAMAXSSMSMSMSXMMMAAMXAAAAAXXMASXMMMASAMXASMSSMMXMXXSMSXXXMAMMASXMXMASMMSMSMXAAMXAMXSAMXMXXMXMSAMXMXAXAAMAXAXAMAAXAMXSAMAMAMAXSX +XMAMAMMMMMMSXMSMSMAXXMAAAAMXAMMMMSMSSSSXXMASAAXSAMASXMMAAMAMMMMAMSXMMMXMMMMMAAAMXMAMSAMXMSSSSMSMMAMXXAXSAMXASMMXMSMMMSMMMSSSMSMSXMMMAMXMMSXS +SMXSXXXXXAAXXAAMMMMMSMMMMMMSAMAAMAMMMAXMAMXXXMMMXMSAMXMAMSXMASAASAMAASMMAAMXXMXSXMXAMMMAXXAAXAAAMXMSXMASXSSMMASAMAXXXAAAAAAAMAASAMXSSMSAMAMX +AXXMMMMMSMSMSSSXSASAMAAMXAXSAMSXSAXMMAMSSMMMSMXMMXMXMASXXSASASXSMASXMSASMSSXAMAAAMMMMXSSSMMMMSMXMAXMAMAMXMASMMSASXMSAMXMMSMMMMXMAMAMAASMSMXS +MXSAASAMXAAAMAMAMXMASXMSMMMMAMXASAMSMMXAASXAAAASMASAMAXMAMAMMSMXMAMMMSAMXAAXAMMSXMAAMMMMMXXSXMASMXSSXMASAXXMXASXMASMXMAXXMASXSMSAMXSMMMXAMSS +XAMXMXMSXMMSMAMAMMSXMAAXASMMSMMMMSMSASMSSMMSSXSASXSASMSMSMSMAMAAMXSXAMMMMXSSXMAMASXMMAMAXAXXAMXMXAAMSSXMMSMMMXSAMXMXSSSXMSAXAAASAMXXXSASMSAM +MSSSMMSAXSXXXMSASASAMXMSXAMAMAXXAAXXAMXMAXXXAXXMAMSAMAAAAAMMSSMMSMMMSSMXSAMMAMXSAMXMSSSXMAXSAMXAMMMMAMXMAAAAMMSXMMAMXAXAXMMSSMMMSAMXXMAXXMAX +XAAAAXMASXAXSXMAMAMAMSMMAMMASMMMMSSMSMXXMAMMMMSXMMMAMSMSMSMAXAAAXAXAXAMAMXSXXAXMMSAXAXMXAAASAMXAXSAMASAMXMMAMMMASXSMMMMXMAAXXSXSAMXMXMSMSMXS +MMSMMMMMMMSMMAMSMSMXMAAMMXMXSAMXAAAMXMXSMASAAAAAMXSAMXAXXAMMSSMMSSMXSAMXMXMMMXMAMMAMSMSASMMSAMXMASXSASASASXXMAAXXMAAAAMSMMMSAXXMAMSMMMMASAAA +MAMXXXAAAAXASMMXAAAXSSMMSASXSMMMMSXMAXAMXAXMMSXSMASMSMAMSSXXAMAAAXAXSXMASMSAMASAMSAMAAXAXXXXAMXSAMXMASAMXSASMSXMMASMMMSAAAXMMMMSAMAMAAMAMMXM +MASMSSSSMXMAMXXMSMSMAAMXSASAMXXMXMXSXMMSMSXSMMXAMAXMAMMMAAXMASMMSSMAMMSASASMSASMMSASXSMSMSMSSMXMAXMMAMMMMMAMAMMMAMMAMXSMMMXAMAXXXMMSSSMMSXAX +SXSAMXAAMSMSMXMMMAMAMXMAMXMMMXMMAMMXXMAAMAASAMSMMSMSASAMMSMXAAXSAMXAXAXAMMMXMASXASAMAMXXMXAAMAMSMMSMSXSAXMAMAMAAMAXAMXSXXSSMSSSMMXMAAMAASMMM +MMMXMMMMMAAAMXSAMSMSASMMSXMASAXMAMXXMMAXSMAMAMAXAXXSASASXMXXMMMMMXSASMMMMMMAMAMAMMSMXMAXSMMMSXMAXMSAMASMSSSMXASMSSSMSAMAMXAAAMAMAASXMMMMMAAA +XAXASASMSMSMMMMAXXAMASXAAASAMASMMSMSAAMMMXASAMMMMMMMMMMSAXXXXAAMXXMASXAXAXSASAAMMXMMSMMSAASXAXSXMAMAMASXMXMAXMMMAAAXSAMXMSMMMXAMMMMAXXAMXSMS +MXSXXXSAAAXASMSSMMSMAMMMSMSAMSMMAAASMMSAMMMSMMXAAMXAMAAMXMAMXXSMSAMXMMMMMXXASXSXMXMASAMXMASMMMXAXMMXMAMMSMSMMAXSMSMMSAXSXXXMXMSMSASMMSMSAMAX +SMSMSMMXMXSAMAAAMAAMAMXAXAMXMXAMMMMMAASASAXMASMSMMSSSMXXAAXMSMAASXSXSAMAMXMMMXMAXMMAMAMXXAXAXAMMMXSXMXSAMXAASXMAXAXXXAMSMSMMMSMAAXMAMAMMASAS +AAMAAASASAMXMMMMMMMXXSMMMASMMMXMAXASMMXASMMSAMMAAAAAXXSMXXAAAMMMMMMASAMSAXMAAASXMSMSSXMXMAMSMMMSAAXXSMMXSMSMMAMXSMSSMMMXAXAAXAMXMXSXMASMAMMM +MAMSMSMXSAMXSXSMSMSMSXMXSAMAMSMSSXMMAAMXMMMMASMXMMMMXXSASMMXMMAASAMMMAMAAASASXXXAAAMMAMAMMMXASAMMSMXMAMAMMXASMMAMMAXAMAMSSSMSMSAMXMASAMMMSAS +XMXXMAMAMAMXSAAAAAAMASXXMXSAMAAAAASXMMSXAXXSSMAASXSMSAMXMAXSXSSMXASXMAMMXMXAXMSSSMSMXASASAASAMASAAAASMMMSXMXMSMXMAAMXMXSMXAAAXSMSAXAMXAXXSAS +MASMMMMSSMMAMXMSMSXSASMSAASASMMMSXMASXMXMMMSAMMSXAAXMMMSSXMAMMXXSAMXSASAMMMSMMAAAMXMMMSAXMMMASAMMMXXSAAXAXXAAXMMSMSSMSMMMMMXMMSXSMSMMMASAMXM +AMSAMXAXAMMASMMXMMAMAMAMMMSAMXXXMXSSMAXMMAMXXMXMMMMMSXAXAAAMAXAMMXMASXMASAAMXMMSMMAMMMMMMSXSAMXSAXSASMMMAMXMMMXAAXMAMMAASXSAMXSAMAAAXSASMSMM +SXSMMMMSXMSAMASXAMMMSMSMMXSXMASAMXMASXMASXMSAMXSAAXAXMAXMAMXSMMSSXMASXSAMMSMSXAAMSXSASAMMMAMMSMMAAMMMASAAMAXAXMMSMSAMXMMXAAMSAMAMSMSMMASXAAM +XASXAAXMXMMSMXMXMASAAMAMXASAMMSAMAMMMMAMXMAAMSASXSMXXSASAMXAMXAAAAMAXMMASXAMMMSSMAAXMSASAMAMSAXMMMMXAAAXASXMAXSXMASAMASMMSMXMXMAMAXAAMAMXSMM +MAMSSSMSMSAMXSSSXAMXSSMMMXSASXSASXSXSXSXMMAMMMASAXMAMMASXAXAMMMSXSMMSMXAMXXMAAMAMMSMAMMMMMSMSMXXXXXSMSSSMMMSSMSASASXMXAAAMXMAXXXXXSSSMXSAXXM +MAMAXMAASMAMMXAAMMSAXAMXSXSAMAXXMAAAXAXXMXMSXMAMMMMSMMMMMSMAXMXXMAAXAMAMSAMXMMSAMAXMAMSAMXMAMXSSSMAMAMAAAXAXAAMAMAMMMSSMMSXMASMMMMMXXAXMASMM +SMMXSMMMXXMSAMXMSAMMSASMSAMSMMMSMMMMMSMMSAMXAMSXXAXAMXMSAXSAMSASMSMMASMSMXSASASAMXSMMMSAMASASAAAAMXMAMSSMMSMMMMMMMMXMAMAASMMMAAAAAAXMXSMAMAS +SAMAMMSSMAMXXAAXMASXMASAMXMXMXAMAXXMAXMAXXSXSMAMSMSMSSMMSXMMMMASAXMSMSXAAASAMASAMXXXMAMAMAXAMASXMMMSMXAMAAMXSMSMAAMXMAMMMSASMSAMXSSMSAXMASXM +SAMXSAAAMAMAXMXXSAMAMAMMXASMSMAMSMMMASMSSMMAMMXXAAAAAAXAXXAMSSMMAMAXAMXMSMMXMAMAMAAXMAXSSXMSMXAXXXXAMMASMMSAMAASXXSASMSSSMMMAMASMAAAMMSXXMMA +SAMXMMMXSAMXSMXXMXSAMXSXSXSAXMAMMAMMAMAAAAMAMMMSMSMSMMASMMSMAAMMXMSMSMAXMXMXMAXAMXMXMASMAAXXASAXXXMMXSAMXAMASMMSMXXASMMMAMXMAMAMMSMSMXAXXMXM +MAMSMMXMAMXAAMMSAAXXMAXXXAMXMMXMSAMMMMMSSMSASAXXAXAMXSAMAAAMSSMSSMMAASXMSAMMSSSMSAMAMXAAXMMXAMASXMMSAMASMXSAMXXXMASMMMSXMAAAMMMSAASAMXMASMAS +SAMMAMXXAMMSXMAMMMSXSSMMMXMSMSMAXSMXSAMMAAMAMXXMMMSMAMAXSMMXMAAAAAMSAMXXMAMAAXAXSMSASMXSASXMXMXMAAAMMXMMMMMMXMAXMASAAASAASXSSSMAAMAMMMMSASAS +SASMSMSSXMAMAMXSAMAMAAAXSAAAASMSMAXASASXMMMSMSSMSAMMSSMMAAXMSMMMMXMMXMAMSSMMSSSMMXMAXAAXAAXAXMASXMMMMASAMASXMSXSMASMMMMSMMAMAASMSXXSAAMMAMSS +SAMAMAAMAMASAMSSMSAAMSSMSMSMSMAMSMMXSAMXXMAMAMAAMAMXAAASXMMXAAMXMSASAXAMAAAMAAMAXSSXMMMMSMMSASAXMASMSASAMXSAAXMAMMMXXXMAXMAMXAMXXMXSXSSMMMAM +MMMMMMMSMMAMAMAMASXSXAXAXAXMMXXMAXMXMMMSXMASASMMMSMMMSMMAAASMSMAXMASMSMMAMMMMXMSMAAASXMAXAXMXMMSMAMAMASXMAMMMMMMXSXMXSMSMSXSSMMMMMAMSXXAXMAS +AXAAXAMAMMMXMMMMAMMMMSMSMMMASXSSXAMMSMAMXMASAMXAAAASAMASXMMSAMMSMMMMXXXASMSXSXAXMMMMMAMSSSMSAMMAMASXMMMMMMSXMSMAAMAMAMMMAMAAXSAAAMASXXSMMMXA +MXMXXMXAMASAXXXMAMAXXAXXMXSAMAAXXAXAAMASAXXMMMXMXSXMASAMXMXMAMAMSMXSMXMAMXXAXMSMXSSXSXMAAAASASMSSMXAXXASXMAXXAMMMXAMXSAMSMSAXSSSMSXMMMMAXMSM +SSSSMSSMSASXMXASXSASMMMAMXMMMMMMSSXSXSXSASMSASXSAMMMXMXMASMMSMMSAMMSASMMXMMSMMMXAAAXMAMMSMMMAXXAAMSSMMXMAXSMSASASXSXAMXSXAMXXMAMMAAAMASAMMAX +SAMXAXAAMASAMSXMAAAXMXMAMXAXXAAAAMMMASXXAXAXASAMXSAMMAMMXXAAAXXMASASAMXXMAMAAAMMSSMSSSMAXAMMMMMSMMAMAMXMAMMAMAMASXMASXMMMXMMMMASMSXMSXMAMSAS +MXMMSMMXMAMMMAAMXMMMSXSASXXMSSMMXSAMXMMMMMMMMMAMXSAMXAAMMSMMMXMSAMXMSMSSMSSXXMSAMAXMAMSAMXMAXMAMXMSSSMMSSMMAMXMAMAXSAMAXXMXAXMAXXAMXMMXXMXXX +SMMAXAXAMAMAXAXMAMAXXASAXMAMXAAAAMMSXAAAXAAMSSMMASXMXMXMAAAXMAXSXMXMAXSAAAAASXMMSMMMAMMMMMXSXMAMMAMXAAAAMASXSAMMSSMMMSXSAMXSAMXSASAXXMASMSSX +MAMMSMSXSASMSSXSASAXMMMMMSXMMMMMMSASMSSMMASMAAXMASXMXSAMMSMMMMMSAMAXXXXMMMSMXAAAMMMMAMAAXMAXAMAXMAMXSMMMSAXAMAXMAAAAXAXMAMAMXMXMAMXXAXMXAAMM +XMMXXAMASXSXAAMSAMXSASAXMMMSAXAAXMXMAXAAMAMMSMMMMSMSASASAMXMXMASAMMSMSMAMXXXSMMMSASMSSSSSMASASMSASAMXAMXMMXMSMMMMSSMSMMSAMAMMMMMSMXMMSSMMMSX +SSMMMSMAMMMMMSMXMASAASMXMXAXMSMSSMAMXSMMMAXMMXASASAMASAMMXASXMAXAMAAAASAMXMXMASXSAMAAAAAXMMSAMAMAMMMSMMSAMXXAMMAMXAAXAASAMXXAMSAXMSXAAAAMAMA +MAAXAMMAMASAMMMXMMAMAMMMXMSSXXXXAMXSMMMSSSSXXXXMAXAMAMAMXMXAMMSSMMSSSXMMSMMXMAMMMMMMMMMMMMXMMMAMAMXAASXSXMXSAMXASMMMMMMSAMSSSSMMSAMMMSSSMASM +SSMMAMSAMXMASASMXMAMXSXSAAMXMMMSAMMXAASAAMMMMSMSASXMXSXMXSAMXAXAAMMMXMXXAAXAXMMSASXSMXASASMAMSXSXSMSXSMMXMAMMMSMSMAXAAXXXXXAMXAAMAMSMMAXMXSM +MAMMXAMMSXSAMASAASXSXAASMXMAMAAMAMASXMMMSAAAAAAMAMXAMXXSASMXMMSSMMAXAMXSSSMSASXMASAAXSXSASXSMSMMXMAXMSAMXMASAAAAXMASXMSSSMMMMSMXMAMAXMASMMSA +ASXSMSMSAMXAMAMMAMSMXMMMXSSMSSXXAMMSXAXAXXMSSMSMMMAMXMAMASXAAAAXMSSMASAXAMAMAMXSMMMMMMAMAMAMAXAXSMSMASAMXSASMSSSMMMMAAAAAXMXXMASMSSMSMAAXAXM +XMAXAAXMXSXSMAMMSMAMAXMAMAAAXASMXSXMMXMXSSXXXMAMASAMXAAMAMMSSMMSMAMMXMMSAMAMAMAXAAXXAMMMXMXMMMSXXAAMXMAAXMXXMMAMXXMMMMMSMMSMSMAMMAAAXMSSMMSX +MMMMMMSSMMAXMMXAXSXAXSMSAMMMMAMXXMAMMMSMMMXMAXAXXMAMXSXSASAXAAAMMASXMSXSXMXXSMMSMMSSSSMAASMSMAXXMSMSSSXMSMMSMMASXMSAMXAMXMAAAMXSMSMMMXXXASXM +AAMXSAAAMMAMXXMAMAMXMSAMXXMMMXMXXMAMSAMAAMMSAMSSMSSMAMASAMXSSMMMSMSAASAMASMXMAAMMAMXAAMXSMAAMXMAMAMAAMSXXAAAASAMAAMAMMMSSSMSMSAMMXMXMAMXXMAA +SASAMMSSMSASMSMMSMAAAMMMMMMAMAAXSXMSMASMMSAXASXAAAXXAMAMMMAMXMAXXASMMMASAMMASMSAMXMMSSMMMMSMSMSXSSXSAMXMMMMSXMAMMMMSXSAMXAAAXMAXSAMASXMSSSXS +XAMASAMXXXASMAAAXXSXSSMASASASMSAAAXMXMMASMMSSMXMMMSSMMAXAXMAAXMXMXMAXSAMASAMXAAMXSXAAXAAXAMXXAMAAXAMAXXAXAAXMSXMXXMXAMMMSMMMMSXMSXSAMAXAASAX +SASAMASXMMSMMSMMSAMXAXXASXSAXXMMSSMAMMSXMAMMAAXXAXXMASMSMSXSMXSAMMSAMMAXMMMXMMMMASMMSSSSMSSXMAMMMMSMMMMSXMSAMXMMMMMMAMAAXAAMASMAMXSASXMMSMMM +SAMXSXMAXXMAAMAAXAXXMAMMSMMXMXMXAMMSMAXMSXMSMMMMAMXMMAXAMAMXMAXASAMAMSAMXASAMSXMASAAXAAMAXAASAXAXAAAXMMXXAAXMASAAAMMSMMXSMMMASMXMAXMAMXXAAAA +MAMMXXSXMAMMMSMASMMMSASXSXSASASMXSAXMSMASXMAMSSMMSSMAMSSSMSSMMSMMMSSMMXXXASMMSXMASMMMMMMMMMMSASMMXXXXXAXMAMSAASMSMSAXXXMSAXMASAMMSXXXSXSXSMS +SAMXMMMMMMMSAMXXAXAASASAXASASASXXMASAAMSMMSASAAAAXMASXMAAAAXMAAAAAMMAXAXMXMXAMXXXXMAAAAAAAXXSXXXASMSMMMMSAMMMASAMAMMSMMAMXMMMSASAXXSMSAMXMMM +XMMAMAAAAAXMMMSSMMMMMXMMMMMAMXMMMMAMMMXAAXXMMXXMMSAMMXMSMMMSMXSSMSMSXMMSMMAMMSMSASMSSSSSSXSMMSAMXXAAXXXAMXSASXMMMAAXAMMSMMXAAXXMASXMMXSXAMAS +SSSXSSSSMMSAAAMMXASAMMSXSAMASMMAAMXSXSXMMMXSSSMXMAMMMXMMXAMAMAMXMAXMAXXAXMAMMAXAAMAXXXMAXMAAXXXMAMSMMAMSMXSASXMXSSMMXMAMAMSSMSAMSMMAAAXMMSAM +SAAXXXAAAXSXMSSXXMSASAXASXMAXAMSMSXMASASAMXAAAMXAAXXXMAXSMSASXSASASXSMXMXSMMSMSMMMXMMMSAMMSSMXSMAXAAXMXXAXMMMAMAMAXSXMASXMAXMAMXMAMXMXSAMMMM +MMMXMMSMMMXSMXMASXMASMMMMSMMSSMAMMAXAXMXASMMSSMMSSMMMSAXSAMASMSASAXAMAASXSAASASXASMSAAMASAAAAAXMXMXMMMAMXXAASMMAXMMMASAMAMXSXMMSSSMSMXXXXXAS +AXXXMAAAAASAMXASASXXMXXMASXMAXSASMSMSSMSMMXXAAAMXAAAXMSSMAMXMAMMMMMSMSMMAMMMMAMSMSAMMMSAMMSMMXSSSMXXAMXXAMSMSASMSMXSAMAMSMMAXAAAAAAAMAXSMSXS +XXMASMSMMSMMMMMMAMMAMSAMXMAMAXSXSAMAMSXAXMMMSSMMMSSMSAMXMSMMXXXXASAMXAMMSMXSMMMSXSMXMASXSXMASAAAAAASXMSMMMXAMAMAAXMMXSMXMAMAXMAMMMMMMAXAASMS +MASAAXAXMAMXXXXMAMMAMMXMAXXMMMSMMAMMMMMMSMAAAMAAXAXMMMMSXMASMMSMMMSXMMSAMAASAMAXMMXAAMXSMASAMMMSMMMXMASAXAXAMSMSMMASMXMASAMXSSXSXSSXXXSMSMAX +AMASMMXASASMMMXMAMMASMMXSSMXSAMMSAMAAXAAAXMMMSXMXMMMAMXMAXAMAAMAXSXSSXMASMXMAMMMASMMXXMXXAMXSXXAAXSMMASXMMMMAMAMXMSXAAMMSAMXXMASAMXSAXSXMMSM +MMAAXMSXSASXAAXMASMMSAAAMAMXMASAXSSSSXMSSSMSMSASXXXSMMMXSMASMASXMSAMXAMMMMSSSMXAMSASAXAMSMSXAXSXSMMAMASXAXASAMXMAXMXMMSXMASMXMAMAMAMMMMAMAXA +XMMMAASAMAMXSSSMAXMAMMMXSAMSSSMMSAXXMAXAMAMSASAXMAXSMXSAXAXMMMAMXMAMSXMXAAAXAAXSXSAMXXSAAASAMXSXMASXMAMAMAMMAXAMMSSMSMSASXMAXMMXAMXSMAMAMMMS +MXAMMSMAMAMAMXMMSSMAMAMMSXMAMXSXMMMMSMMASMMMAMSMMXMMAAMMSXSXXXSXSXSMXSSSMMSSMSMMAMXMXSXMMMMMMAMXSMMAMASMSMSAMXASMMMAAASXSMMSMAAXXXMAMASXSXAX +SSSSXAMXMASMMASAMMXXXAMXMXSMSAMXAASAAXSAMAMMMMAXMMMMMMSXSASMMXMASAXSAMXXSAMXXAAMSMXXXAMXSAMAMASASASAMXXXAXAAMASMMAMSMXMAXXAAXXMMSAMAXMXAMMXM +AAMXMASXMXMAAAMASAASXSSXSAMXMAMXSAXSAMMASAMASMMMSAAAAAMAMAMXMAMAMAMMMXSAMXSMMSMXAAXMMXMASASXSMSAXASXXSXMXMSMMXMAMXMAXAMSMMSSSMAASAMSSSMSMAMS +MSMMMSMXXAXMMSSXMMMMAAAAMAMSSMMMAMXMXMAMMASAXAXASMSSSSMXMAMXSASMMXMASAMAMAAAXMXSMSMXAAMXMAMXMMMMMMMXAMXSAMXXXAMXMSSMMXMAMXAMXAMMMAMXAXAMXXSA +XAAXXAASXMXXXMAMSSSMSMMMMMMAAAXAAXXXAXMASXMAMMMXSAMAMXMXMAMASXSAXXSASXSAMSMMMSAMAAAXSMSAMXMMMASAMAASXMMSASAXMASXMXAXSSMMMMAMMSAXSSMMAMMMSSMM +SSMMSMSMASAASXSXAAAAMXXXAXMSXMMSMMMSMSMAMAMAMSAMMXMAMASASASXMASMMMMASASMXMXAAMAMAMSMXAMXMAAAMAMAMMXSAMASXMASMMSAMSXMAAXSASAMMMSMXMAMSMAAXAAX +MXSXXMAMAMXSAAAMMXMMMMMSMSMXASAAAMAAAAMASXMAXMAMXASASXSASASMMXMXAAMAMMMMAMSMMSAMXMAMMXMASXSMSSSSMSXSXMASXSASAASAMXAMXMMSASASAAAMASAMASMMSSMM +SAMXAXXMASXXMXMXSXMASAAAMAASAMMMAMXMSMSXSMMMXSAMXXSASAMXMAMXMASXMSAMXASXMMAMXAAXMSASXXSXXMAMSAAMASAMAMASAMASXMMAMSXMXXAMAMASMMMMAMMXMXMAXAMX +MMMSMMSSXSASXMXAMASAMMMSSMMMMMXMAMSXMASAXXAAMSAXXXMXMAMMSAMAMAAMAMAMMMXAXSSSSSXMXSASMAAAMSXMMMMMAMASXMASXMXMASXMMMSSXSSMXMMMXAAMSXSSXMMXSAMX +MAAAAAXMAMXMAMMXSAMXMMAMXMSMMAMMAMXAMMMMSMMSXSAMMAXMSSMAMAMSXMMMAMAMXSSMMAAAAAMSMMXMMSMSMAXMXSXMXSAMAMASXSXSASAMXAXMAMXMSXMAMMMMMAMXASAAXAMX +SMSSMMSMMMXSAMXAMASMAMMSAAAAMXXSAXSAMXAAAMXMAMAASMMAXAMSXSAMXMMSMMXXAAAASMMMMMSAAXXMAXAXAXMSAMXSAMXSXMXMASAMASMMMSSMAMAAXAMSMMSAMAMSAMMSSSMX +XAAAAAXXXAXAAMMMSXMMAXMAMSSSMAXSMMMAMXMMXSAAAMSMAAXSSMMAAMASASAMXSSMSMSMMAAMXXSMSMMMSMMMMAXMASXXSAMXMASMMMMMAMXXMAMXASXSSSMMASMASXXMASAMXAMX +ASXSMMSSMSAMXMAXMMXSXSSMXMAMMXMXMASAMSXSASXSXXAMMMMMAXAMXMMMAMMSAMAAXAXMSSMSSXMXXMAAXMSMSAMXMAAXAMMMXAXAAAXMASXSMSSSMSAAXAAMMMSXMXXXMMASMMSM +MXAMMMAXAMXMASXSMMMXMMASMMAMSMSMSXSASXAMASAXXSXMASAMMSSXMAMMXMXMASMMMAXAAMMMMAMAMMMSSMAASMMASMSMMSASMSSSMSSSXMMAAXAMAMMMMMXMXMAMXMASAMXMAAAA +SSMMAMMMMMAXAMMSXMXAXSAMXMASMAMAMAXXAMXMAMMMMAXSAMAXXXMMSSMMXSASAMXSMSMMMSAAXXMASASMMMMMMXSASXMAXSAXAAMAMXAMMSSXMMMMXSAMXXASAAAAXMAAASXSMMMS +AAASXSXAMSAMXSAMAXSAXMXMSAMXMAMAMAMXXSAMXSAAXMMMXSSMSMSAAAAXMMXMASXMAMXMASMXSAXXSXMAMXSAMXMMSAASXMSMMMMAMMAMSAXMASXXAMASMMAXSSXXAMSMMMAAXMSM +SSMMAAMSMMAXXMASMMAMMMSMXASMSXSASXMAXMAXSSXMSXAMAXAAAAMMMXMMXMAXXMXMMMMMXSAASAMMMXMXMASASXSASMMMXAAMXSSSSMXMMXMAXAXMMSAAAMAMXMMXSAMXMMSMMMAS +MAMMXMAMMSMMMSMMASXMAXAAXXMASASMAMMMMSMMMMMXMXAXMSMSMSMSXXXAAXSXXSASAAXMMMAMMAMAAAMMMMSAMAMMMAAMMMSXAXAMAMXMXMMSMSXXAAMMXMASMAAAAMMMMMAMXMAS +SAMSAMXMMASAXASAXMAMXSXSAMXSMAXMAMASAAAXSAMASXSAMXAXAAAAMSAMSXXAXSASXSMSAMXXXMMMSMXAAMMAMXMAXSAXAAXMXMMSXMASAMSAAMAMXXSSXMSAMMMSSMAMASXMSMMS +SAXSASMASAMMSAXMMSAMMMAXMAMXMXMSXSASXSMMMAMXSAXAMMMMMMMAMSAAXAMXMMAMAXAMSSXMMSMMMMSSSSSXMXMSXMASMSSMMSMMMSXSASXMSSXMAAXMASAAXSAMXMXSXMXAAMAM +SMMSAMXAMSSXMMMSAMXSAAAMMSAXMAXAMMAMAAAXSAMXMAMASAAAXAMSAMXMMAMMSXAMMMAMASAMAAAASAMAAAAAXMAMAAASAMXXAAAAAMMMXMXMAXASXSMSXMSSMMXMSAMXXSMSMSAA +XSAMMMMMSXMXAMXMXSMXXMSSXASAMXMSSMMMSMAMAMXXMSMSSMSSSXSAMXMXSAMXASASXSXMXSMMSSSMSXMMMMSAMXSSMMASMMSMSSSMXSAMXAXMASAMSAMXMAXMASXAAXMSAMXMASMS diff --git a/day4/input.txt.h b/day4/input.txt.h new file mode 100644 index 0000000..cf98b57 --- /dev/null +++ b/day4/input.txt.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_day4_input_txt_start __asm("_binary_day4_input_txt_start"); +extern uint32_t _binary_day4_input_txt_end __asm("_binary_day4_input_txt_end"); +extern uint32_t _binary_day4_input_txt_size __asm("_binary_day4_input_txt_size"); + +#ifdef __cplusplus +} +#endif diff --git a/day4/sample1.txt b/day4/sample1.txt new file mode 100644 index 0000000..1f4eda2 --- /dev/null +++ b/day4/sample1.txt @@ -0,0 +1,10 @@ +MMMSXXMASM +MSAMXMSMSA +AMXSXMAAMM +MSAMASMSMX +XMASAMXAMM +XXAMMXXAMA +SMSMSASXSS +SAXAMASAAA +MAMMMXMMMM +MXMXAXMASX diff --git a/day4/sample1.txt.h b/day4/sample1.txt.h new file mode 100644 index 0000000..103fa45 --- /dev/null +++ b/day4/sample1.txt.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_day4_sample1_txt_start __asm("_binary_day4_sample1_txt_start"); +extern uint32_t _binary_day4_sample1_txt_end __asm("_binary_day4_sample1_txt_end"); +extern uint32_t _binary_day4_sample1_txt_size __asm("_binary_day4_sample1_txt_size"); + +#ifdef __cplusplus +} +#endif diff --git a/day4/solution.c b/day4/solution.c new file mode 100644 index 0000000..8b976eb --- /dev/null +++ b/day4/solution.c @@ -0,0 +1,217 @@ +#include + +#include "printf.h" + +static int parse_stride(char * input, int length) +{ + for (int i = 0; i < length; i++) { + if (input[i] == '\n') { + return i + 1; + } + } + return -1; +} + +static int parse_height(char * input, int length) +{ + int rows = 0; + int i; + for (i = 0; i < length; i++) { + if (input[i] == '\n') { + rows += 1; + } + } + if (input[i-1] != '\n') { + rows += 1; + } + return rows; +} + +enum offset_type { + N, + S, + E, + W, + NE, + NW, + SE, + SW, +}; + +static char offsets[][2] = { + [N ] = { 0, -1}, + [S ] = { 0, 1}, + [E ] = { 1, 0}, + [W ] = {-1, 0}, + [NE] = { 1, -1}, + [NW] = {-1, -1}, + [SW] = {-1, 1}, + [SE] = { 1, 1}, +}; + +static bool xy_inside(int width, int height, + int x, int y) +{ + if (y < 0 || x < 0) + return false; + if (x >= width) + return false; + if (y >= height) + return false; + return true; +} + +static char get_char(char * input, + int stride, + int x, int y) +{ + int ix = y * stride + x; + return input[ix]; +} + +static bool offset_match(char * input, + int stride, + int width, int height, + int x, int y, + char * offset, + const char * str, + int str_length) +{ + for (int i = 0; i < str_length; i++) { + if (!xy_inside(width, height, x, y)) + return false; + + char c = get_char(input, stride, x, y); + if (c != str[i]) + return false; + + x += offset[0]; + y += offset[1]; + } + + return true; +} + +static bool offset_match_centered(char * input, + int stride, + int width, int height, + int x, int y, + char * offset, + const char * str, + int str_length) +{ + // blindly assumes odd-numbered str_length + // distance from the corner to the center + int center = str_length / 2; // floor division + + // go to corner + x -= offset[0] * center; + y -= offset[1] * center; + + return offset_match(input, + stride, + width, height, + x, y, + offset, + str, + str_length); +} + +static bool offset_match_cross(char * input, + int stride, + int width, int height, + int x, int y, + char * offset, + const char * str, + int str_length) +{ + bool match0 = offset_match_centered(input, + stride, + width, height, + x, y, + offset, + str, + str_length); + if (!match0) + return false; + + char cross1[2] = {-offset[0], offset[1]}; + char cross2[2] = { offset[0], -offset[1]}; + + bool match1 = offset_match_centered(input, + stride, + width, height, + x, y, + cross1, + str, + str_length); + bool match2 = offset_match_centered(input, + stride, + width, height, + x, y, + cross2, + str, + str_length); + return match1 || match2; +} + +int day4_part1(char * input, int length) +{ + int stride = parse_stride(input, length); + int height = parse_height(input, length); + int width = stride - 1; + + const char * str = "XMAS"; + int str_length = 4; + + int match_count = 0; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + for (int o = 0; o < 8; o++) { + bool match = offset_match(input, + stride, + width, height, + x, y, + offsets[o], + str, + str_length); + match_count += (int)match; + } + } + } + + return match_count; +} + +int day4_part2(char * input, int length) +{ + int stride = parse_stride(input, length); + int height = parse_height(input, length); + int width = stride - 1; + + const char * str = "MAS"; + int str_length = 3; + + int match_count = 0; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + bool match_ne = offset_match_cross(input, + stride, + width, height, + x, y, + offsets[NE], + str, + str_length); + bool match_sw = offset_match_cross(input, + stride, + width, height, + x, y, + offsets[SW], + str, + str_length); + match_count += (int)(match_ne || match_sw); + } + } + + return match_count; +} diff --git a/input_dreamcast.inc b/input_dreamcast.inc index b5ba364..6356925 100644 --- a/input_dreamcast.inc +++ b/input_dreamcast.inc @@ -5,6 +5,8 @@ #include "day3/sample1.txt.h" #include "day3/sample2.txt.h" #include "day3/input.txt.h" +#include "day4/sample1.txt.h" +#include "day4/input.txt.h" static struct start_size sample[][2] = { { @@ -25,6 +27,12 @@ static struct start_size sample[][2] = { { ( char *)&_binary_day3_sample2_txt_start, (uint32_t)&_binary_day3_sample2_txt_size }, }, + { + { ( char *)&_binary_day4_sample1_txt_start, + (uint32_t)&_binary_day4_sample1_txt_size }, + { ( char *)&_binary_day4_sample1_txt_start, + (uint32_t)&_binary_day4_sample1_txt_size }, + }, }; static struct start_size input[] = { @@ -34,4 +42,6 @@ static struct start_size input[] = { (uint32_t)&_binary_day2_input_txt_size }, { ( char *)&_binary_day3_input_txt_start, (uint32_t)&_binary_day3_input_txt_size }, + { ( char *)&_binary_day4_input_txt_start, + (uint32_t)&_binary_day4_input_txt_size }, }; diff --git a/runner.inc b/runner.inc index b7c647d..7690430 100644 --- a/runner.inc +++ b/runner.inc @@ -4,9 +4,12 @@ int day2_part1(char * input, int length); int day2_part2(char * input, int length); int day3_part1(char * input, int length); int day3_part2(char * input, int length); +int day4_part1(char * input, int length); +int day4_part2(char * input, int length); part_func solution[][2] = { {day1_part1, day1_part2}, {day2_part1, day2_part2}, {day3_part1, day3_part2}, + {day4_part1, day4_part2}, }; diff --git a/runner_dreamcast.cpp b/runner_dreamcast.cpp index 2c1b2ab..3e7de59 100644 --- a/runner_dreamcast.cpp +++ b/runner_dreamcast.cpp @@ -278,6 +278,6 @@ int main() transfer_scene(font, glyphs); } - while (1); + //while (1); serial::string("return\n"); } diff --git a/solutions.mk b/solutions.mk index 2e0ce19..abd409e 100644 --- a/solutions.mk +++ b/solutions.mk @@ -8,4 +8,7 @@ DAY_OBJ = \ day3/sample1.txt.o \ day3/sample2.txt.o \ day3/input.txt.o \ - day3/solution.o + day3/solution.o \ + day4/sample1.txt.o \ + day4/input.txt.o \ + day4/solution.o