Day 1: Historian Hysteria

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://blocks.programming.dev if you prefer sending it through a URL

FAQ

  • the_beber@lemm.ee
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    20 days ago

    I have another Kotlin (albeit similar) solution:

    import kotlin.math.abs
    
    fun main() {
    
        fun getLists(input: List<String>): Pair<List<Int>, List<Int>> {
            val unsortedPairs = input.map {
                it.split("   ").map { it.toInt() }
            }
    
            val listA = unsortedPairs.map { it.first() }
            val listB = unsortedPairs.map { it.last() }
            return Pair(listA, listB)
        }
    
        fun part1(input: List<String>): Int {
            val (listA, listB) = getLists(input)
    
            return listA.sorted().zip(listB.sorted()).sumOf { abs(it.first - it.second) }
        }
    
        fun part2(input: List<String>): Int {
            val (listA, listB) = getLists(input)
    
            return listA.sumOf { number ->
                number * listB.count { it == number }
            }
        }
    
        // Or read a large test input from the `src/Day01_test.txt` file:
        val testInput = readInput("Day01_test")
        check(part1(testInput) == 11)
        check(part2(testInput) == 31)
    
        // Read the input from the `src/Day01.txt` file.
        val input = readInput("Day01")
        part1(input).println()
        part2(input).println()
    }
    
    

    It’s a bit more compact. (If you take out the part that actually calls the functions on the (test-)input.)

    • proved_unglue@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      20 days ago

      Thanks! I like the Pair destruction and zip().sumOf() approach. I’m relatively new to Kotlin, so this is a good learning experience. 😅