Skip to content

Commit 5747b19

Browse files
committed
Input | Added Input Reader & Day Value Object
1 parent f4e76f0 commit 5747b19

File tree

7 files changed

+82
-0
lines changed

7 files changed

+82
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package io.github.tomplum.libs.input
2+
3+
class Day(val value: Int)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.github.tomplum.libs.input
2+
3+
import io.github.tomplum.libs.input.types.Input
4+
import io.github.tomplum.libs.input.types.IntegerInput
5+
import io.github.tomplum.libs.input.types.StringInput
6+
import java.io.File
7+
8+
open class InputReader {
9+
companion object {
10+
@Suppress("UNCHECKED_CAST")
11+
inline fun <reified T : Any> read(day: Day): Input<T> {
12+
val lines = File(InputReader::class.java.getResource("/day${day.value}/input.txt").path).readLines()
13+
14+
return when (val cls = T::class.java) {
15+
String::class.java -> StringInput(lines) as Input<T>
16+
Integer::class.java -> IntegerInput(lines) as Input<T>
17+
else -> throw UnsupportedOperationException("Input Reader does not support type: ${cls.simpleName}")
18+
}
19+
}
20+
}
21+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.github.tomplum.libs.input.types
2+
3+
abstract class Input<T>(val value: List<T>) {
4+
fun asSingleString() = value.joinToString(separator = "\n")
5+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package io.github.tomplum.libs.input.types
2+
3+
class IntegerInput(input: List<String>) : Input<Int>(input.map { it.toInt() })
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package io.github.tomplum.libs.input.types
2+
3+
class StringInput(values: List<String>) : Input<String>(values)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.github.tomplum.libs.input
2+
3+
import assertk.assertThat
4+
import assertk.assertions.isEqualTo
5+
import io.github.tomplum.libs.input.Day
6+
import io.github.tomplum.libs.input.InputReader
7+
import io.github.tomplum.libs.input.types.StringInput
8+
import org.junit.jupiter.api.Test
9+
import org.junit.jupiter.api.assertThrows
10+
11+
class InputReaderTest {
12+
13+
@Test
14+
fun asString() {
15+
assertThat(InputReader.read<String>(Day(100)).value).isEqualTo(listOf("1", "2", "3", "4", "5"))
16+
}
17+
18+
@Test
19+
fun asInteger() {
20+
assertThat(InputReader.read<Int>(Day(100)).value).isEqualTo(listOf(1, 2, 3, 4, 5))
21+
}
22+
23+
@Test
24+
fun asSingleString() {
25+
val input: StringInput = InputReader.read<String>(Day(100)) as StringInput
26+
assertThat(input.asSingleString()).isEqualTo("1\n2\n3\n4\n5")
27+
}
28+
29+
@Test
30+
fun asInvalidType() {
31+
val e = assertThrows<UnsupportedOperationException> { InputReader.read<Double>(Day(100)) }
32+
assertThat(e.message).isEqualTo("Input Reader does not support type: Double")
33+
}
34+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.github.tomplum.libs.input
2+
3+
import assertk.assertThat
4+
import assertk.assertions.isEqualTo
5+
import io.github.tomplum.libs.input.types.IntegerInput
6+
import org.junit.jupiter.api.Test
7+
8+
class InputTest {
9+
@Test
10+
fun asSingleString() {
11+
assertThat(IntegerInput(listOf("1", "4", "6")).asSingleString()).isEqualTo("1\n4\n6")
12+
}
13+
}

0 commit comments

Comments
 (0)