fix(aoc2024): clean up day 3
This commit is contained in:
parent
b3c36c1af1
commit
c077b91c41
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user