mirror of
https://github.com/Threnklyn/advent-of-code-go.git
synced 2026-06-04 19:29:04 +02:00
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/alexchao26/advent-of-code-go/cast"
|
|
"github.com/alexchao26/advent-of-code-go/util"
|
|
)
|
|
|
|
func main() {
|
|
var part int
|
|
flag.IntVar(&part, "part", 1, "part 1 or 2")
|
|
flag.Parse()
|
|
fmt.Println("Running part", part)
|
|
|
|
ans := letItSnow(util.ReadFile("./input.txt"))
|
|
fmt.Println("Output:", ans)
|
|
}
|
|
|
|
func letItSnow(input string) int {
|
|
var row, col int
|
|
input = strings.ReplaceAll(input, ",", "")
|
|
input = strings.ReplaceAll(input, ".", "")
|
|
for _, part := range strings.Split(input, " ") {
|
|
if regexp.MustCompile("[0-9]").MatchString(part) {
|
|
if row == 0 { // jeez i am getting lazy
|
|
row = cast.ToInt(part)
|
|
} else {
|
|
col = cast.ToInt(part)
|
|
}
|
|
}
|
|
}
|
|
|
|
// the number of iterations to run can be calculated by:
|
|
// - finding the number of cells that in the triangle that is formed by each
|
|
// diagonal prior to the incomplete one that the target cell is on
|
|
// This triangle is generated from adding 1+2+3+4...+(row+col) 0-indexed
|
|
// - then the number of iterations for the incomplete diagonal, is equal to
|
|
// the current column number (1-indexed)
|
|
var triangleBefore int
|
|
for i := 1; i <= row+col-2; i++ {
|
|
triangleBefore += i
|
|
}
|
|
|
|
numberOnThisDiagonal := col
|
|
|
|
// subtract one for starting cell
|
|
iterations := triangleBefore + numberOnThisDiagonal - 1
|
|
|
|
// and thankfully this runs quickly
|
|
code := 20151125
|
|
for i := 0; i < iterations; i++ {
|
|
code *= 252533
|
|
code %= 33554393
|
|
}
|
|
|
|
return code
|
|
}
|