Skip to content

Commit d81596c

Browse files
committed
Add missing solution for the first part of Day 1
Signed-off-by: Alexander Kurbatov <sir.alkurbatov@yandex.ru>
1 parent 208d738 commit d81596c

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

2023/1/main.go

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,39 +45,50 @@ func main() {
4545
}
4646
defer input.Close()
4747

48-
result := 0
48+
var firstPartResult, secondPartResult int
4949

5050
// NB (alkurbatov): Becase the input contains strings like oneight, eighthree or sevenine
51-
// and Golang does not provide negative lookahead, we have to try reversed approach.
52-
firstDigit := regexp.MustCompile(`\d|one|two|three|four|five|six|seven|eight|nine`)
53-
lastDigit := regexp.MustCompile(`\d|eno|owt|eerht|ruof|evif|xis|neves|thgie|enin`)
51+
// and Golang does not provide negative lookahead, we have to try 'reversed' approach.
52+
digits := regexp.MustCompile(`\d`)
53+
firstNumber := regexp.MustCompile(`\d|one|two|three|four|five|six|seven|eight|nine`)
54+
lastNumber := regexp.MustCompile(`\d|eno|owt|eerht|ruof|evif|xis|neves|thgie|enin`)
5455

5556
scanner := bufio.NewScanner(input)
5657
for scanner.Scan() {
5758
src := scanner.Text()
5859

59-
first := firstDigit.FindString(src)
60-
if first == "" {
61-
log.Printf("Failed to find first digit in input string: %s", src)
60+
allDigits := digits.FindAllString(src, -1)
61+
if len(allDigits) == 0 {
62+
log.Printf("Failed to find all digits in input string: %s", src)
6263
return
6364
}
6465

65-
last := lastDigit.FindString(reverse(src))
66-
if last == "" {
67-
log.Printf("Failed to find last digit in input string: %s", src)
66+
hiddenNumber := numsMap[allDigits[0]]*10 + numsMap[allDigits[len(allDigits)-1]]
67+
firstPartResult += hiddenNumber
68+
log.Printf("Part 1: %s -> %d", src, hiddenNumber)
69+
70+
firstNum := firstNumber.FindString(src)
71+
if firstNum == "" {
72+
log.Printf("Failed to find first number in input string: %s", src)
6873
return
6974
}
7075

71-
hiddenNumber := numsMap[first]*10 + numsMap[reverse(last)]
72-
result += hiddenNumber
76+
lastNum := lastNumber.FindString(reverse(src))
77+
if lastNum == "" {
78+
log.Printf("Failed to find last number in input string: %s", src)
79+
return
80+
}
7381

74-
log.Printf("%s -> %d", src, hiddenNumber)
82+
hiddenNumber = numsMap[firstNum]*10 + numsMap[reverse(lastNum)]
83+
secondPartResult += hiddenNumber
84+
log.Printf("Part 2: %s -> %d", src, hiddenNumber)
7585
}
7686

7787
if err := scanner.Err(); err != nil {
7888
log.Printf("Failed to scan input.txt: %v", err)
7989
return
8090
}
8191

82-
log.Printf("Result: %d", result)
92+
log.Printf("Part 1 result: %d", firstPartResult)
93+
log.Printf("Part 2 result: %d", secondPartResult)
8394
}

0 commit comments

Comments
 (0)