Day 1: Secret Entrance

Megathread guidelines

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL

FAQ

you are viewing a single comment's thread
view the rest of the comments
[โ€“] 1 point 11 months ago*

Here's my Kotlin version for Part 2.

fun main() {
    var currentDialPosition = 50
    var password = 0
    val input = getInput(1)
    val turns = parseInput2(input)
    turns.forEach {
        if (it.second > 0) {
            password += it.second
        }
        var newDialPosition = currentDialPosition + it.first
        if (newDialPosition < 0) {
            newDialPosition += 100
            if (currentDialPosition != 0) {
                password++
            }
        } else if (newDialPosition > 99) {
            newDialPosition %= 100
            password++
        } else if (newDialPosition == 0) {
            password++
        }
        currentDialPosition = newDialPosition
    }
    println(password)
}

fun parseInput2(input: String): List<Pair<Int, Int>> = input
    .split("\n")
    .filter { it.isNotBlank() }
    .map {
        val direction = it.first()
        val number = it.slice(1..<it.length).toInt()
        val clicks = number % 100
        val fullTurns = number / 100
        if (direction == 'L') {
            clicks * -1 to fullTurns
        } else {
            clicks to fullTurns
        }
    }
  • source
  • parent