This commit is contained in:
Zack Buhman 2024-12-04 11:32:44 -06:00
parent 9ded9cc978
commit acff0d9dd3
11 changed files with 430 additions and 7 deletions

View File

@ -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

View File

@ -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

140
day4/input.txt Normal file
View File

@ -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

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

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_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

10
day4/sample1.txt Normal file
View File

@ -0,0 +1,10 @@
MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX

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

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern uint32_t _binary_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

217
day4/solution.c Normal file
View File

@ -0,0 +1,217 @@
#include <stdbool.h>
#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;
}

View File

@ -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 },
};

View File

@ -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},
};

View File

@ -278,6 +278,6 @@ int main()
transfer_scene(font, glyphs);
}
while (1);
//while (1);
serial::string("return\n");
}

View File

@ -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