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
      ·
      24 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
              }
          }