Compare commits
	
		
			2 Commits
		
	
	
		
			12240f6d8c
			...
			bd84c48a21
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| bd84c48a21 | |||
| 3395f8848f | 
							
								
								
									
										57
									
								
								src/day2/Puzzle1.scala
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/day2/Puzzle1.scala
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | package day2 | ||||||
|  |  | ||||||
|  | import scala.collection.immutable.HashMap | ||||||
|  | import scala.collection.mutable.ArrayBuffer | ||||||
|  | import scala.io.{BufferedSource, Source} | ||||||
|  |  | ||||||
|  | object Puzzle1 { | ||||||
|  |   var games: Array[String] = new Array(0) | ||||||
|  |   def loadInput(path: String): Unit = { | ||||||
|  |     val source: BufferedSource = Source.fromFile(path) | ||||||
|  |     games = source.getLines().toArray | ||||||
|  |     source.close() | ||||||
|  |   } | ||||||
|  |   def getPossible(content: Map[String, Int]): ArrayBuffer[Int] = { | ||||||
|  |     val result: ArrayBuffer[Int] = new ArrayBuffer() | ||||||
|  |  | ||||||
|  |     for (game: String <- games) { | ||||||
|  |       val parts: Array[String] = game.split(": ") | ||||||
|  |       val gameId: Int = parts(0).split(" ")(1).toInt | ||||||
|  |       val sets: Array[String] = parts(1).split("; ") | ||||||
|  |  | ||||||
|  |       if (isGamePossible(sets, content)) { | ||||||
|  |         result.addOne(gameId) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     return result | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   def isGamePossible(sets: Array[String], content: Map[String, Int]): Boolean = { | ||||||
|  |       for (set: String <- sets) { | ||||||
|  |         val groups: Array[String] = set.split(", ") | ||||||
|  |         for (group: String <- groups) { | ||||||
|  |           val parts: Array[String] = group.split(" ") | ||||||
|  |           val count: Int = parts(0).toInt | ||||||
|  |           val color: String = parts(1) | ||||||
|  |  | ||||||
|  |           if (content(color) < count) return false | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       return true | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   def solve(path: String, content: Map[String, Int]): Int = { | ||||||
|  |     loadInput(path) | ||||||
|  |     val possibleGames: Array[Int] = getPossible(content).toArray | ||||||
|  |     return possibleGames.sum | ||||||
|  |   } | ||||||
|  |   def main(args: Array[String]): Unit = { | ||||||
|  |     val solution: Int = solve("res/day2/input1.txt", HashMap( | ||||||
|  |       "red" -> 12, | ||||||
|  |       "green" -> 13, | ||||||
|  |       "blue" -> 14 | ||||||
|  |     )) | ||||||
|  |     println(solution) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										59
									
								
								src/day2/Puzzle2.scala
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/day2/Puzzle2.scala
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | package day2 | ||||||
|  |  | ||||||
|  | import scala.collection.mutable | ||||||
|  | import scala.io.{BufferedSource, Source} | ||||||
|  |  | ||||||
|  | object Puzzle2 { | ||||||
|  |   var games: Array[String] = new Array(0) | ||||||
|  |   def loadInput(path: String): Unit = { | ||||||
|  |     val source: BufferedSource = Source.fromFile(path) | ||||||
|  |     games = source.getLines().toArray | ||||||
|  |     source.close() | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   def getPowers(): Array[Int] = { | ||||||
|  |     val powers: Array[Int] = new Array(games.length) | ||||||
|  |     for ((game: String, i: Int) <- games.zipWithIndex) { | ||||||
|  |       powers(i) = getPower(game) | ||||||
|  |     } | ||||||
|  |     return powers | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   def getPower(game: String): Int = { | ||||||
|  |     var power: Int = 1 | ||||||
|  |  | ||||||
|  |     val sets: Array[String] = game.split(": ")(1).split("; ") | ||||||
|  |     val minCounts: mutable.Map[String, Int] = new mutable.HashMap() | ||||||
|  |  | ||||||
|  |     for (set: String <- sets) { | ||||||
|  |       val groups: Array[String] = set.split(", ") | ||||||
|  |       for (group: String <- groups) { | ||||||
|  |         val parts: Array[String] = group.split(" ") | ||||||
|  |         val count: Int = parts(0).toInt | ||||||
|  |         val color: String = parts(1) | ||||||
|  |  | ||||||
|  |         if (minCounts.contains(color)) { | ||||||
|  |           minCounts(color) = math.max(minCounts(color), count) | ||||||
|  |         } else { | ||||||
|  |           minCounts(color) = count | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     minCounts.foreach((p: (String, Int)) => { | ||||||
|  |       power *= p._2 | ||||||
|  |     }) | ||||||
|  |     return power | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   def solve(path: String): Int = { | ||||||
|  |     loadInput(path) | ||||||
|  |     val powers: Array[Int] = getPowers() | ||||||
|  |     return powers.sum | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   def main(args: Array[String]): Unit = { | ||||||
|  |     val solution: Int = solve("res/day2/input1.txt") | ||||||
|  |     println(solution) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								tests/day2/Puzzle1Test.scala
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								tests/day2/Puzzle1Test.scala
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | package day2 | ||||||
|  |  | ||||||
|  | import org.scalatest.funsuite.AnyFunSuite | ||||||
|  |  | ||||||
|  | import scala.collection.immutable.HashMap | ||||||
|  |  | ||||||
|  | class Puzzle1Test extends AnyFunSuite { | ||||||
|  |   test("Puzzle1.solve") { | ||||||
|  |     assert(Puzzle1.solve("tests_res/day2/input1.txt", HashMap( | ||||||
|  |       "red" -> 12, | ||||||
|  |       "green" -> 13, | ||||||
|  |       "blue" -> 14 | ||||||
|  |     )) == 8) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								tests/day2/Puzzle2Test.scala
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								tests/day2/Puzzle2Test.scala
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | package day2 | ||||||
|  |  | ||||||
|  | import org.scalatest.funsuite.AnyFunSuite | ||||||
|  |  | ||||||
|  | class Puzzle2Test extends AnyFunSuite { | ||||||
|  |   test("Puzzle2.solve") { | ||||||
|  |     assert(Puzzle2.solve("tests_res/day2/input1.txt") == 2286) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								tests_res/day2/input1.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								tests_res/day2/input1.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green | ||||||
|  | Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue | ||||||
|  | Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red | ||||||
|  | Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red | ||||||
|  | Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green | ||||||
		Reference in New Issue
	
	Block a user