Compare commits
5 Commits
working202
...
day6
| Author | SHA1 | Date | |
|---|---|---|---|
| aa84e3974b | |||
|
aa0a2b7b7d
|
|||
|
77a0669f45
|
|||
|
c077b91c41
|
|||
| b3c36c1af1 |
@@ -25,7 +25,9 @@ func run(read io.Reader) (*result, error) {
|
|||||||
sum := 0
|
sum := 0
|
||||||
sum2 := 0
|
sum2 := 0
|
||||||
|
|
||||||
lexer := Lexer(read)
|
lexer, stop := Lexer(read)
|
||||||
|
defer stop()
|
||||||
|
|
||||||
active := true
|
active := true
|
||||||
|
|
||||||
for lexer.NextTok() {
|
for lexer.NextTok() {
|
||||||
@@ -52,7 +54,7 @@ func run(read io.Reader) (*result, error) {
|
|||||||
return &result{sum, sum2}, nil
|
return &result{sum, sum2}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Lexer(in io.Reader) *lexer {
|
func Lexer(in io.Reader) (*lexer, func()) {
|
||||||
seq := func(yield func(rune) bool) {
|
seq := func(yield func(rune) bool) {
|
||||||
buf := make([]byte, 256)
|
buf := make([]byte, 256)
|
||||||
s, _ := in.Read(buf)
|
s, _ := in.Read(buf)
|
||||||
@@ -72,10 +74,10 @@ func Lexer(in io.Reader) *lexer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
next, stop := iter.Pull(seq)
|
next, stop := iter.Pull(seq)
|
||||||
lex := lexer{iter: next, stop: stop}
|
lex := lexer{iter: next}
|
||||||
lex.readRune()
|
lex.readRune()
|
||||||
lex.readRune()
|
lex.readRune()
|
||||||
return &lex
|
return &lex, stop
|
||||||
}
|
}
|
||||||
|
|
||||||
type lexer struct {
|
type lexer struct {
|
||||||
@@ -83,15 +85,12 @@ type lexer struct {
|
|||||||
next rune
|
next rune
|
||||||
|
|
||||||
iter func() (rune, bool)
|
iter func() (rune, bool)
|
||||||
stop func()
|
|
||||||
|
|
||||||
buf []rune
|
buf []rune
|
||||||
token string
|
token string
|
||||||
literal []rune
|
literal []rune
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *lexer) Stop() { l.stop() }
|
|
||||||
|
|
||||||
func (l *lexer) readRune() {
|
func (l *lexer) readRune() {
|
||||||
if l.rune == -1 {
|
if l.rune == -1 {
|
||||||
return
|
return
|
||||||
@@ -172,16 +171,6 @@ func (l *lexer) NextTok() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *lexer) Iter() iter.Seq2[string, string] {
|
|
||||||
return func(yield func(string, string) bool) {
|
|
||||||
for l.NextTok() {
|
|
||||||
if !yield(l.token, string(l.literal)) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func readMul(lex *lexer) int {
|
func readMul(lex *lexer) int {
|
||||||
if lex.token != "TokMUL" || string(lex.literal) != "mul" {
|
if lex.token != "TokMUL" || string(lex.literal) != "mul" {
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
10
aoc2024/day04/example.txt
Normal file
10
aoc2024/day04/example.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
MMMSXXMASM
|
||||||
|
MSAMXMSMSA
|
||||||
|
AMXSXMAAMM
|
||||||
|
MSAMASMSMX
|
||||||
|
XMASAMXAMM
|
||||||
|
XXAMMXXAMA
|
||||||
|
SMSMSASXSS
|
||||||
|
SAXAMASAAA
|
||||||
|
MAMMMXMMMM
|
||||||
|
MXMXAXMASX
|
||||||
140
aoc2024/day04/input.txt
Normal file
140
aoc2024/day04/input.txt
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
XMXXMSSSMSXSXMMXSAMMXXSXMASMSSXXMAMXAMXSXMXSMAMMASXXASMMXMASXMSSXMMMXMXSXXSXMXXSAMXSXSXSAMXMSAMXMAXXXMXMAMSASXMSSXMSXSXXMAXXSSSMXMXMXMMAASXM
|
||||||
|
MSSMMAAXAMMSAAAXXAMSXMAMXMSMAMMXSAXMXMASAMASMAMMASXMAMAXXXMASAAAXMSMSMAMAMMAMAMMMMXMASMMXMXAMASXMAMMMMASMMSMMMMASAAXAAMMMMSMXAAMSAMSASMMMMAX
|
||||||
|
AAAXMMXMSMASXMMSMXMMASMAAMXMASAMMAXSAMASAMASXXSMASASMSMMMMASMMMMMMAAXMXSAMSAMASMASAMAMASMMMMSAMXMAXAASASAAXAAXMASMMMSMXAAXAAMSMMMAXMAXMAASMM
|
||||||
|
SSMMXSAAXMMSAXMAXAAXAMXXMSSSMSMAMAMXAMXXXMXSXMMMMSAMXAXXAMXAXXMAXMASMXASAXXMSAXXASAMAXAMXXAXMXXMSASXMMASMMSSMSMMSASAMXSSSSMSAAAXMMMMXMMSXSXA
|
||||||
|
XAAAAMMSMSXXMXAASXSMSMSMXXMAMXMASXSSMMXMAMAMMMAAMMAMMMXSSMSAMXSMSASMXXMSXMAAMAMMMSXMAMMSXSASASAMXASXAMAXMAAAAXXMSXMXMXMXMAXAMXSAXAAXAXAXAMXS
|
||||||
|
SXMMSXAXASXAMMMMSXMXMASXMMXMMSMAXXMAMAMXAMASASMSMXAMXMMAMASAMXSXMMXAXSXSAMXMMAMAAMXMASMAXAAMAMSMMXMMMMMSMMMSAMXAXMMMSXSASMMMSMMMSSSMMMMMAMSM
|
||||||
|
AAXAXMSMAMSMMAAMSMSAMMMAMAASASMASMSAMAMMASASASXMASMSMSAAMAMAMAMASXMMMAASXMAXSASMMXAXAMMMMMSMXMAXSASASAMXXSMMMSMMMAXAAASAXSAXXAAAMAMXSASMXMAS
|
||||||
|
SSMMSMAMSMSXMSMMSASXSXSAMSMMASASMMSASASMXMMXMMXMASAAAXAMMXSAMASMMMAXXMMMXSAMXXSAMSMMSSXXAAAMMSSMSASXMASMXMASAXAMSSMMMMMMMMXSSSMXSAMXSASXMSMS
|
||||||
|
XMAMAXMXXAMAMAMAMXMXXASAXAXMXMXASASAMASMSAMXXSSMMMMMMMAMXMSASXMMASMMSSMMMSMMMMMMMASMXAMSMSMSAMXAMAMAXAMMMMAMMMSAAXSASASASXMAMAAXMASXMMMMXSXS
|
||||||
|
SMASXSXASASAMAMXSSSSMASXMASMSMSAMXMAMXMASAMSXMAASAMSXXMMXASAMXMSAMAAXXAAAMAMMAAMXAXXMAXMAAXMAXMXMSMSMMMMAXMMSAAMXSMXSASAAMAMSXMMSXXAXAAXMSAS
|
||||||
|
XMAXMXAXSAMXXXMAMXAAXMMMXAAAAAXASMSSMXMXMAMXASAMMASMXSXMXMMAMAAMASMMSMSMXSAMXMMSMSSXSXMMSMSSSMXXAMAXMAXSAXMAMXSAMXXXMMMMMASXSMSXXMMMSMMMAMMM
|
||||||
|
SMSSSXSAMXMMSMSMXMSMMAAXXSXSMMSAMAMAXXXXSAMSAMASMXMMASAMXXMAMSSSMMAXAXAXXMMXSAMSAMAMXAXXMXAAXXAXMMSMMSAMXSMASAMAASAMSAMXXSMAXAMMXAAMAMXSMSMS
|
||||||
|
SAXAMAXAMAAASAAAAMAXMMXMMXMXAMXAMAMMMMMMSSXMAXAMAXAMMMMSAMSMXXMAMXMSXSMSMSAAXAMMAMMMSXMMXMMSMAMSMAMAAXMSAAXAMXSMMAMAAASXMMMMMSMMMSXSASMSAAAA
|
||||||
|
MMMAMMMSXSSMMSMSXSAMMSMMASXMSMSMSASXAXAXMXXSXMSSXSMXSXXXAXAMMMXAMAAXMSXAMMMSSMMSAMAMAAMSAMXAMAMXMAXMMSAMXSMMSAXASXXXSXMXXAAAAMAMAMXSAMAMSMMM
|
||||||
|
SSSSMMXMXMXAAMXMASAMSAMMAXXAAAAAXASXMSXSAMXMAXXAXXMASMSMMSMSAMMSSMMXAMSXSAMXAMAXXXASXMMAMMXXSXMAXMXSAMXMAMMXMASMMMSXMAMAXXSSMSAMSXMMSMMMMMMM
|
||||||
|
SAAXMMAMAXSSMSAXAMAMMAXMMSMSMMMSMSMMXAMMXAASMMMXMAMASAAAAAASMSAXAAAMMMMMSASMMMMSSMMXAXSMMSAMSAMAMSAMAMAXSXMAMAAXAAAMSXMASXAAMMMMAAMAMXXXAAAA
|
||||||
|
XMSMSMASMMMMASMMSSSMSSMSAAXXASAMXMAMMASMMSXSXAMXSXMAMXMSSXXMAMXSMMXSAAAASXMASXSAMMSSSMXAAMAMSAMSSMASXMSAMXSSSSSMXSAMXXSASMMMMAAMSSMAXASMSSSS
|
||||||
|
MXMAASMMMAASXMXXAAXMAAAMSSMSXMASAMAMSSMAAXAMMMXXMXMAXAXMAMXMXMXXXMASXSMXMMXAMXMASAXMMAMMMSMMMAMXAXAMMMMAMAMAAXXAMMMXXMMXMXSXSSMMAMMSMXMAMAMM
|
||||||
|
XAMMMSXAXSXSMMXMMMMMSMMMAMASXMAXXXXMXAMMXXASAXXAXMSAMSSMSAMXAMXMMMXSAMXAASMSSXSAMMSAXSMSAAAASAMXSMXXAXXXMAMMMMSXMAAMMMXAAXXAMXXMASAAMXMAMAMX
|
||||||
|
SASMAMMMMMASAMXMMXSAAXXMXMXMASXSMSMMSAMSSSSMAASMXMASMAAAMASMAMAAXMAMXSSMMMAXAAMXMXMMMXAMSSSMSAMXAAMSSSMMSXSXAXMAMXMMAXXMSMMMMAXSAAXASXSMMAXX
|
||||||
|
MASMMMAXAXAXXMXSXXMAMSAMMSXSAMAAAAAAXAMAAMMMXMAAAXAAXAAMMAMMAXASMXXMSMASMMMMMMMAXAASAMXMAMAXMXSMMXMAAAAAAASMMMMAMMSSXMXMAMAAXSMMXXXSAMXASMMS
|
||||||
|
AASAMMSXMAMSSMASMMMAXMASAAXMASMMSMMMMSMMSMSSSXMSMMMSAMMSXASXMSMXMAAMASAMXAXSMXSMMSXXMXSAMXXMSSMMXMMMSMMMMAMAMASXMAXMASMSMSSSXMAMAMSAXSAMXSAA
|
||||||
|
MASAMAXXXMAAAMAXAMXXXSAMMMMMMMXXXXXSAXAXMAAAMXMAXXXMAMAMMAMXAAAAMSSMAMMXMMMMAAXMAMMMMAMAXXMASXAXMXAAXMAMXASAXMAAASMMMMMAXAXXMXAMASAAMXXXAMMM
|
||||||
|
SASAMASASAMSSMASXMMSAMMMMASXMASMXMMMASAMXMMSMXSAXSMSAMASMMSMSMMMMAAMAMXSAMSSMMSMASAAMAMAMXASMMMMMSMMSASAMASASMMSMXAAAMMMMXMSMSSMXSMAAMMMXSAX
|
||||||
|
AAXAMXSAMMAAAMASAAAMXXXASASAMMAMAMAMMMMMMSMMMMMMSMASXSASAAAAAXAMMSSMSAAMAMAAXXXMAXMMSXSAMXSAXSAAXAAXMAXAAMMMMAAMASMMMSXXXAAXMAAXXMXMXAAMAMMS
|
||||||
|
MXSSSMMMMXMSXMASMMMSMMSXSASXMMMSXSXXXAXAAAAAMAAXAMMMAMAMMMMMMMMSAMMAMMXXMMSSMMAMSSMXAMMXSMMSXMASMMSMMAMXXSASXMMMAMMXAAMSMMXXMSSMXMASMMMSXSAS
|
||||||
|
XMMAAASAMXXAMMXXAMAXAAMXMAMAASXMAXMASMSMMXSMSXSXSSMMXMSMMSXXAAXMAXMXMMMSMAAAASMXAAMMAMSASXMXMSAMXAXXMSMMASAMXMAXSMSXMSAMXSAMMAAAASASMMMAAMAS
|
||||||
|
MMMMMSXMSASMSXSSSMAMSXSAMAMMMSAMXMXASAAMMMMASAMXMAMMMAXAAAMSSSSSMMAAAASAMXSSXMMXSMMSAMMMSASAMXMMMSMMMXAXAMXMSSXSAAXAMXXSAMASMSSSMXAMAASMMMAM
|
||||||
|
MASAMXMXSAMXAAXAMMXXMASASXSSSSMMMXMXSXXSAAMAMAMMAMASMMXMAMXAMXMASMXXSMSASMMMMASAMAXMAMAXXMMASMMAAAAAASAMXSAXAAMSMMSXMAXMASAMAXAAAMSMSMSAAMAS
|
||||||
|
SASMSAAAMASMMMMAMXMASAMXMAAXASXASAAMMXASMSMAMXMAMSAXSMAMXSMMMSMMMMAXXXSAMAAAXXMASMMMASMSSXSAMASMSSSMXMAMAXXSMXMXXASMMMXSAMXMMMMMXMMAXASMMSAS
|
||||||
|
MASXSMSXMSMMAXMXMASMMMSSMMMMMMMMSMXAAXMSXAMSMSXXAMXXMMMSMMASAMMXSMMMSAXMASXSSMMXXMASXAMXAMMMSXMMMAXMASMMSSMMXMXXMXXAXAAMASXAMAXMXMMSMMMXAMAS
|
||||||
|
MSMAMAMMXXASMSMXSMMXASAMXMXXAASXMMSMMMXMXMXMAMMSMMSMSAMAMMAMASXAXAAAMMMSXMAMMXSXMXMMXSASAMAXMAMSMMMSAMAAAAAMXSMMSASMMMMSMMMMSMSMXSAMXAXMMMAS
|
||||||
|
SAMXMXMMAMAMXXMAMAASMMMMSXMSSSSXAASAMSXMXXAMAMAAXMMASXXXSMXXAMMSSSMSSXXMASMXAASMXAAAMXMSASXXSAMXAAAMAMMMMSSMMMASXMAAXAAAXMAXAMAMXMASMMSSSMSS
|
||||||
|
AMMASXAMMSMSMSMSSSMXMASAMMMAMAMMMMSAAMAMSMMSSMSMSAMXMSMAMXSMXMMAXXMAMAMXMMXMMXSASMSSXSXSAMAASAMXSMSSMSSSMXXMAXSMAXSMMMSSSSSSSSSSXSAMAXAAAMAS
|
||||||
|
MXMAXMAXXAASAMAAAMMMSAMASAMASASXMASMMXAMXAXAXAMXMMMAAAMAMAXAAMMMSMMMSSXXAXAAMMMMMAAAASAMSMMMSASAAXXAAAXAXSSSSSMSSMXXAMMAMXAXXAMAASMSSMMSMMAS
|
||||||
|
XSMAXMSSMSMMAMMXSMAMMXXXSAMASXSXMXXASMXMMMMMXSSMAAXASMSSMMSSMSAMXXSMAMXMASMXSASXMMMMMMAMAXXXXAMMSMXMMMSMXMAAMXAAMAASXSMMMMMMMMMMMMAAXAXMAMMM
|
||||||
|
AMMAMSAAXMASXMXAMMASMMSMMMSXMAXAXAXAMMMSSMAXSMAMSMSAMXXMAXAAXSASMAMMAMASXSAASXSAXXXXSSSMMSSSMMMXMAMXMXAXMMMMMMMMXSXSASAMASAAXAAAAXMASMMMSSSM
|
||||||
|
AMAXMMASMXXMASAXMASAAASXAAMASMSXMMMMSXAAASMXXMXMAMMAMMSSMMSSMSAMMSMSXSMSAMMMSSSXMASXXAMXXAAAAASMXAAAMMXSAAAAAXAXXMSMASXMASMSMASXSSMMXAXXAAAS
|
||||||
|
SSMSMMMMMXSSXMASMMMSMMMMXMSAMXMAAXAAAMMSMMMXXSMMXMSAMXAASAMXMMSMXXAAAXAMAMAMMASXMMXMXMMMMMSMSMSASMSXSAXMMSSSSSMSAXXMAMAMXMXXAMXXAAXAXMMMMSMM
|
||||||
|
XAASASAAXSAMXMASAAXAXMASAXMXSASXMMMSSSXMASMSMAASAAXMASMAMSMXXAAXAMXMMMSMASASMAMMMAXSMXAXAAMMMXMAMAXAXMMXXMAXAAASMMSMXSMMASMMSMSMSMMMMSASAMXS
|
||||||
|
MMMSAMMSSMMMXMASMMXMMSAMXMASMAXXAXXAAMXSMAAAMXMMAXXXMMXSSMSMMSSMMAAXMAASASAMMAXAMSSMASASMMSASMMAMXMMMSAMSMSMSMMMMSMXAMAMASMAAXAMMXAAAAAMXSAS
|
||||||
|
SMXMAMAMXXXMAMASAMXSAMMSSMMMMAMMSMMXMAMMSMSXSMSSMMSSSMAXAAAXAAAMSSXSASMMMMMSSSSSSMAMXMAAXAXXXAXXXAASAMASXAXAXAAAMASMXSAMMSMSMSMAXASMSSMSXMAS
|
||||||
|
SAXSAMXSASMSASASAMXMASAAXAAXMAMAAXMAMSMAXXXAMXAASXXAMMSSMSMSSMSMMAAAMXXAMSMMAAXMAMAMXMXMMMSSSSMSSSXMASXMMSMSMSXMSAMMXSXSXXAAAMXMSMXAMMMXAMAM
|
||||||
|
MXMMMAAMASASASMSAMSMSSMMSSMSMAMSSMMMXMMSMMMMAMSSMXMXMAXXAXXAASAAMMMMXMMXXAAMMMMMAMXSSMAXAXMAAAXAAXXSMMMMAXAXAAXXMXSMMMMMMMSMSMAMMXMSMSXSXMAS
|
||||||
|
MAMXSMMMAMMMAMASXMAXAXMXMAMAMAXMAMXAMMAMAXASAAMAMMMSMMSMXMMXMMSXMXXMXMASXSMMXSAMXXSAXSASXSSMMMMMSMMXASAMXMMMMMSXAMXMAAAMAMXMMMXSMAXXAMXMAMAX
|
||||||
|
SMSAXAASMSSMMMAMASMMMSSSSSMSSMSMASXSXMAMMSMSAXSAMAAAAMXXSXAMSAMXMASXSMMSAMAMAMAXASAMXMMXAXAAMXMXMAMSXMAXXAXASMMMSMAMSXMSSSMMAMXMMMSMAMASXMSS
|
||||||
|
XAMMSSMSAAMXXMSSMXXXXAAMAXAAAXAMMMMXAMASAMXXMAXAMMXXSMASXMXSAASAMAMMAAMMXMSMMSSMMSSXMSSSMSSMMMSMSAMMXSAMSMMMXAAAASMXMXMMXAMMMMAMAMXMAMMSAAXA
|
||||||
|
MMMMAMMMMMSSSXAAXXMMMMSMAMMMMXXMAAAXXMAMMSSMMSSSMSXMMMMMAAXXXMMAMASXSXMAXXXAXAMAXXASAMXAXAAAMAAXSMSAAMAMAASMSSMSXMXAMASXSXMASMMSXSASASXSMMMM
|
||||||
|
XXAMSSMXAXAASMSSMMMAAAAMMMXXXMSXSMXSAMXSMAXAXMAXAAMSASXSSMSMSSSXMXSXMAMMSMSMMXSXMAMMXXXMMSSMMMXXXAMMMSXSMSMAAMMXXMSXSAXAMASASAXAAXASAXMXSAAX
|
||||||
|
SSMSAAMSSMMMMMAAXAXSXXSSSMSSMMSAAAASAMASMSMMMMAMMMXSASAAMAAASAMXMASMSAMSAAAASMMMSAXSSSSSMXMAASXSMMMSXMXMMMMMMXXAMMMAMMMSMAMASMMMSMXMXMMAMXMS
|
||||||
|
AAXXMMMAMXAMXMXMMSMXAAMAMAMXAAMSMMMXAMASMAASAMXSASAMMMMMMXASMXSASMXAXASMMMMXMAAAXAXXAAAMMAMXMAAXAXASAMMMASXSMMMMSAMXMXAMMXSXSXMAXAMXXXMASAXM
|
||||||
|
SSMSXXMAXSAMXMXXAXAMMMSAMXMMMMXMXXASXMASMSMXASASASMMAMAXMMMMMMSASXSSMXSMAAMASMMSSSMMMMMMSSSSSMMSSMASAMAMAMXAAAAXMMSMMMMSAMXMMMMAXXMXMMSAMASX
|
||||||
|
MAAXMXMMMMSMXAAMXMMXMASAMASXASAMXXMAXSXSAXMSMMXSAMXSASMSMSAAAAMAMAXAAXMMSSMASAAAAAMSMXSAAXXAXXXXMMMMAMSMASXSSMMSXAAAXAXMAXSAASMSSSMASXMXMSAX
|
||||||
|
SMXMAAXSAXAXXMXXXAXSMMMAXAMMAMXSXSXMXSAMAAASAMAMAMASMSAAASMXSSMSMSMMXSAAAAMSMMSMSSMXSAMMMSMMMSAMXAMMSMXMASAMXXMAMSSSSSMSAMXSXSAAAASXMAXAXAAX
|
||||||
|
SAASXSXSXSMSMMASMMMASASMMSMSSSMMMSAMXMAMSAMXAMXSAMXSXXAMMMXMAMXAAASXASMMSSMXAXXAAMXMMMXAAAAAAXMASASAAXAMXSAMAMMMMAMXXXXMASAMMMMMSMMMSSMMXMSM
|
||||||
|
MSMSAXXMMXXAXAAMAAAAMMSMAXAAAAXMASXMASAMMSXSXMAMXSXMXXXXSAMMASXMSMSMMSAAXAASXMMMMSAMASMMXSMMMMAMSAMXSSXSASAMXMAMMAMMMMXXAMAXAXAAAAAXAMXSAAXM
|
||||||
|
MAXMMMXSASXMSMSMSAMXSASMXMMMSMMMMSASXSXSAXXMASXMAMAMMMMMMASMASAXAAXXMMMMSAMXMXAMASXXAXAXAXMAMXSAMMXSAMAAAXXMAMASMMMAASAMSSMMSMMMSSMSSMASMSMS
|
||||||
|
MSMAMAAMXMAAAAAMXSXXMASMMMAMXMASMSAMAMAMMSMSMSAMXXAMAAAAMXMMASMMMSMSSXMXSXSAMMSSXMMASXMMXMASMMXAMAMMAMMMSSSSSMMMAASMSMMMAAAAXASAMXAAXMAXXXAX
|
||||||
|
MAMAMMSXMXMMMMMSAMXMMXMAXXAMXAMXMMXMAMAMXAAAASAMASXSSSSSSXXMASAXXXXAAXSASMSASAAMMXAXXAXXAMAMMAMAMAMMAMXXAAAXAASMSMMXXAAMMSMAXAMXXMMMMMXMAMSM
|
||||||
|
SASASXAMSSSMXAAMAXXAMXSAMMXSASXSXAXMASXSMMMMMMAMMSAAAMAAMAXMXMAMXXMMMMMASAMAMMSMASMMSSMSMSAXMASXSXSMSMMAMMMMMMMAMSMMSSMSXMASMMMSSSMSAASMSMAS
|
||||||
|
SASASMASAAAMSMSMSSSSMAMASXMAXMAXMMXSASAMASAXAXXMXSMMMMMMMMXSSMSSXSAXXSMAMMMSMMMAXAAXAAAAAMMSMMSAXAAXMAMXMMSSSXMXMAXAAXAXASAXAMAAMAASMSMAAAAS
|
||||||
|
MAMXMAMMMSMMMAXMAAAXMAXAMXXMSMSMSAAMAMAMAMASXSAMAMSXXSMMXSAMAAXAASMMAXMMSMMMASXSSSSMSSSMSMAAXSMXMMMASAMXMMAAAXSXSSMSSMMSAMASAMMSSMXMXAMAMMXS
|
||||||
|
MXMMMSXXAAAXMAMMMMMMSMSMSMMXSAAAMMSMSSMMSSXAMSAMSSSXMMASAMXSMMMMMMMMXXAXMAMSAMXMAAMMMAAXXMMSXSASXSXAXAMAXMMXMMXAAAAXXAMMXMASAMSAMXAMXMSMXSAM
|
||||||
|
SAMXAXMMSSSSMSSSMASXAMAAXAMAMXMSMXXXMAXAMXMMXMAMMXMXMSAMMSMMMXAXXMASMXMSSSMMAMXMMMMMMSMMXSMMAMAMASMXSASASMSSXSXSMMXMASXAXMXSXMMMSSXSAAAAAMAS
|
||||||
|
SASMMMAAXAAAAAAASASXMSAXMSMMSMMMXMSXSAMMSAAXMMSMMASAXMAMAAAAMSASMSASAMXAAAMXAMXXAXXAAMASASAMAMXMAMAASAMMSAAXAXAXAXSSSMMMSMAMAMAXAAASMSMXXMAM
|
||||||
|
SAMASMSMMMSMMMSMMXSAMAMAAXXAMAAXAMAAMAMMSASAXAMASASASMSMSXSMXAMXMMXSXAMMSMMMSMSMSSSMSMMMMMASXMAMXMXMMXMAXMMMMMXMXAMMAAXXAMAXAMXMMAMXMXMASMMS
|
||||||
|
MAMSMMAAAXMAMXAMXAMAMASXSSMMSSMSSMMSMSAAMXMMMXMAMASAXAXAXAMMSSMAXSAMXMAMXXSXMASAMAAXMASASXXMMSAMAMAXASMSMXXASMMAXMSSSMMSXSMSSSXXSASAMXMAMAMX
|
||||||
|
SSMMASMMMMASXMAMMAMAMXMMAAAAAAAAMMXXAMMXSAMAXMASMMMXSMMAMXMAXASXSMASXMSMMMAAMAMXMSMMSASASMAMXSASMSASMSAAMXSXXMASXMAXAMXAXMXAAAAMMAXMXAMAMSMM
|
||||||
|
XMAMAMXAAXMAASMMMSSMSSSMSMMMMSMMXXXMAMXASASMSMAXAXAASXSXSMMMMXMMXMAMMAAAASMMMXMXMAMXXXMAMMAMAMXMXAMSAMMMSASAASMMAMMSSMMMSSMMSMXMMAMMSMSMXXAS
|
||||||
|
ASXMSSSMMXMSMMMAAAAMAAXAAMASXXAXXMXSSMMMSAMXXMMSMMMXSASAMAAXMMXXMASAMSMSMSAMSASXSASXXXAASMMSXSXXXSSMMMXXMAXAXMAMMMXAAAAAAAAAXAXXMAMXAXXMASXM
|
||||||
|
XSXAXAMXSXMMSAXMMSSMMSMSMSASASXMASAXAXMMMMMMAMXAMXMAMXMAMMMXSAXAASXSMMXMAMXMSAAASAMMMSSXSAMXXMMXAXMAXAXSMSMASMXMSSMSSMMSSSMMSXMXMASXMMSMASAM
|
||||||
|
XMMMMAMAMAMASMMSMMAXAXAMXMAXMAMXXMMSMMMAMXAAAXMSSSMXMASAMXAXXSXMXAAAXSAMXMSASAMXMAAMMAMMSAMXAAMMMMSMMASXAMXAMMMMAAXMAMAAAAAASAMXMASAAAMMASAM
|
||||||
|
MMAMSAMAXAMXSMAMAMAMMSXMXSMSXMSMAAAAXASASMMSMSAAAXSAMXMMXMASMMMSMMMMXMXXAXMAMMXXMSSMAASASMMSMSXAAMASASMMSMMMSAAMSSMMSMMMSMMASMMMMXSAMMSMAMXM
|
||||||
|
XSAMSXSSSXMXXMAMAMXSXSAXAXAMXMAMSMSSMMAMXMXAAXMMMMSMSAAXAMXXAAAAAXXXASMSMSMSMSMSMAAMSMMMXAMXAMMSXSAMSAXAAMAMMMMMMAAAXASXXXMAXMASXMMMSXXMSSSM
|
||||||
|
MSXMMAMMAMSMSMMSSMXMASAMMMXXASAMMAAXXAXMAMSMSMXXSASMSAMMASAMSMSSSMXMAXXAXXXAAXAAMXMXXXXXXMMMXMAXXMAMXMMSSSSSSMSASXMMXMMAMXMXMMAMMAAAMXAXAAXA
|
||||||
|
AXMAMAMXAAAXMAMAXSXMAMXXXAMSXSXSMMMSMMASAMAAXAXXMASAMASXMMMMMAXAMMMSSMXSMSXMSMSMSMXMXMMSMSASAMXMMMMMXXAAXXXAAAMXMMSSSXMXMAXASMMSSSMSMSAMMSMM
|
||||||
|
AAAAXAMMXSXSSSMASXSMASAAMAXMASAMXAAMMAAXMSMSMMSASMMAMAMAXAXAMMMMXSAAAMAMMSAXMAMXAAASMMMAASAMXMXMAMMMSMMSSSMMMMSMMXXMAASXMXSXMASMMXAXMXAXMMMM
|
||||||
|
SMSSSMMSAMAMAXMSMAXMMMMXSMSXMXSXSMSMSMSSMXAAAASASMSXMASMSXSXSXXXAMMSMMMSASMMMAMSMSASAAMMXMXMASAMSXAAAAMXAXAXMXAAMSMMSMMAXMAXSMMAAXMMMSMMSAMX
|
||||||
|
XMMAAAAMAMSMSMXAMXMMSMMAAAXAMSMXSAXAAXMAMSXMSMMXMAAXXAXXMXSAMMMMMSAMXSXMMMMASAXXXMASMMXSAMMSASASAXMXSSMXMSMMXSMSMAAXAAXMMSAXXSSSMMSAXAMMXASA
|
||||||
|
XAMSMMMSSMXAAASMMMAXAAMSSMXSMAMAMAMXMXMAMXMXXXAXMAMAMXSAAAMAMAXAAMASAMAMAMSASMSMXMMMXXMMASAMXSXMMXSAMXXAXAASAMXAXXMSASMSAMXSAAMAAAMXMMXXMASX
|
||||||
|
SMMMAMAAMAMXXXMXXASXMSMAAMAMSMSSMAMSMSMASXAXSMSMSAXMAXSAMXSSMSSSSSXMMMAMMMMXSAAXAXMAMMSSXMMSAMAMXAMASAMMSSMMASXXMMAMAMAXMMXMAMSXMMSSMSAMSAMX
|
||||||
|
SXMSAMMSXXMSMMMSXMXAAMMXXMAMAXMAAAXAAXSAMMSMMAAASXSASXXAAAMAAAXXAXAXXXAMXASAMXMSXSMMSAAAXXMMASASMMXXMASAAAASAMMAMSASAMMMSSMSSXMXMXXXAAAMMASM
|
||||||
|
MAASXSSXXMMAXAAAAXXMSXAMSMMSAXSMMMXMXMMMXAAASXMXMMMMMXSAMXSMMMSMMMSMSSSSSXMMSAMXXXMAMMSMMSMSMSASXSXMMAMMSMMMAMXAXSAMXMSAMXAXMASXMMMSAMXMSSMM
|
||||||
|
SSMXMMAMXSSMSMSSMMXXAMAMMAXAMXSAAXASMSASXSSXMMSXXAAAAXXXSASMAASAAAAMXAAXMAMASMMMSSMSSMAMXXAAAMXMASMXMASXAXMMAMSMXMSMMXMSSMMMXXMAASASXXMMSAMX
|
||||||
|
AXMASMAXXAAMAAAAAXXMMMXMSSMSMASMMSAMAMXXAAMXMASXSSSMXSXMMASAMAXXMASMMMMMSAMXSMSMAMAAAAASAMXMMMXMMMAASXSMSSSMMMASAAAMMSMAMAMSXSMSMMASMMAXXAMX
|
||||||
|
MAMXXMASMMSMSSSXMMMMSSSXAMAXMAMXMAMMAMMSMMMASMXAMXMXAMXMMMXMASXXXMAXAAAXSMSXSASMSMSMSSMSASXSMMMSMMSMSMSAMAMXXSASMSMSMAAASAMXAXAAAMAMASMMSAMX
|
||||||
|
XSSXSAMXAXMAXXMASXSAAAMMMSSMMMSMSAMXXMAAAASXSXMMMAAMMSAXAMAAAXMASXAXSMSMSXSXMAMXXAXAMMXXAMASAMASAAXAXAMAMAMXXMXMAMAAXSSMSASMMMSMSMMSXMAXSMMX
|
||||||
|
XAAAMASMSMMXMMMXXAMMXXMAXMAMXMAAMASXMMMSXMMAMXAAMAXSXSXXXMXMMMMMMMMMMMMMMASXMAMMMMMMMSAMXMAMAMXSMMSMMXSMMAMSMMAMMMSMXMAMXXMAMAMAXMASXMXMSAMX
|
||||||
|
MMAMMAMAAXMAMMMSSSSXSAMXXAMMAMMSMAMAXXXXXSMSMAXSXSASMMASMMSMSASASMXAMAAAMAMXSAXAAXSSMXSMAMMSXMXXAAAXMXSXSAXAAMSMMAAXAAAMMMSXMASXMASXMSXXXAMX
|
||||||
|
AMAXMAXXMASAXAMXAAAASAMSSSXSSSMMMSSXMXXXAMAMXMSAAXASMSMMAAAASASASAMSSSMSMXMXSXXSMMMAMAMMAXMAMXASMXXSXAMAXXXSMMAAMSSSXSMSXAXAMASASXXAXXMMSSMM
|
||||||
|
SASMSMSMXAMMMSXMAMMMMAMAAAAAAAAMAMAMXMMMXMXSAMMMSMASAAXXXMMMMMMMMAMMAXAXAASXMXXAASXSMAXMASMMMMMMMSMMMXSMSSMMXSSXMXAXMXAXMMSXSAMAMASMMMMAAXSA
|
||||||
|
ASMAMXAXSXXSAXXSAMAXSXMMSMMMSSMMXSAMAAAASMMMMSMAXMAMXMSASMXXXAAAXXMAMMMMMMSAASMMMMAXSXSMMMMAAAXAAAAASAMXAXXAXMASMMMMMMXMAMAXAMMAMXMMAAMSSMAS
|
||||||
|
SXMAMSSMSAAMASMMASXMMAMXMXSMXMMAMSASMSMXSAAMXAMXSMMSMMAXMASMSSSSSSXAXAXAAMMMMMXSAMXMXMSAAASMSMSMSXSAMAXMAXSMMXAAXAMAASXMSAXAMSSSSXASXMXAXAMX
|
||||||
|
AXMSXXAAMMMMXSASAMXXSAMASXSAAXMAXXMMXAMMMXMMXMSMMAMMMXSAMXSXMXAMAMSSSXSSSXMSAXMAMXMMMASXMMSXMASAMXXMMMSXSAXMASMSSXXMSSMAMMMMXAAAMXXMAXMXSXXM
|
||||||
|
MASXMSMMMXXXAMMMXMMMMASAMXMMSMSMSXSSSSMAMMSSSXSMSAMAAXMMSMMAMMXMAMAXMAXXXAASMSXMASAAAXMSSMSAMXSASMSMSAAAAMMMAXSAXXMXMMMAAAAMMMSMAMXMAMSASAMX
|
||||||
|
XMXAXAMASXMMMSSMAMXAXXMMSSMAMASASXAAAXMAMXAAMASASMSMSXSASASAMAMSSSXMSMSAMMMMASMXXASXMSAMXAMMMAXAMAAAMMSMMXXMSXMXMASAAXSSSMXXAAAXAMMXSXMAXXAA
|
||||||
|
MXSMSMSASAAXAAAMAXMSMMAAAAMAXAMAMMMMMMSASMMMMAMXMASXMAMAMAMMMMMMASXAXAMAMXMMXMAMXMMSMMXMMMMSMSSSMSMMMXMAXXAMXAMXMAXMSMAAMMMSSSSSSXXAMAMAMSSM
|
||||||
|
AMAMAMMMXMMMMSSSMSAMASMMSXMXSSMMMMXSXMXAMXASMMSMMMMASXMSMSMXSMAMAMMXMMMMMAMSAMAMXMASXAXXXXAXXAAAMXMSXXSXMSXAXAMMMMMXAXSMXAMXXAXAAXMASAMAAAAM
|
||||||
|
SSMSASMMXMAMXAXAMMMSMMAXMMSAMXAXMAASXMMSMMMSAAMAAMSXMSAAAAASAMXMXXMAMAAAMXXSAXMSXMMSMMSMMMMSMMSMMAMXMAMMXMMXSAMAAMASAMXSSMSXMXMXMMSASXSMMSSM
|
||||||
|
XAASASAAASXSMMXXMAMXASAMMAMAMSXMMMXMAMAMASASMMSSMMAAXASMMAMMMXAMAMXMMSSSMXASAMSXXSAMXMAXAAMSMXAASXSASXSMAXMXSASMMXAMASAAMXMXASXMXAMXXMXMAAAX
|
||||||
|
SMMMAMMMMSMAAAASMSSSXMAMMAMAMXMMSMSSSMASXMAXXXAMXAXXMMXMXMSMXXMMASAAXMAXAMXMXMAAAMASXSASMXXXSSSXMAXASAAXMXMAXXMASMSMAMXMSASMSAXAXSMXXSAMMXSM
|
||||||
|
SAXMXMMXMXMMMMXSAAAXMASXSSSMSAMMSAAAXXAMAMXMSMMSSXMMSMASAAAMAMXSASMSMMAMXMAMMSMSMSAMAMMAMMASAMXMASMAMMMMSAMSSXMAMAXMXMSXSAXSMXMSMAMAXMAMSAXX
|
||||||
|
MMSMMMSAMMSMXMSMMMMMMAXXAMAMSMSAMMMMMMSAMXAAAASAMASAAMASMXMXMAMMASAAAMMMXXMXAXAAAMMMXMMAAXXMASMXAXMXSAMASXSAAXSSMSMMMMMMMMMMMMAAMAMXSSMMMASA
|
||||||
|
MAAXAMSASAAMAMXMAXXAMXSAXSAMXMMMSSXXXAXAXSMSSSMASAMSSMXMXAXXSXXMAMXXSAAAXSSSSMSMSMAXAXSXMXXXMAMMSSXAXAMASXMAMMXMAAXAAAAMASAAAMSMSMSSMASXMMMM
|
||||||
|
MSSSXXXXMXMMMXASMSSSSXMMMXXSXXSXAMMMMMMMMXAAMAMAMXMAXXAASXSAAASMMSXMMMMSSMAAXMXMMXMSMMMAXSSMSSSMAXMMSMMMXMASXASMSMSSSSXMAXXSMXAAAMXAMAMXAAMX
|
||||||
|
MMAAXSSSMSXMXSASAAAMAAMXSXMMMMMMAXAAAASMMMMMXSMXMXMSSSMXMAXMSMMAMAMASAMXAMMMSSXMAXXXMAMXMAAAAAMMMMSAMAAXXAMXMSMAAXXMAXAMMSAMXSMSMMMXMASXSMMS
|
||||||
|
XMMMMAAAASMMAAMMMMMMSSMAMAAAAAXSAMSMSMMAASMSXAXXXAMMAMXAMMMXMXSXMAMXSAXXAMXMMMMMSSMXSMXAXMMMMMMSXAMASXSSSMXXMAMXMSSXMMXMAAAMXMXXAASXMSXMAAXA
|
||||||
|
MXSAMXSMMMAMMSXSXXXXAXMAMASXMXMMMMMAMASMMMAAXMMASASMAMSMSAAAMXMXSSSMSXXMSMXMAMXAMAMXMASMXXAMXXAMMASXMAXAASAMXMSAMAMMSMMMMSMMAMMMSMSAXMASXMMA
|
||||||
|
AMXXMAAAXSMMXAMAXMAMMMSSXMXMASXSXAMAMAMAAMXMXSAMAMXMAMXXMXXASAMMXAAASXMSAAMSSMMXSAMSMAAMXSSSSMSSMMSAMMMXMMMSAXSAMMSAAASXMAASAMMAMXSAMSXMAMMX
|
||||||
|
SSSSMMMSMMSMMMAMSAXXSMAXSAMXAAASMMXAMSSSMMMSAMXXASXMXSXMSSSXSXSSMSMMMAXSMSMXMASAMAMXXSMSAAAAXMAAXASAMSMSXXAMMMSAMAXXSXMAMXXSASMMXAMXMXMSXMXS
|
||||||
|
AAAMASMAXMAXAXSXSXMASMAMMMMSAMXSASMXXAAAXXXMASASASAMASAMAAXAMMMAAAAMXMMXMXMASAMASASXAMAMMSMMMMMSMMSAMAASAMMMSASXMXSMMASMMMMMAMAMSAMMMAXXAMMS
|
||||||
|
MMMSAMSAMSMSSXXXMAMMXMASXAAAXXXSAMASMMMMMMXSXMMSASMMASAMMMMXMASMMMMMSXMXMAXMMSAAMASMMMXMXMXMASAAAMMMMSSMAMAMMASXSXSASAAMSASMMMXMAMSASXMXAMAM
|
||||||
|
XXXMXMMMXAMAXMXSMXMMAMAMMMSMMMAMSMAMAXMSMSASAAAMAMAMASMMSAMXMXMAXXMASAMXSMSMMMMMMXMXXMAMXMAMAXSMMMAAAXAMXMXSMAMASAMXMMMASASXMSSSMASASAMXAMAS
|
||||||
|
XSAMXSAMAAMAMMASAXASASAMSAMAAXXXAMXSSMSAAMASXMMSASXMAXMAMASMMSSMMMMAXAMMMMAAAXAXXMASMXAMAMAMSMMMSXSSMSAMSMXMMAMXMAMXXXXXMAMXXAAAXMMMMAMSXSAS
|
||||||
|
MMAAAXAMSMMSSMAXMSXSXXAAMAMSAMXMMXXAMXMMSMXMMXXMXXAMMMMXSAMAAMAMSSMMXAMAAXSSMMSMMMXXAXSSMSASXAMAMXAMXSAMMAAMMXXXAMSMMMSMSMMMMMSMMXSAMAMAXMAS
|
||||||
|
ASXMSMXMMMAMAMXMXMAMAMSMMMMMSMXSXMXMASMXMASXMASMSSMMSAMXMASMMMAMMMASMMSSSMAXAAMMSASMSMAAASXSMMMASAXXAXAMXSMSMMXMAMAAAAAAAMAAAMXXXAXXXSMSMSAS
|
||||||
|
MMMAXMMSMMASXMMAAMXMAXAAXSAAMXAAAXMMMMMXXAMASAXXAAXASMXAMAMASMMSXMXMAAAAXMAMMMMAXAMAAMMMMMMSAMMMSXMMSSSMXXMXASMMMSSSMSMSMSSSSSSMMAMSMXAXAMAS
|
||||||
|
MAMAMMASASXSAAMSSMXSASMSXXMSSMSSXMAAAMXMMMMXMSSMSMMXXMMMMAXXMAAMAMXSMMMSMMXSXAMSMSMSMMXXAXAMAMSXMAMXXAMMSAMSXMASAAXMAMAAAXAAAAAXASAAAMAMMMMM
|
||||||
|
SAMXSMASXMAMMSMAAMXMXXMAMMAAXAAMAMMSMMAXAMMXAXXAAXXMXSAMSSMASXMMAMASAMXMAMAMMXMXAXAXASMMSSMMAMXASAMMMMSASAMAXXAMMSMMSMMMSMMMMSMSAXSMMMSMMAAX
|
||||||
|
SASAAMMMAMXMAMMSSMAXMXMAXMAMMMMSSMAXMSSSXSASXXMXMSSMAMMMAASAMXASXSXSXMASAMASMMSMSMMMMMXAMAMXSMMMSASXAMMASMMMSSXXSXMAAAMAMAXXAAAMMXAXSXMASXSS
|
||||||
|
SAMXMAXSXMXMAXAXAMSSMAMSXSASXMAXMMMSAAMAAMAXAASXXAAMXMXMSMMXSSXMASAMMSAMAXAXAAAAAXMAMXMXMASAMAAXXAMMXSMAMAAXMAXMSAMSSSMASMMSAMXMSSMMXAMMMAXM
|
||||||
|
MXMMXSXMASXXMMXSAMASMAMXASAXAMSXSAMXMMSMMMMMSAMAMMSAMXSAMAAXXXMXAXASXSMSSMMSMSMSMSXSXMAXSAMASXMSMSXSMSMSMSMSAMXXSAMXMAMASAMXXMASXAXSMSMAMMMS
|
||||||
|
SMSXAMMXAMXMSSMSAMAXSASMMMSMSMAASMMXAXXAXAXAMAMMXMAMMASAXMASMMSMMMXMAMXAXSXMAAAMXMXXAMSAMXSMMAAXAMAMXXAMXXXSAXXAMAMXSMMMXAMXXXXSMMMSAAXSAMXA
|
||||||
|
MAMMMMAMSSXXAAXSXMSXMXSAXAXMASMMMSSMMMMMMMMXXAMXMMMXSASAMXSXAAAASASMSMXMASMMSMSMAXAXAMXMSASMSMMMMMMSAMMMMXASXMMMSSMMXMAXMMMMSSMSAAAMXMMMAMAM
|
||||||
|
MAMAMMSMMAMMXSMXMMMAMMSXMAMSMSXSAMXAAAASAMMXSASXXAAXMAMXMMAMMSMSXASAASAMAMAMAAAMMMMXMMMMMAMXMAMASAAXMXMAMMMMMSXMAAAXXMAMXASXSAASMMXMMMASAMXA
|
||||||
|
SAMMSAMASAMSAXMSXSSSMASMSMASMMMMAMSXMSMSASAAXAMXSMSSMMMASXAXAXXMMMMXMXXXXMXMMSMMSMSAMAASMSMXSAMXSMSXXAXASAMMASAMSXMMSMAXSAMSSMMMASXSAMASAMMS
|
||||||
|
SMSAMXSASAMXASASAAAAMAMAAMAMAAXXMMSAMXMSAMXSMAMXXMAAXAMAXSMMMMMSAAAXXSSMSMSXMAAXAASASMMSAXAAXXMMXMMMSXSASASMAMAMXMSASMAMMAMXMXMASMAAMMASAMAA
|
||||||
|
XAAMSMMXSMSMAMAMMMMMXXMMMMASMMSXMASAMMMMXSAMXSMSAMXSSMMSMMXXSAAXSMSXMXAAAASMSSSMMXMMXMAMXMMMSSSMSAMXAASXSXMMMXMMMAMASMMXSMMXSXXMASXMXSASMMXS
|
||||||
|
MMMAMXMMSASXXMSMSXXXAMSMMSMSMASXMAMAMAAAXMASXAMAMXAAAXAXAXMASMSXMXAXSSMMMXMAXXAMXMSSXMXMASXMAXAAMAMMMXMAMXSXMASAMAMAMASMMAAAXXMMAMXXXMMMASMA
|
||||||
|
XMMAMAAAMAMMMMXAXSSMMMAAXAMXMAMMMMSSXSMSSMSSMMMAMMMMMMAXSXMAMXMASMMAXAMXSSXSMSSMSAAASXMSASAMSXMMSAMAMSMSMASASAMAMXMXSAMASMMXSASMSSSMSSMSAMXS
|
||||||
|
MAMAMXMMMAMAAAMMMXMASXMSSXMAMMMXAAAAXXXMXMAMAXSXSASASMXXMXMASASMMAXMSAMASMAMAAAAAXSMMXXMASXMMAXMMASXSXXAMASAMXSXMSXXMAMXMAAXSAMAXAAAAAMMSMXM
|
||||||
|
ASXSSXSASMSSMXSAMXMSMMAAAASMSMSSSSSMXMAMSMMMSMMASAMAXMAMMAXMSASMSSMXSAMXSMAMMMMSMAXXSXSMMSAMSXMSSMMMMXMMMAMXMASAAXAMSSXMMMMXMMMXMSMMMSMAXMMX
|
||||||
|
SXAAAXSAMAAAAMSXMMSXAMMMXMXAAAAAXAMXAMAMXASAXXMAMAMSMSAASAMXMMMAAAMASAMXSMMSXXXAMASAMXXAAMAMMSMAAASXSAMXMMSMMASMMMXMAMAMSAMXXMMSXMASXMMSMMSM
|
||||||
|
MMMMMMMMMMMMMMMAMSMMSMASASMSMMMMMMMSMSAXSAMXSMMMMMMXASXXMMSAAASMSSMASAMXMAMXMXMAAXMMMSSMMSXMAAMSSMXASXXAXAXAMAMAXASMSXSMSMSMSSXMASMMMMAMAASA
|
||||||
|
AAXAXXAXXXSASASAMAMMMMMXAAAXMASAAAMXAAMAAAMAXMASAAAMXMSXAAMMXMXXMAMASAMMSAMMMASXMASXAXAMXAAMXSMMAASMMMSAXSSMMSSMMMSXMAXAMMAAAMASMMXASMAMMMMS
|
||||||
|
SSSMSSMSMMSASMXAXXSAXXSMSMSMSASMSMSMMMMXMAXXXSASXSMXMAMMMMSSXMMMSXMMMAMASMSXSASAXASMSSXMMSXMAMASMMSAAXMSMAAAAMAMXMMAMAMAMSMMASXXAXSAMMSSMXAX
|
||||||
|
XAAXAAMAAMMMMXMXSAMXSXMAAAAMMMSAXASAMXXMXXAMXSXMAXAAMAMAAXAMMSAAXXMXSAMXSAAAMXSAMXSAAAAXXMAMASAMMASMMMAMMSMMSSSMSASXMSSXMXXMAMMSSMMXXAXAAMMX
|
||||||
|
MSMMSSMMMSAAAAXMAXMAMMMSMMMSAAMMMAMAXXSMSMSMAMASXMSXSASMSMMSASMSMSAASMMMMMMSMXSASXMMMSXMASAMAMMMMAXASXXSAAAAAAMASAAXAXAAMXSMSSMAMAXMASMMMSSS
|
||||||
|
AAXAAAAXXSMMSSSXAMSAMXAAAAXSASAMMAMSAMXAAAAMASAMAAXMAXSAAASMMSAXAMMXMAMSAMXAXMSAMMAAAAXAXSXMMSXXMASAMMAMXSSMMSMAMSMAMMSMMSAMXAMASMMASXAAAAAA
|
||||||
|
SSSSSSMMXMAMMMXMAMSMMMSSSMXXMMMXSXSMSXMAMSMSXMXSMMMXMASXXSMSMMMMXMAMXAXSXMSAMXMXMSSMSXMSAMXASMXMAMAMXMMMMMAMXXMXXAXXXAXSXXXMSAMAXXASMSSMMMSM
|
||||||
163
aoc2024/day04/main.go
Normal file
163
aoc2024/day04/main.go
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
_ "embed"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
aoc "go.sour.is/advent-of-code"
|
||||||
|
)
|
||||||
|
|
||||||
|
// var log = aoc.Log
|
||||||
|
|
||||||
|
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||||
|
|
||||||
|
type result struct {
|
||||||
|
valuePT1 int
|
||||||
|
valuePT2 int
|
||||||
|
}
|
||||||
|
|
||||||
|
type record struct {
|
||||||
|
p aoc.Point[int]
|
||||||
|
d [2]int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||||
|
|
||||||
|
func run(scan *bufio.Scanner) (*result, error) {
|
||||||
|
|
||||||
|
m := make([][]rune, 0, 1000)
|
||||||
|
var records []record
|
||||||
|
var records2 []record
|
||||||
|
|
||||||
|
for scan.Scan() {
|
||||||
|
txt := scan.Text()
|
||||||
|
m = append(m, []rune(txt))
|
||||||
|
}
|
||||||
|
|
||||||
|
for x, row := range m {
|
||||||
|
for y, c := range row {
|
||||||
|
if c == 'X' {
|
||||||
|
rs := search1(record{
|
||||||
|
p: aoc.Point[int]{x, y},
|
||||||
|
}, m)
|
||||||
|
records = append(records, rs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
if c == 'A' {
|
||||||
|
rs := search2(record{
|
||||||
|
p: aoc.Point[int]{x, y},
|
||||||
|
}, m)
|
||||||
|
if len(rs) == 2 {
|
||||||
|
records2 = append(records2, rs...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, r := range records2 {
|
||||||
|
fmt.Println(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return &result{len(records), len(records2)/2}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func search1(r record, m [][]rune) []record {
|
||||||
|
var ds = [][2]int{
|
||||||
|
{1, 0}, // up
|
||||||
|
{0, 1}, // right
|
||||||
|
{-1, 0}, // down
|
||||||
|
{0, -1}, // left
|
||||||
|
{1, 1}, // up-right
|
||||||
|
{1, -1}, // up-left
|
||||||
|
{-1, 1}, // down-right
|
||||||
|
{-1, -1}, // down-left
|
||||||
|
}
|
||||||
|
|
||||||
|
var records []record
|
||||||
|
|
||||||
|
for _, d := range ds {
|
||||||
|
p := r.p
|
||||||
|
if !check1(m, p, d) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
records = append(records, record{
|
||||||
|
p: p,
|
||||||
|
d: d,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return records
|
||||||
|
}
|
||||||
|
|
||||||
|
func check1(m [][]rune, p aoc.Point[int], d [2]int) bool {
|
||||||
|
for _, r := range []rune{'M', 'A', 'S'} {
|
||||||
|
p[0] += d[0]
|
||||||
|
p[1] += d[1]
|
||||||
|
if p[0] < 0 || p[0] >= len(m) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if p[1] < 0 || p[1] >= len(m[0]) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if m[p[0]][p[1]] != r {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func search2(r record, m [][]rune) []record {
|
||||||
|
var ds = [][2]int{
|
||||||
|
{1, 1}, // up-right
|
||||||
|
{1, -1}, // up-left
|
||||||
|
{-1, 1}, // down-right
|
||||||
|
{-1, -1}, // down-left
|
||||||
|
}
|
||||||
|
var records []record
|
||||||
|
|
||||||
|
for _, d := range ds {
|
||||||
|
p := r.p
|
||||||
|
if !check2(m, p, d) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
records = append(records, record{
|
||||||
|
p: p,
|
||||||
|
d: d,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return records
|
||||||
|
}
|
||||||
|
|
||||||
|
func check2(m [][]rune, p aoc.Point[int], d [2]int) bool {
|
||||||
|
p0 := p[0] - d[0]
|
||||||
|
p1 := p[1] - d[1]
|
||||||
|
if p0 < 0 || p0 >= len(m) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if p1 < 0 || p1 >= len(m[0]) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if m[p0][p1] != 'M' {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
p0 = p[0] + d[0]
|
||||||
|
p1 = p[1] + d[1]
|
||||||
|
if p0 < 0 || p0 >= len(m) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if p1 < 0 || p1 >= len(m[0]) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if m[p0][p1] != 'S' {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
41
aoc2024/day04/main_test.go
Normal file
41
aoc2024/day04/main_test.go
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
_ "embed"
|
||||||
|
|
||||||
|
"github.com/matryer/is"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed example.txt
|
||||||
|
var example []byte
|
||||||
|
|
||||||
|
//go:embed input.txt
|
||||||
|
var input []byte
|
||||||
|
|
||||||
|
func TestExample(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||||
|
|
||||||
|
result, err := run(scan)
|
||||||
|
is.NoErr(err)
|
||||||
|
|
||||||
|
t.Log(result)
|
||||||
|
is.Equal(result.valuePT1, 18)
|
||||||
|
is.Equal(result.valuePT2, 9)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSolution(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||||
|
|
||||||
|
result, err := run(scan)
|
||||||
|
is.NoErr(err)
|
||||||
|
|
||||||
|
t.Log(result)
|
||||||
|
is.Equal(result.valuePT1, 2536)
|
||||||
|
is.Equal(result.valuePT2, 1875)
|
||||||
|
}
|
||||||
28
aoc2024/day05/example.txt
Normal file
28
aoc2024/day05/example.txt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
47|53
|
||||||
|
97|13
|
||||||
|
97|61
|
||||||
|
97|47
|
||||||
|
75|29
|
||||||
|
61|13
|
||||||
|
75|53
|
||||||
|
29|13
|
||||||
|
97|29
|
||||||
|
53|29
|
||||||
|
61|53
|
||||||
|
97|53
|
||||||
|
61|29
|
||||||
|
47|13
|
||||||
|
75|47
|
||||||
|
97|75
|
||||||
|
47|61
|
||||||
|
75|61
|
||||||
|
47|29
|
||||||
|
75|13
|
||||||
|
53|13
|
||||||
|
|
||||||
|
75,47,61,53,29
|
||||||
|
97,61,53,29,13
|
||||||
|
75,29,13
|
||||||
|
75,97,47,61,53
|
||||||
|
61,13,29
|
||||||
|
97,13,75,29,47
|
||||||
1379
aoc2024/day05/input.txt
Normal file
1379
aoc2024/day05/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
83
aoc2024/day05/main.go
Normal file
83
aoc2024/day05/main.go
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
_ "embed"
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
aoc "go.sour.is/advent-of-code"
|
||||||
|
)
|
||||||
|
|
||||||
|
// var log = aoc.Log
|
||||||
|
|
||||||
|
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||||
|
|
||||||
|
type result struct {
|
||||||
|
valuePT1 int
|
||||||
|
valuePT2 int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||||
|
|
||||||
|
func run(scan *bufio.Scanner) (*result, error) {
|
||||||
|
|
||||||
|
ordering := make(map[int]aoc.Set[int])
|
||||||
|
var updates [][]int
|
||||||
|
|
||||||
|
for scan.Scan() {
|
||||||
|
txt := scan.Text()
|
||||||
|
|
||||||
|
if txt == "" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
var key, val int
|
||||||
|
_, err := fmt.Sscanf(txt, "%d|%d", &val, &key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if _, ok := ordering[key]; !ok {
|
||||||
|
ordering[key] = aoc.NewSet[int]()
|
||||||
|
}
|
||||||
|
s := ordering[key]
|
||||||
|
s.Add(val)
|
||||||
|
}
|
||||||
|
|
||||||
|
var sum int
|
||||||
|
var sum2 int
|
||||||
|
|
||||||
|
outer:
|
||||||
|
for scan.Scan() {
|
||||||
|
txt := scan.Text()
|
||||||
|
|
||||||
|
arr := aoc.SliceMap(aoc.Atoi, strings.Split(txt, ",")...)
|
||||||
|
|
||||||
|
for i, v := range arr {
|
||||||
|
m, ok := ordering[v]
|
||||||
|
if (i > 0 && !ok) || !m.ContainsAll(arr[:i]...) {
|
||||||
|
sort.SliceStable(arr, func(i, j int) bool {
|
||||||
|
if a, ok := ordering[arr[i]]; ok && a.Has(arr[j]) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if b, ok := ordering[arr[j]]; ok && b.Has(arr[i]) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
|
||||||
|
sum2 += arr[len(arr)/2]
|
||||||
|
|
||||||
|
continue outer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sum += arr[len(arr)/2]
|
||||||
|
updates = append(updates, arr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &result{sum, sum2}, nil
|
||||||
|
}
|
||||||
41
aoc2024/day05/main_test.go
Normal file
41
aoc2024/day05/main_test.go
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
_ "embed"
|
||||||
|
|
||||||
|
"github.com/matryer/is"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed example.txt
|
||||||
|
var example []byte
|
||||||
|
|
||||||
|
//go:embed input.txt
|
||||||
|
var input []byte
|
||||||
|
|
||||||
|
func TestExample(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||||
|
|
||||||
|
result, err := run(scan)
|
||||||
|
is.NoErr(err)
|
||||||
|
|
||||||
|
t.Log(result)
|
||||||
|
is.Equal(result.valuePT1, 143)
|
||||||
|
is.Equal(result.valuePT2, 123)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSolution(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||||
|
|
||||||
|
result, err := run(scan)
|
||||||
|
is.NoErr(err)
|
||||||
|
|
||||||
|
t.Log(result)
|
||||||
|
is.Equal(result.valuePT1, 7307)
|
||||||
|
is.Equal(result.valuePT2, 4713)
|
||||||
|
}
|
||||||
10
aoc2024/day06/example.txt
Normal file
10
aoc2024/day06/example.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
130
aoc2024/day06/input.txt
Normal file
130
aoc2024/day06/input.txt
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
........#........................................#......#........#................................................................
|
||||||
|
....................................#......#.....#............#.............#..........#..........................................
|
||||||
|
......................#.......................................................#...................................................
|
||||||
|
.......#..#..#....#...#...#....#..............#......#.......#...#................#.......#.......................................
|
||||||
|
......................#....##...#.......#....#.......................................#....................#.......................
|
||||||
|
...#............................#........................................#..........................#.....................#.......
|
||||||
|
....................#............#...............#......#.........#...........#...................................................
|
||||||
|
............................#......#...#................#.............#...........................................................
|
||||||
|
.....#..#.........#....................#......................................................#........................#.........#
|
||||||
|
.........#..##.#.........#.............................................#...........#........#....................##...............
|
||||||
|
...............#....#.........................##......#.....................#..............................................#......
|
||||||
|
..................##...................................#...........#........#....#.............#..................#........#.#....
|
||||||
|
....................................#...................#..............................#............#.............................
|
||||||
|
.........#.....#................#..........................................#...................................#..............#...
|
||||||
|
...#....................#...................................#..##...................#.......#......................###.........#..
|
||||||
|
....................#............#....#.##....#.........#......#...#........................#.......................#..........#..
|
||||||
|
..............#...................................................................................#....................#..........
|
||||||
|
.........#................#..............................#............................#...#.................#...............#.....
|
||||||
|
............................................................................................#...#............................#....
|
||||||
|
............#....................#................................#....#...............................#....#.....................
|
||||||
|
........................................#.........#..................................................#..#..................#......
|
||||||
|
.............#.#............................#..#.....#............................................#....#..........................
|
||||||
|
................................................................................................#.........#..#..............#..#..
|
||||||
|
...........#..........#.#..#................#.#..#...#.........#..........................................#..........#..#.........
|
||||||
|
.............................#....................#.......#....#.....#....#......#....................#..#...............##.......
|
||||||
|
..........#..............................................................................#....#.........#..#................#.....
|
||||||
|
..#..#...............................................................#.......#........#...........................#...............
|
||||||
|
...........................................................................#...##....................#.#....##....................
|
||||||
|
.......................................#...............................................#.....................#.........#..........
|
||||||
|
.......................................................#.......#....#................#.....................................#......
|
||||||
|
.............#................#...................#.................#....................#..................#.#.........#.........
|
||||||
|
.....................................................................#.....................................#......................
|
||||||
|
........................#..........................................#....#..#.#..........................................#.........
|
||||||
|
............#.......#..................#.................................................#..............#.......................#.
|
||||||
|
.........................................................#...............#...#....#...........#.................................#.
|
||||||
|
.........................#..........................#..#........................................................#.................
|
||||||
|
...............#....................................#.......#......................................#............#.................
|
||||||
|
.#......................................................................................................#.........................
|
||||||
|
#...#........................................................#.................#....#....................#...........#............
|
||||||
|
..#.........#................................................................#................................#.............#.....
|
||||||
|
..................................#.........................................................................#................#....
|
||||||
|
..............#..............................................#........#..................................#........................
|
||||||
|
......#............................................#.................................#............................#...............
|
||||||
|
.......##..#.......................##............#...#...................#.#..........................................##..........
|
||||||
|
.#......#.....................................................................#..#..........................#......#.............#
|
||||||
|
.................#.....................#........##..#.........#........#................#.........................................
|
||||||
|
...........#.....#..........#........#............................................................................................
|
||||||
|
.........................#......#.......................................#..............................#..........................
|
||||||
|
............#............................................................#..............#..............................#..........
|
||||||
|
..................#.........#...........................................................................................#.........
|
||||||
|
#.#..................................#....................#......................#.............#.................................#
|
||||||
|
....#................#.................#...................#...........#......................................#...................
|
||||||
|
................#........................................................................................#....#.#.......#.....##..
|
||||||
|
..........#...#.......................................#........#.......................................#...#......................
|
||||||
|
.......#..##........................#......##.........................#.........#.......#.............................#.....#.....
|
||||||
|
................#...............................................#....#..........#.....#.........#.........#.........#.............
|
||||||
|
...............................#............#....................................#......#......................................#..
|
||||||
|
.#..#..................#............................................#....#............#...............##...#..........#...........
|
||||||
|
....#.............................................................................................................................
|
||||||
|
.............................................................#...........................#..........#.............................
|
||||||
|
.#........#..................#.....#.............#.....................................................#...#........#...........#.
|
||||||
|
.......................#........................................#.....#............................#.#..................#.........
|
||||||
|
................#....#................#.......#............................#.......#.................#............................
|
||||||
|
....#.........#....#........#.....................#........................#............#.........................................
|
||||||
|
.......#.......#.....................................................................##...........#...............................
|
||||||
|
...........#.........................................................#..........#............#....................................
|
||||||
|
..................#.............................#.......................................................................#.........
|
||||||
|
................#.....#........#.....#...#..........#.....................................#.....#........................#........
|
||||||
|
..........................................#.........#...........#.................................................................
|
||||||
|
...#.......................................................................................................#......................
|
||||||
|
....#..............#...........#..................................................#.................#.................#...........
|
||||||
|
.#................#.....#.#.................................................................#.........................#...........
|
||||||
|
............#.........................##....................................#..............#......................................
|
||||||
|
...##...........#...#............#..........................................................................#.....................
|
||||||
|
............................................#......................#......#.......................................................
|
||||||
|
............#............................................................................................................#........
|
||||||
|
...................##..............#.#....#.##...................................................#..................#.............
|
||||||
|
..#...................................................................................#.........#.........................#.....#.
|
||||||
|
........................#..............................................#......#................................................#..
|
||||||
|
................#............#............................#.#...................#.....................#...........................
|
||||||
|
..................#......#................#.#......................#...................#...#......................................
|
||||||
|
..#................................................##...................................................................#.........
|
||||||
|
...........................#......................................................................#......#...#......#.............
|
||||||
|
........................#...#........#......#.......#..........#.............................#........#.....#.....................
|
||||||
|
.................................................#..............................................#......#.....#....................
|
||||||
|
.....#....#.................#......#........#.#..............^...........................#...................#..#.................
|
||||||
|
.............................................................................#................................#...................
|
||||||
|
#..........................#..#..............#.......#..........................#.................................................
|
||||||
|
............#.............................................................................#...................#...................
|
||||||
|
..................#.............................#.........................................#................#.........#......#.....
|
||||||
|
...#...............................#.....#......#............###.#.#.....................................#....#.............#.....
|
||||||
|
...........#...........#...........................#..............................................................................
|
||||||
|
............#..........................................#.....#.............#..........................#....................#.....#
|
||||||
|
........................#......#..#............................#.......................................................#..........
|
||||||
|
..#...#...#.......#.#..........................................#.............#.........#....#..................#...........#......
|
||||||
|
..................#.......#.....................................................................................#........#........
|
||||||
|
......##................#...........................................#..............##.................................#...........
|
||||||
|
.................#................................................................................#.#....................#........
|
||||||
|
....................#.........#..........#...............#...#...#.#.#............................................................
|
||||||
|
#..................#.#..........#..#...................................................................................#..........
|
||||||
|
..........#........................................................#..........##..........................#..##...................
|
||||||
|
...........#...................................................................#..................................................
|
||||||
|
..................#........#............................................#..................#....#.......................#..#......
|
||||||
|
............#...................#......#..........................................................................................
|
||||||
|
...........................#.....##..........#.#..............#......................#.............#.......#...........#..........
|
||||||
|
............#..................................................#.......#.........#.#..................#..............##...........
|
||||||
|
#..................................................#...#......#..#......................#.............#........#............#.....
|
||||||
|
....#..................#..........#.........#.........................................#..................#................#.......
|
||||||
|
...#.................#.............................................................................#....................#.........
|
||||||
|
..........#.................................................................#............#....................#.#.#.....#.........
|
||||||
|
.....................#......................#...........#........#................................................................
|
||||||
|
.....#.......................................................................#......................#...#......#..................
|
||||||
|
.............##........#.....................#...........##........#............#.....#.....................#...............#.....
|
||||||
|
.....#.........#....#.................#....#...........#.......##..........#.........#.#......................................#...
|
||||||
|
.......#..................##.......#...#.#...#...................................#.......................................#.....#..
|
||||||
|
...............#.......#.................#........................................................................................
|
||||||
|
......#.......#.....#...............................#...........#.......#......................##...#....#........................
|
||||||
|
.##..........................##..................##................#..#....#...##.................................................
|
||||||
|
........#..............................#.#......#........#...............#....#........#.#........................................
|
||||||
|
...............................#..#.....................#.#...................#...................................................
|
||||||
|
.....................#.................................................##...#.......#.................##...............#.......#..
|
||||||
|
.............#..........................#.................................#..............#.......#..........#........#............
|
||||||
|
.........................................#...................#.........................................................#..........
|
||||||
|
...............................#..........#..............................#............#.....#.....................................
|
||||||
|
.............#..........................#....................#................................#...#............#..................
|
||||||
|
....#......#........#.......#......#................................................#...#......................................##.
|
||||||
|
..#...................................#........#.....................................#...#......#.........#..#..........#.........
|
||||||
|
.......#.........#................................................................................................................
|
||||||
|
...........#...............................##.........................................#..#....................#.....#.#.......##..
|
||||||
|
.........................#..#...............#............................#.............#..........................#..............#
|
||||||
147
aoc2024/day06/main.go
Normal file
147
aoc2024/day06/main.go
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
_ "embed"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
aoc "go.sour.is/advent-of-code"
|
||||||
|
)
|
||||||
|
|
||||||
|
// var log = aoc.Log
|
||||||
|
|
||||||
|
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||||
|
|
||||||
|
type result struct {
|
||||||
|
valuePT1 int
|
||||||
|
valuePT2 int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||||
|
|
||||||
|
func run(scan *bufio.Scanner) (*result, error) {
|
||||||
|
|
||||||
|
var start aoc.Point[int]
|
||||||
|
var m [][]rune
|
||||||
|
|
||||||
|
for scan.Scan() {
|
||||||
|
txt := scan.Text()
|
||||||
|
|
||||||
|
if txt == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
m = append(m, []rune(txt))
|
||||||
|
|
||||||
|
for i, c := range txt {
|
||||||
|
if c == '^' {
|
||||||
|
start = aoc.Point[int]{len(m) - 1, i}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sum, positions, _ := runPT1(m, start)
|
||||||
|
|
||||||
|
loops := runPT2(m, start, positions)
|
||||||
|
|
||||||
|
return &result{sum, loops}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func isOutOfBounds(p, topRight, bottomLeft aoc.Point[int]) bool {
|
||||||
|
return p[0] < topRight[0] ||
|
||||||
|
p[0] > bottomLeft[0] ||
|
||||||
|
p[1] < topRight[1] ||
|
||||||
|
p[1] > bottomLeft[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
func printMap(m [][]rune, o aoc.Point[int]) {
|
||||||
|
for i, row := range m {
|
||||||
|
if i == o[0] {
|
||||||
|
row[o[1]] = 'O'
|
||||||
|
}
|
||||||
|
println(string(row))
|
||||||
|
}
|
||||||
|
println()
|
||||||
|
}
|
||||||
|
|
||||||
|
func runPT1(m [][]rune, start aoc.Point[int]) (int, []aoc.Point[int], bool) {
|
||||||
|
m = copyMap(m)
|
||||||
|
|
||||||
|
topRight := aoc.Point[int]{0, 0}
|
||||||
|
bottomLeft := aoc.Point[int]{len(m) - 1, len(m[0]) - 1}
|
||||||
|
|
||||||
|
directions := []aoc.Point[int]{
|
||||||
|
{-1, 0}, // up
|
||||||
|
{0, 1}, // right
|
||||||
|
{1, 0}, // down
|
||||||
|
{0, -1}, // left
|
||||||
|
}
|
||||||
|
|
||||||
|
d := 0
|
||||||
|
current := start
|
||||||
|
var loopStart [3]int
|
||||||
|
var paths = aoc.NewSet[[3]int]()
|
||||||
|
for !isOutOfBounds(current, topRight, bottomLeft) {
|
||||||
|
m[current[0]][current[1]] = 'X'
|
||||||
|
next := current.Add(directions[d])
|
||||||
|
if isOutOfBounds(next, topRight, bottomLeft) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if m[next[0]][next[1]] == '#' {
|
||||||
|
d = (d + 1) % 4
|
||||||
|
pt := [3]int{current[0], current[1], d}
|
||||||
|
if paths.Has(pt) {
|
||||||
|
if loopStart == pt {
|
||||||
|
return 0, nil, true
|
||||||
|
}
|
||||||
|
if loopStart == [3]int{} {
|
||||||
|
loopStart = pt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
paths.Add(pt)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
current = next
|
||||||
|
}
|
||||||
|
|
||||||
|
var sum int
|
||||||
|
var points []aoc.Point[int]
|
||||||
|
for y, row := range m {
|
||||||
|
for x, v := range row {
|
||||||
|
if v == 'X' {
|
||||||
|
points = append(points, aoc.Point[int]{x, y})
|
||||||
|
sum++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum, points, false
|
||||||
|
}
|
||||||
|
|
||||||
|
func runPT2(m [][]rune, start aoc.Point[int], points []aoc.Point[int]) int {
|
||||||
|
sum := 0
|
||||||
|
for _, p := range points {
|
||||||
|
cm := copyMap(m)
|
||||||
|
cm[p[0]][p[1]] = '#'
|
||||||
|
|
||||||
|
_, _, isOOB :=runPT1(cm, start)
|
||||||
|
|
||||||
|
if !isOOB {
|
||||||
|
printMap(cm, start)
|
||||||
|
sum++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyMap(m [][]rune) [][]rune {
|
||||||
|
newM := make([][]rune, len(m))
|
||||||
|
for i, row := range m {
|
||||||
|
newM[i] = make([]rune, len(row))
|
||||||
|
copy(newM[i], row)
|
||||||
|
}
|
||||||
|
return newM
|
||||||
|
}
|
||||||
43
aoc2024/day06/main_test.go
Normal file
43
aoc2024/day06/main_test.go
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
_ "embed"
|
||||||
|
|
||||||
|
"github.com/matryer/is"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed example.txt
|
||||||
|
var example []byte
|
||||||
|
|
||||||
|
//go:embed input.txt
|
||||||
|
var input []byte
|
||||||
|
|
||||||
|
func TestExample(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||||
|
|
||||||
|
result, err := run(scan)
|
||||||
|
is.NoErr(err)
|
||||||
|
|
||||||
|
t.Log(result)
|
||||||
|
is.Equal(result.valuePT1, 41)
|
||||||
|
is.Equal(result.valuePT2, 6)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSolution(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||||
|
|
||||||
|
result, err := run(scan)
|
||||||
|
is.NoErr(err)
|
||||||
|
|
||||||
|
t.Log(result)
|
||||||
|
is.Equal(result.valuePT1, 5329)
|
||||||
|
is.True(result.valuePT2 > 897)
|
||||||
|
is.Equal(result.valuePT2, 0)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -73,3 +73,17 @@ func toList[T any](seq iter.Seq[T]) []T {
|
|||||||
}
|
}
|
||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGraphBFS2(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
var adjacencyList = map[int][]int{
|
||||||
|
1: {2, 3},
|
||||||
|
2: {4},
|
||||||
|
3: {5, 6},
|
||||||
|
}
|
||||||
|
|
||||||
|
g := aoc.Graph(aoc.WithAdjacencyList[int](adjacencyList))
|
||||||
|
is.Equal(toList(g.BFS(1)), []int{1, 2, 3, 4, 5, 6})
|
||||||
|
|
||||||
|
}
|
||||||
9
set.go
9
set.go
@@ -23,6 +23,15 @@ func (m *Set[T]) Has(a T) bool {
|
|||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Set[T]) ContainsAll(other ...T) bool {
|
||||||
|
for _, a := range other {
|
||||||
|
if !m.Has(a) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
type defaultMap[K comparable, V any] struct {
|
type defaultMap[K comparable, V any] struct {
|
||||||
m map[K]V
|
m map[K]V
|
||||||
d V
|
d V
|
||||||
|
|||||||
Reference in New Issue
Block a user