diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..3550a30
--- /dev/null
+++ b/.envrc
@@ -0,0 +1 @@
+use flake
diff --git a/.gitignore b/.gitignore
index 2fa6fd5..21cf35b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-**/input.txt
\ No newline at end of file
+**/input.txt
+.direnv
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -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
diff --git a/.idea/aoc2024.iml b/.idea/aoc2024.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/aoc2024.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..9c69411
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..6f29fee
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..5e7a8ca
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/day6/part1.kts b/day6/part1.kts
new file mode 100755
index 0000000..f1c9fbe
--- /dev/null
+++ b/day6/part1.kts
@@ -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>()
+
+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)
\ No newline at end of file
diff --git a/day6/part2.kts b/day6/part2.kts
new file mode 100755
index 0000000..6603afd
--- /dev/null
+++ b/day6/part2.kts
@@ -0,0 +1,115 @@
+#!/usr/bin/env kotlin
+
+import java.io.File
+
+object Constants {
+ const val CONSECUTIVE_REPEATS_THRESHOLD = 200
+}
+
+fun MutableList>.clone(): MutableList> {
+ val grid = mutableListOf>()
+ 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>()
+
+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)
\ No newline at end of file