From fcc2ad566654571f9b9c8e35374a60436e77d417 Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Fri, 1 Dec 2023 17:21:34 +0000 Subject: [PATCH] perf: use trimLength to reduce recursion Add trimLength to trim all but the last character of the detected integers in text form. The last character is not trimmed during recursion because it may be part of the next integer. This should reduce the amount of recursion needed to complete the calculation. --- 2023/day-1/part-2/main.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/2023/day-1/part-2/main.go b/2023/day-1/part-2/main.go index c6772f4..3d36cdf 100644 --- a/2023/day-1/part-2/main.go +++ b/2023/day-1/part-2/main.go @@ -55,31 +55,40 @@ func calibrationValue(line string, digits []int) int { return calibrationValue(line[1:], digits) case strings.HasPrefix(line, one): digits = append(digits, 1) - return calibrationValue(line[1:], digits) + trimLength := len(one)-1 + return calibrationValue(line[trimLength:], digits) case strings.HasPrefix(line, two): digits = append(digits, 2) - return calibrationValue(line[1:], digits) + trimLength := len(two)-1 + return calibrationValue(line[trimLength:], digits) case strings.HasPrefix(line, three): digits = append(digits, 3) - return calibrationValue(line[1:], digits) + trimLength := len(three)-1 + return calibrationValue(line[trimLength:], digits) case strings.HasPrefix(line, four): digits = append(digits, 4) - return calibrationValue(line[1:], digits) + trimLength := len(four)-1 + return calibrationValue(line[trimLength:], digits) case strings.HasPrefix(line, five): digits = append(digits, 5) - return calibrationValue(line[1:], digits) + trimLength := len(five)-1 + return calibrationValue(line[trimLength:], digits) case strings.HasPrefix(line, six): digits = append(digits, 6) - return calibrationValue(line[1:], digits) + trimLength := len(six)-1 + return calibrationValue(line[trimLength:], digits) case strings.HasPrefix(line, seven): digits = append(digits, 7) - return calibrationValue(line[1:], digits) + trimLength := len(seven)-1 + return calibrationValue(line[trimLength:], digits) case strings.HasPrefix(line, eight): digits = append(digits, 8) - return calibrationValue(line[1:], digits) + trimLength := len(eight)-1 + return calibrationValue(line[trimLength:], digits) case strings.HasPrefix(line, nine): digits = append(digits, 9) - return calibrationValue(line[1:], digits) + trimLength := len(nine)-1 + return calibrationValue(line[trimLength:], digits) default: return calibrationValue(line[1:], digits) }