This commit is contained in:
Tyler Beckman 2024-12-06 00:58:17 -07:00
parent 3c3eb26235
commit 5bae29ada4
Signed by: Ty
GPG key ID: 2813440C772555A4
9 changed files with 229 additions and 1 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

3
.gitignore vendored
View file

@ -1 +1,2 @@
**/input.txt **/input.txt
.direnv

8
.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

9
.idea/aoc2024.iml Normal file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View file

@ -0,0 +1,7 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="TsLint" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>

6
.idea/misc.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

11
.idea/modules.xml Normal file
View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/aoc2024.iml" filepath="$PROJECT_DIR$/.idea/aoc2024.iml" />
<module fileurl="file://$PROJECT_DIR$/.direnv/flake-inputs/ab78nf3ad8ly49zfyd3igw3f2n5q7fz4-source/pkgs/development/development.iml" filepath="$PROJECT_DIR$/.direnv/flake-inputs/ab78nf3ad8ly49zfyd3igw3f2n5q7fz4-source/pkgs/development/development.iml" />
<module fileurl="file://$PROJECT_DIR$/.direnv/flake-inputs/ab78nf3ad8ly49zfyd3igw3f2n5q7fz4-source/nixos/nixos.iml" filepath="$PROJECT_DIR$/.direnv/flake-inputs/ab78nf3ad8ly49zfyd3igw3f2n5q7fz4-source/nixos/nixos.iml" />
<module fileurl="file://$PROJECT_DIR$/.direnv/flake-inputs/ab78nf3ad8ly49zfyd3igw3f2n5q7fz4-source/pkgs/pkgs-lib/pkgs-lib.iml" filepath="$PROJECT_DIR$/.direnv/flake-inputs/ab78nf3ad8ly49zfyd3igw3f2n5q7fz4-source/pkgs/pkgs-lib/pkgs-lib.iml" />
</modules>
</component>
</project>

70
day6/part1.kts Executable file
View file

@ -0,0 +1,70 @@
#!/usr/bin/env kotlin
import java.io.File
enum class Direction {
UP,
DOWN,
RIGHT,
LEFT;
fun rotate90(): Direction {
return when (this) {
UP -> RIGHT
DOWN -> LEFT
RIGHT -> DOWN
LEFT -> UP
}
}
}
var grid = mutableListOf<MutableList<Char>>()
var guy = Pair(0, 0);
var direction = Direction.UP
var i = 0
File("./input.txt").forEachLine {
var iter = it.chars().iterator()
var j = 0
grid.add(MutableList(it.length) {
var next = iter.next().toChar()
if (next == '^') {
guy = Pair(i, j)
next = '.'
}
j++
next
})
i++
}
var steps = 0
while (true) {
val next = when (direction) {
Direction.UP -> Pair(guy.first - 1, guy.second)
Direction.DOWN -> Pair(guy.first + 1, guy.second)
Direction.RIGHT -> Pair(guy.first, guy.second + 1)
Direction.LEFT -> Pair(guy.first, guy.second - 1)
}
try {
if (grid[next.first][next.second] == '#') {
direction = direction.rotate90()
} else if (grid[next.first][next.second] == 'X') {
guy = next
} else {
grid[next.first][next.second] = 'X'
steps++
guy = next
}
} catch (_: IndexOutOfBoundsException) {
break
}
}
println(steps)

115
day6/part2.kts Executable file
View file

@ -0,0 +1,115 @@
#!/usr/bin/env kotlin
import java.io.File
object Constants {
const val CONSECUTIVE_REPEATS_THRESHOLD = 200
}
fun MutableList<MutableList<Char>>.clone(): MutableList<MutableList<Char>> {
val grid = mutableListOf<MutableList<Char>>()
var i = 0;
this.forEach {
grid.add(MutableList(it.size) { j ->
this[i][j]
})
i++
}
return grid
}
enum class Direction {
UP,
DOWN,
RIGHT,
LEFT;
fun rotate90(): Direction {
return when (this) {
UP -> RIGHT
DOWN -> LEFT
RIGHT -> DOWN
LEFT -> UP
}
}
}
var originalGrid = mutableListOf<MutableList<Char>>()
var originalGuy = Pair(0, 0);
var originalDirection = Direction.UP
var i = 0
File("./input.txt").forEachLine {
var iter = it.chars().iterator()
var j = 0
originalGrid.add(MutableList(it.length) {
var next = iter.next().toChar()
if (next == '^') {
originalGuy = Pair(i, j)
next = '.'
}
j++
next
})
i++
}
var sum = 0;
originalGrid.forEachIndexed rowLoop@{ i, row ->
row.forEachIndexed colLoop@{ j, _ ->
if (originalGrid[i][j] != '.') return@colLoop
val grid = originalGrid.clone()
grid[i][j] = '#'
var guy = originalGuy
var direction = originalDirection
var consecutiveRepeats = 0
while (true) {
val next = when (direction) {
Direction.UP -> Pair(guy.first - 1, guy.second)
Direction.DOWN -> Pair(guy.first + 1, guy.second)
Direction.RIGHT -> Pair(guy.first, guy.second + 1)
Direction.LEFT -> Pair(guy.first, guy.second - 1)
}
try {
if (grid[next.first][next.second] == '#') {
direction = direction.rotate90()
} else if (grid[next.first][next.second] == 'X') {
consecutiveRepeats++
guy = next
} else {
grid[next.first][next.second] = 'X'
consecutiveRepeats = 0
guy = next
}
} catch (_: IndexOutOfBoundsException) {
break
}
if (consecutiveRepeats >= Constants.CONSECUTIVE_REPEATS_THRESHOLD) {
sum++
break
}
}
print(
// Clear line
"\r " +
// Print status
"\rChecked row ${
i.toString().padStart(3, ' ')
} column ${j.toString().padStart(3, ' ')} (${
(((i * row.size + j + 1) * 100) / (originalGrid.size * originalGrid[0].size)).toString()
.padStart(3, ' ')
}%)"
)
}
}
println("\n" + sum)