Add solutions to the first day of AOC-23
This commit is contained in:
parent
17bdab0a43
commit
acf076a7ac
8 changed files with 1140 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
|||
*.o
|
||||
bin
|
||||
target
|
||||
*.jar
|
||||
|
|
1000
advent-of-code-2023/01/input.txt
Normal file
1000
advent-of-code-2023/01/input.txt
Normal file
File diff suppressed because it is too large
Load diff
23
advent-of-code-2023/01/part-1/main.kt
Normal file
23
advent-of-code-2023/01/part-1/main.kt
Normal file
|
@ -0,0 +1,23 @@
|
|||
package main
|
||||
|
||||
import java.io.File
|
||||
|
||||
fun main() {
|
||||
var sum = 0
|
||||
File("../input.txt").forEachLine{
|
||||
var firstDigit = ""
|
||||
var lastDigit = ""
|
||||
|
||||
for (c in it) {
|
||||
if (c.isDigit()) {
|
||||
lastDigit = c.toString()
|
||||
if (firstDigit == "") {
|
||||
firstDigit = c.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sum += (firstDigit + lastDigit).toInt()
|
||||
}
|
||||
println(sum)
|
||||
}
|
4
advent-of-code-2023/01/part-1/test.txt
Normal file
4
advent-of-code-2023/01/part-1/test.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
1abc2
|
||||
pqr3stu8vwx
|
||||
a1b2c3d4e5f
|
||||
treb7uchet
|
39
advent-of-code-2023/01/part-2/main.kt
Normal file
39
advent-of-code-2023/01/part-2/main.kt
Normal file
|
@ -0,0 +1,39 @@
|
|||
package main
|
||||
|
||||
import java.io.File
|
||||
|
||||
fun main() {
|
||||
var sum = 0
|
||||
File("../input.txt").forEachLine{
|
||||
var firstDigit = ""
|
||||
var lastDigit = ""
|
||||
|
||||
for (c in replaceStrWithDigits(it)) {
|
||||
if (c.isDigit()) {
|
||||
lastDigit = c.toString()
|
||||
if (firstDigit == "") {
|
||||
firstDigit = c.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sum += (firstDigit + lastDigit).toInt()
|
||||
}
|
||||
println(sum)
|
||||
}
|
||||
|
||||
fun replaceStrWithDigits(line: String): String {
|
||||
var s = line
|
||||
var words = arrayOf("one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
|
||||
var i = 0
|
||||
while (i < s.length) {
|
||||
for (w in words.indices) {
|
||||
if (s.slice(i..s.length-1).startsWith(words[w])) {
|
||||
s = s.replaceRange(i, i + 1, (w + 1).toString())
|
||||
break
|
||||
}
|
||||
}
|
||||
i += 1
|
||||
}
|
||||
return s
|
||||
}
|
7
advent-of-code-2023/01/part-2/test.txt
Normal file
7
advent-of-code-2023/01/part-2/test.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
two1nine
|
||||
eightwothree
|
||||
abcone2threexyz
|
||||
xtwone3four
|
||||
4nineeightseven2
|
||||
zoneight234
|
||||
7pqrstsixteen
|
62
advent-of-code-2023/01/readme.md
Normal file
62
advent-of-code-2023/01/readme.md
Normal file
|
@ -0,0 +1,62 @@
|
|||
# Day 1: Trebuchet?!
|
||||
|
||||
Something is wrong with global snow production, and you've been selected to take a look.
|
||||
The Elves have even given you a map; on it, they've used stars to mark the top fifty locations
|
||||
that are likely to be having problems.
|
||||
|
||||
You've been doing this long enough to know that to restore snow operations,
|
||||
you need to check all fifty stars by December 25th.
|
||||
|
||||
Collect stars by solving puzzles. Two puzzles will be made available on each day in the Advent calendar;
|
||||
the second puzzle is unlocked when you complete the first. Each puzzle grants one star. Good luck!
|
||||
|
||||
You try to ask why they can't just use a weather machine ("not powerful enough")
|
||||
and where they're even sending you ("the sky") and why your map looks mostly blank
|
||||
("you sure ask a lot of questions") and hang on did you just say the sky
|
||||
("of course, where do you think snow comes from") when you realize that the Elves
|
||||
are already loading you into a trebuchet ("please hold still, we need to strap you in").
|
||||
|
||||
As they're making the final adjustments, they discover that their calibration document
|
||||
(your puzzle input) has been amended by a very young Elf who was apparently just excited to show off
|
||||
her art skills. Consequently, the Elves are having trouble reading the values on the document.
|
||||
|
||||
The newly-improved calibration document consists of lines of text;
|
||||
each line originally contained a specific calibration value that the Elves now need to recover.
|
||||
On each line, the calibration value can be found by combining the first digit and the last digit
|
||||
(in that order) to form a single two-digit number.
|
||||
|
||||
For example:
|
||||
|
||||
```
|
||||
1abc2
|
||||
pqr3stu8vwx
|
||||
a1b2c3d4e5f
|
||||
treb7uchet
|
||||
```
|
||||
|
||||
In this example, the calibration values of these four lines are `12`, `38`, `15`, and `77`.
|
||||
Adding these together produces `142`.
|
||||
|
||||
Consider your entire calibration document. What is the sum of all of the calibration values?
|
||||
|
||||
## Part Two
|
||||
|
||||
Your calculation isn't quite right. It looks like some of the digits are actually spelled out with letters:
|
||||
`one`, `two`, `three`, `four`, `five`, `six`, `seven`, `eight`, and `nine` also count as valid "digits".
|
||||
|
||||
Equipped with this new information, you now need to find the real first and last digit on each line. For example:
|
||||
|
||||
```
|
||||
two1nine
|
||||
eightwothree
|
||||
abcone2threexyz
|
||||
xtwone3four
|
||||
4nineeightseven2
|
||||
zoneight234
|
||||
7pqrstsixteen
|
||||
```
|
||||
|
||||
In this example, the calibration values are `29`, `83`, `13`, `24`, `42`, `14`, and `76`.
|
||||
Adding these together produces `281`.
|
||||
|
||||
What is the sum of all of the calibration values?
|
4
advent-of-code-2023/readme.md
Normal file
4
advent-of-code-2023/readme.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Advent of code 2023
|
||||
|
||||
My goal is to learn the basics of Kotlin.
|
||||
I have never worked with Kotlin or Java before.
|
Loading…
Reference in a new issue