pgoultiaev/aoc2017

View on GitHub
17/17.go

Summary

Maintainability
A
0 mins
Test Coverage
package main

func main() {
    input := 348

    partOne, valAfter0 := solve(2017, input)
    println(partOne)
    println(valAfter0)

    partTwo := solve2(50000000, input)
    println(partTwo)
}

func solve2(lastValWritten, input int) (valueAfter0 int) {
    i := 1
    currentPos := 0
    lengthBuffer := 1
    for i <= lastValWritten {
        currentPos = (currentPos + input) % lengthBuffer

        if currentPos == 0 {
            valueAfter0 = i
        }
        lengthBuffer++
        currentPos++
        i++
    }

    return valueAfter0
}

func solve(lastValWritten, input int) (int, int) {
    buffer := []int{0}
    i := 1
    currentPos := 0
    for i <= lastValWritten {
        currentPos = (currentPos + input) % len(buffer)

        if currentPos == len(buffer)-1 {
            buffer = append(buffer, i)
        } else {
            buffer = append(buffer, 0)
            copy(buffer[currentPos+1:], buffer[currentPos:])
            buffer[currentPos+1] = i
        }

        currentPos++
        i++
    }

    return buffer[currentPos+1], buffer[1]
}