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
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/22323136
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
You must log in or register to comment.
Uiua
Decided to try and use Uiua for each day this year. At least I’m not the only one to get this idea ^^
Run with example input here
PartOne ← ( &rs ∞ &fo "input-1.txt" ⊜(⊜⋕≠@ .)≠@\n. ≡⍆⍉ ⌵/- /+ ) PartTwo ← ( &rs ∞ &fo "input-1.txt" ⊜(⊜⋕≠@ .)≠@\n. ⊢⟜⊣⍉ 0 ⍢(+⊙(:⊙(×⧻⊚◡⌕)↘1⟜⊢)|⋅(≠0⧻)) ⊙(◌◌) # just cleaning up the stack ) &p "Day 1:" &pf "Part 1: " &p PartOne &pf "Part 2: " &p PartTwo
Kotlin
No 💜 for Kotlin here?
import kotlin.math.abs fun part1(input: String): Int { val diffs: MutableList<Int> = mutableListOf() val pair = parse(input) pair.first.sort() pair.second.sort() pair.first.forEachIndexed { idx, num -> diffs.add(abs(num - pair.second[idx])) } return diffs.sum() } fun part2(input: String): Int { val pair = parse(input) val frequencies = pair.second.groupingBy { it }.eachCount() var score = 0 pair.first.forEach { num -> score += num * frequencies.getOrDefault(num, 0) } return score } private fun parse(input: String): Pair<MutableList<Int>, MutableList<Int>> { val left: MutableList<Int> = mutableListOf() val right: MutableList<Int> = mutableListOf() input.lines().forEach { line -> if (line.isNotBlank()) { val parts = line.split("\\s+".toRegex()) left.add(parts[0].toInt()) right.add(parts[1].toInt()) } } return left to right }