diff --git a/README.md b/README.md
index 02fa6c8..841f11e 100644
--- a/README.md
+++ b/README.md
@@ -5,11 +5,11 @@ This repo contains my attempt at this year's Advent of Code (2023)
I will try and do some problems (probably not all of them) in Scala
## Progress:
-#### Stars: 12 / 50
-| Mon | Tue | Wed | Thu | Fri | Sat | Sun |
-|:-----------------:|:-----------------:|:-----------------:|:---:|:-----------------:|:-----------------:|:-----------------:|
-| | | | | 1
:star::star: | 2
:star::star: | 3
:star::star: |
-| 4
:star::star: | 5
:star::star: | 6
:star::star: | 7 | 8 | 9 | 10 |
-| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
-| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
-| 25 | | | | | | |
\ No newline at end of file
+#### Stars: 13 / 50
+| Mon | Tue | Wed | Thu | Fri | Sat | Sun |
+|:-----------------:|:-----------------:|:-----------------:|:-----------:|:-----------------:|:-----------------:|:-----------------:|
+| | | | | 1
:star::star: | 2
:star::star: | 3
:star::star: |
+| 4
:star::star: | 5
:star::star: | 6
:star::star: | 7
:star: | 8 | 9 | 10 |
+| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
+| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
+| 25 | | | | | | |
\ No newline at end of file
diff --git a/src/day7/Hand.scala b/src/day7/Hand.scala
new file mode 100644
index 0000000..51f909d
--- /dev/null
+++ b/src/day7/Hand.scala
@@ -0,0 +1,47 @@
+package day7
+
+import scala.collection.mutable
+
+class Hand(var cards: Array[Int], val bid: Int) {
+ def getType(): Int = {
+ val cardsMap: mutable.Map[Int, Int] = new mutable.HashMap()
+ for (card: Int <- cards) {
+ if (!cardsMap.contains(card)) {
+ cardsMap(card) = 0
+ }
+ cardsMap(card) += 1
+ }
+
+ val keys: Array[Int] = cardsMap.keys.toArray
+ val values: Array[Int] = cardsMap.values.toArray
+ if (keys.length == 1) {
+ return 6
+ }
+ if (keys.length == 2) {
+ if (values.contains(4)) return 5
+ if (values.contains(3) && values.contains(2)) return 4
+ }
+ if (values.contains(3)) return 3
+ if (values.contains(2)) {
+ if (values.count(v => v == 2) == 2) return 2
+ return 1
+ }
+ return 0
+ }
+
+ def isBetter(hand: Hand): Boolean = {
+ val t1: Int = getType()
+ val t2: Int = hand.getType()
+ if (t1 > t2) return true
+ if (t1 < t2) return false
+
+ for ((c1: Int, c2: Int) <- cards.zip(hand.cards)) {
+ if (c1 != c2) {
+ return c1 > c2
+ }
+ }
+ return false
+ }
+
+ override def toString: String = s"Hand(${cards.mkString}, $bid, ${getType()})"
+}
diff --git a/src/day7/Puzzle1.scala b/src/day7/Puzzle1.scala
new file mode 100644
index 0000000..6a76647
--- /dev/null
+++ b/src/day7/Puzzle1.scala
@@ -0,0 +1,46 @@
+package day7
+
+import scala.io.{BufferedSource, Source}
+
+object Puzzle1 {
+ val CARDS: Array[Int] = Array('2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A')
+ var hands: Array[Hand] = Array.empty
+
+ def loadInput(path: String): Unit = {
+ val source: BufferedSource = Source.fromFile(path)
+ val lines: Array[String] = source.getLines().toArray
+
+ hands = new Array(lines.length)
+
+ for ((line: String, i: Int) <- lines.zipWithIndex) {
+ val parts: Array[String] = line.split(" ")
+ val cards: Array[Int] = parts(0).map(c => CARDS.indexOf(c)).toArray
+ val bid: Int = parts(1).toInt
+ hands(i) = new Hand(cards, bid)
+ }
+
+ source.close()
+ }
+
+ def sortHands(): Unit = {
+ hands = hands.sortWith((h1: Hand, h2: Hand) => h2.isBetter(h1))
+ }
+
+ def solve(path: String): Int = {
+ loadInput(path)
+ sortHands()
+
+ var solution: Int = 0
+
+ for ((hand: Hand, i: Int) <- hands.zipWithIndex) {
+ solution += hand.bid * (i+1)
+ }
+
+ return solution
+ }
+
+ def main(args: Array[String]): Unit = {
+ val solution: Int = solve("./res/day7/input1.txt")
+ println(solution)
+ }
+}
diff --git a/tests/day7/Puzzle1Test.scala b/tests/day7/Puzzle1Test.scala
new file mode 100644
index 0000000..b0ac48d
--- /dev/null
+++ b/tests/day7/Puzzle1Test.scala
@@ -0,0 +1,9 @@
+package day7
+
+import org.scalatest.funsuite.AnyFunSuite
+
+class Puzzle1Test extends AnyFunSuite {
+ test("Puzzle1.solve") {
+ assert(Puzzle1.solve("tests_res/day7/input1.txt") == 6440)
+ }
+}
diff --git a/tests_res/day7/input1.txt b/tests_res/day7/input1.txt
new file mode 100644
index 0000000..bf2815e
--- /dev/null
+++ b/tests_res/day7/input1.txt
@@ -0,0 +1,5 @@
+32T3K 765
+T55J5 684
+KK677 28
+KTJJT 220
+QQQJA 483
\ No newline at end of file