Compare commits
No commits in common. "main" and "working2024D3" have entirely different histories.
main
...
working202
@ -25,9 +25,7 @@ func run(read io.Reader) (*result, error) {
|
|||||||
sum := 0
|
sum := 0
|
||||||
sum2 := 0
|
sum2 := 0
|
||||||
|
|
||||||
lexer, stop := Lexer(read)
|
lexer := Lexer(read)
|
||||||
defer stop()
|
|
||||||
|
|
||||||
active := true
|
active := true
|
||||||
|
|
||||||
for lexer.NextTok() {
|
for lexer.NextTok() {
|
||||||
@ -54,7 +52,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()) {
|
func Lexer(in io.Reader) *lexer {
|
||||||
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)
|
||||||
@ -74,10 +72,10 @@ func Lexer(in io.Reader) (*lexer, func()) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
next, stop := iter.Pull(seq)
|
next, stop := iter.Pull(seq)
|
||||||
lex := lexer{iter: next}
|
lex := lexer{iter: next, stop: stop}
|
||||||
lex.readRune()
|
lex.readRune()
|
||||||
lex.readRune()
|
lex.readRune()
|
||||||
return &lex, stop
|
return &lex
|
||||||
}
|
}
|
||||||
|
|
||||||
type lexer struct {
|
type lexer struct {
|
||||||
@ -85,12 +83,15 @@ 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
|
||||||
@ -171,6 +172,16 @@ 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
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
MMMSXXMASM
|
|
||||||
MSAMXMSMSA
|
|
||||||
AMXSXMAAMM
|
|
||||||
MSAMASMSMX
|
|
||||||
XMASAMXAMM
|
|
||||||
XXAMMXXAMA
|
|
||||||
SMSMSASXSS
|
|
||||||
SAXAMASAAA
|
|
||||||
MAMMMXMMMM
|
|
||||||
MXMXAXMASX
|
|
@ -1,140 +0,0 @@
|
|||||||
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
|
|
@ -1,163 +0,0 @@
|
|||||||
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
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
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)
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
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
|
|
File diff suppressed because it is too large
Load Diff
@ -1,83 +0,0 @@
|
|||||||
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
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
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)
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
....#.....
|
|
||||||
.........#
|
|
||||||
..........
|
|
||||||
..#.......
|
|
||||||
.......#..
|
|
||||||
..........
|
|
||||||
.#..^.....
|
|
||||||
........#.
|
|
||||||
#.........
|
|
||||||
......#...
|
|
@ -1,130 +0,0 @@
|
|||||||
........#........................................#......#........#................................................................
|
|
||||||
....................................#......#.....#............#.............#..........#..........................................
|
|
||||||
......................#.......................................................#...................................................
|
|
||||||
.......#..#..#....#...#...#....#..............#......#.......#...#................#.......#.......................................
|
|
||||||
......................#....##...#.......#....#.......................................#....................#.......................
|
|
||||||
...#............................#........................................#..........................#.....................#.......
|
|
||||||
....................#............#...............#......#.........#...........#...................................................
|
|
||||||
............................#......#...#................#.............#...........................................................
|
|
||||||
.....#..#.........#....................#......................................................#........................#.........#
|
|
||||||
.........#..##.#.........#.............................................#...........#........#....................##...............
|
|
||||||
...............#....#.........................##......#.....................#..............................................#......
|
|
||||||
..................##...................................#...........#........#....#.............#..................#........#.#....
|
|
||||||
....................................#...................#..............................#............#.............................
|
|
||||||
.........#.....#................#..........................................#...................................#..............#...
|
|
||||||
...#....................#...................................#..##...................#.......#......................###.........#..
|
|
||||||
....................#............#....#.##....#.........#......#...#........................#.......................#..........#..
|
|
||||||
..............#...................................................................................#....................#..........
|
|
||||||
.........#................#..............................#............................#...#.................#...............#.....
|
|
||||||
............................................................................................#...#............................#....
|
|
||||||
............#....................#................................#....#...............................#....#.....................
|
|
||||||
........................................#.........#..................................................#..#..................#......
|
|
||||||
.............#.#............................#..#.....#............................................#....#..........................
|
|
||||||
................................................................................................#.........#..#..............#..#..
|
|
||||||
...........#..........#.#..#................#.#..#...#.........#..........................................#..........#..#.........
|
|
||||||
.............................#....................#.......#....#.....#....#......#....................#..#...............##.......
|
|
||||||
..........#..............................................................................#....#.........#..#................#.....
|
|
||||||
..#..#...............................................................#.......#........#...........................#...............
|
|
||||||
...........................................................................#...##....................#.#....##....................
|
|
||||||
.......................................#...............................................#.....................#.........#..........
|
|
||||||
.......................................................#.......#....#................#.....................................#......
|
|
||||||
.............#................#...................#.................#....................#..................#.#.........#.........
|
|
||||||
.....................................................................#.....................................#......................
|
|
||||||
........................#..........................................#....#..#.#..........................................#.........
|
|
||||||
............#.......#..................#.................................................#..............#.......................#.
|
|
||||||
.........................................................#...............#...#....#...........#.................................#.
|
|
||||||
.........................#..........................#..#........................................................#.................
|
|
||||||
...............#....................................#.......#......................................#............#.................
|
|
||||||
.#......................................................................................................#.........................
|
|
||||||
#...#........................................................#.................#....#....................#...........#............
|
|
||||||
..#.........#................................................................#................................#.............#.....
|
|
||||||
..................................#.........................................................................#................#....
|
|
||||||
..............#..............................................#........#..................................#........................
|
|
||||||
......#............................................#.................................#............................#...............
|
|
||||||
.......##..#.......................##............#...#...................#.#..........................................##..........
|
|
||||||
.#......#.....................................................................#..#..........................#......#.............#
|
|
||||||
.................#.....................#........##..#.........#........#................#.........................................
|
|
||||||
...........#.....#..........#........#............................................................................................
|
|
||||||
.........................#......#.......................................#..............................#..........................
|
|
||||||
............#............................................................#..............#..............................#..........
|
|
||||||
..................#.........#...........................................................................................#.........
|
|
||||||
#.#..................................#....................#......................#.............#.................................#
|
|
||||||
....#................#.................#...................#...........#......................................#...................
|
|
||||||
................#........................................................................................#....#.#.......#.....##..
|
|
||||||
..........#...#.......................................#........#.......................................#...#......................
|
|
||||||
.......#..##........................#......##.........................#.........#.......#.............................#.....#.....
|
|
||||||
................#...............................................#....#..........#.....#.........#.........#.........#.............
|
|
||||||
...............................#............#....................................#......#......................................#..
|
|
||||||
.#..#..................#............................................#....#............#...............##...#..........#...........
|
|
||||||
....#.............................................................................................................................
|
|
||||||
.............................................................#...........................#..........#.............................
|
|
||||||
.#........#..................#.....#.............#.....................................................#...#........#...........#.
|
|
||||||
.......................#........................................#.....#............................#.#..................#.........
|
|
||||||
................#....#................#.......#............................#.......#.................#............................
|
|
||||||
....#.........#....#........#.....................#........................#............#.........................................
|
|
||||||
.......#.......#.....................................................................##...........#...............................
|
|
||||||
...........#.........................................................#..........#............#....................................
|
|
||||||
..................#.............................#.......................................................................#.........
|
|
||||||
................#.....#........#.....#...#..........#.....................................#.....#........................#........
|
|
||||||
..........................................#.........#...........#.................................................................
|
|
||||||
...#.......................................................................................................#......................
|
|
||||||
....#..............#...........#..................................................#.................#.................#...........
|
|
||||||
.#................#.....#.#.................................................................#.........................#...........
|
|
||||||
............#.........................##....................................#..............#......................................
|
|
||||||
...##...........#...#............#..........................................................................#.....................
|
|
||||||
............................................#......................#......#.......................................................
|
|
||||||
............#............................................................................................................#........
|
|
||||||
...................##..............#.#....#.##...................................................#..................#.............
|
|
||||||
..#...................................................................................#.........#.........................#.....#.
|
|
||||||
........................#..............................................#......#................................................#..
|
|
||||||
................#............#............................#.#...................#.....................#...........................
|
|
||||||
..................#......#................#.#......................#...................#...#......................................
|
|
||||||
..#................................................##...................................................................#.........
|
|
||||||
...........................#......................................................................#......#...#......#.............
|
|
||||||
........................#...#........#......#.......#..........#.............................#........#.....#.....................
|
|
||||||
.................................................#..............................................#......#.....#....................
|
|
||||||
.....#....#.................#......#........#.#..............^...........................#...................#..#.................
|
|
||||||
.............................................................................#................................#...................
|
|
||||||
#..........................#..#..............#.......#..........................#.................................................
|
|
||||||
............#.............................................................................#...................#...................
|
|
||||||
..................#.............................#.........................................#................#.........#......#.....
|
|
||||||
...#...............................#.....#......#............###.#.#.....................................#....#.............#.....
|
|
||||||
...........#...........#...........................#..............................................................................
|
|
||||||
............#..........................................#.....#.............#..........................#....................#.....#
|
|
||||||
........................#......#..#............................#.......................................................#..........
|
|
||||||
..#...#...#.......#.#..........................................#.............#.........#....#..................#...........#......
|
|
||||||
..................#.......#.....................................................................................#........#........
|
|
||||||
......##................#...........................................#..............##.................................#...........
|
|
||||||
.................#................................................................................#.#....................#........
|
|
||||||
....................#.........#..........#...............#...#...#.#.#............................................................
|
|
||||||
#..................#.#..........#..#...................................................................................#..........
|
|
||||||
..........#........................................................#..........##..........................#..##...................
|
|
||||||
...........#...................................................................#..................................................
|
|
||||||
..................#........#............................................#..................#....#.......................#..#......
|
|
||||||
............#...................#......#..........................................................................................
|
|
||||||
...........................#.....##..........#.#..............#......................#.............#.......#...........#..........
|
|
||||||
............#..................................................#.......#.........#.#..................#..............##...........
|
|
||||||
#..................................................#...#......#..#......................#.............#........#............#.....
|
|
||||||
....#..................#..........#.........#.........................................#..................#................#.......
|
|
||||||
...#.................#.............................................................................#....................#.........
|
|
||||||
..........#.................................................................#............#....................#.#.#.....#.........
|
|
||||||
.....................#......................#...........#........#................................................................
|
|
||||||
.....#.......................................................................#......................#...#......#..................
|
|
||||||
.............##........#.....................#...........##........#............#.....#.....................#...............#.....
|
|
||||||
.....#.........#....#.................#....#...........#.......##..........#.........#.#......................................#...
|
|
||||||
.......#..................##.......#...#.#...#...................................#.......................................#.....#..
|
|
||||||
...............#.......#.................#........................................................................................
|
|
||||||
......#.......#.....#...............................#...........#.......#......................##...#....#........................
|
|
||||||
.##..........................##..................##................#..#....#...##.................................................
|
|
||||||
........#..............................#.#......#........#...............#....#........#.#........................................
|
|
||||||
...............................#..#.....................#.#...................#...................................................
|
|
||||||
.....................#.................................................##...#.......#.................##...............#.......#..
|
|
||||||
.............#..........................#.................................#..............#.......#..........#........#............
|
|
||||||
.........................................#...................#.........................................................#..........
|
|
||||||
...............................#..........#..............................#............#.....#.....................................
|
|
||||||
.............#..........................#....................#................................#...#............#..................
|
|
||||||
....#......#........#.......#......#................................................#...#......................................##.
|
|
||||||
..#...................................#........#.....................................#...#......#.........#..#..........#.........
|
|
||||||
.......#.........#................................................................................................................
|
|
||||||
...........#...............................##.........................................#..#....................#.....#.#.......##..
|
|
||||||
.........................#..#...............#............................#.............#..........................#..............#
|
|
@ -1,147 +0,0 @@
|
|||||||
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
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
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,17 +73,3 @@ 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,15 +23,6 @@ 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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user