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

  • chunkystyles@sopuli.xyz
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    5 days 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
            }
        }