Skip to content

Commit 03465c0

Browse files
committed
2024 Day 1
1 parent 38e47ec commit 03465c0

File tree

4 files changed

+71
-4
lines changed

4 files changed

+71
-4
lines changed

.github/workflows/tests.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- uses: actions/checkout@v4
2424
- uses: actions/setup-java@v4
2525
with:
26-
java-version: 11
26+
java-version: 17
2727
distribution: zulu
2828

2929
# Runs a single command using the runners shell

src/main/kotlin/y24/Day1.kt

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package y24
2+
3+
import common.puzzle.solvePuzzle
4+
import common.puzzle.Input
5+
import common.puzzle.Puzzle
6+
import common.datastructures.*
7+
import common.ext.*
8+
import common.puzzle.splitToInts
9+
import common.util.*
10+
import java.util.*
11+
import kotlin.math.*
12+
import kotlin.system.exitProcess
13+
14+
15+
fun main() = solvePuzzle(year = 2024, day = 1) { Day1(it) }
16+
17+
class Day1(val input: Input) : Puzzle {
18+
val left = input.lines
19+
.map { it.splitToInts(separator = " ").first() }
20+
.sorted()
21+
val right = input.lines
22+
.map { it.splitToInts(separator = " ").last() }
23+
.sorted()
24+
25+
override fun solveLevel1(): Any {
26+
return left.mapIndexed { index, l ->
27+
val r = right[index]
28+
abs(l - r)
29+
}.sum()
30+
}
31+
32+
override fun solveLevel2(): Any {
33+
val rightCounts = right.groupingBy { it }.eachCount()
34+
return left.sumOf { l ->
35+
val count = rightCounts[l] ?: 0
36+
l.toLong() * count
37+
}
38+
}
39+
}

src/test/kotlin/y24/Day1Test.kt

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package y24
2+
3+
import common.puzzle.Input
4+
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Test
6+
7+
internal class Day1Test {
8+
private val sample = Input("""
9+
3 4
10+
4 3
11+
2 5
12+
1 3
13+
3 9
14+
3 3
15+
""".trimIndent())
16+
17+
private val day = Day1(sample)
18+
19+
@Test
20+
fun solveLevel1() {
21+
assertEquals(11, day.solveLevel1())
22+
}
23+
24+
@Test
25+
fun solveLevel2() {
26+
assertEquals(31L, day.solveLevel2())
27+
}
28+
}

workflow/new.sh

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
set -Eeuo pipefail
66

7-
CURRENT_YEAR="23"
7+
CURRENT_YEAR="24"
88

99
export DAY="${1:?"Usage: ./new.sh <day> [<year>]"}"
1010
export YEAR="${2:-"$CURRENT_YEAR"}"
@@ -45,5 +45,5 @@ envsubst < "$SRC_TEMPLATE" > "$SRC_FILE"
4545
envsubst < "$TEST_TEMPLATE" > "$TEST_FILE"
4646

4747
echo "Opening files"
48-
gp open "$SRC_FILE"
49-
gp open "$TEST_FILE"
48+
gp open "$SRC_FILE" || echo "Failed to open $SRC_FILE"
49+
gp open "$TEST_FILE" || echo "Failed to open $TEST_FILE"

0 commit comments

Comments
 (0)