Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Day14 {
- val input = scala.io.Source.fromFile("data/data14.txt", "UTF-8").getLines.toVector.map(_.mkString)
- var surplus = 0
- def part1(): Unit = {
- println(recur("FUEL", 1) -surplus)
- }
- def recur(target:String, n:Int): Int = {
- if (target == "ORE") return returning(n, target)
- val potent:Vector[(Int,String)] = input.filter(xs => xs.split(" ").last == target)(0).split("=>").take(1)(0).split(", ").toVector.map(xs => (xs.split(" ")(0).toInt,xs.split(" ")(1)))
- println("Target: " + target)
- println("Demand: " + n)
- println("Potents:")
- potent.foreach(x => println(x._1 + " " + x._2))
- var m:Int = input.filter(_.split(" ").last == target)(0).split(" => ").takeRight(1)(0).split(" ")(0).toInt
- println("M: " + m)
- var sum = 0
- println
- for (pot <- potent) {
- val i:Int= recur(pot._2, java.lang.Math.ceil((n.toDouble * pot._1.toDouble) / m.toDouble).toInt)
- sum += i
- }
- println(target+ ": "+sum)
- sum
- }
- def part2(): Unit = {
- }
- def returning(n:Int, target:String):Int = {
- val o = input.filter(x => x.contains("ORE") || x.contains(target))(0).split(" => ").take(1)(0).split(" ").take(1)(0).toInt
- var sum = surplus
- surplus = 0
- while (sum < n) {
- sum += o
- }
- surplus = sum - n
- sum
- }
- // Ta in hur mycket som behövs, target (n,target)
- // kolla vad som behövs för att kunna skapa target. (potent)
- // kolla hur mycket som skapas (m)
- // dividera allt med hur mycket som ges, sen gångra det med hur mycket som behövs (pot._1 * n / m)
- // plussa på summa det som ges
- // ta minus de ores som blir överskott
- def apply() = {
- println("SOLUTION DAY 14")
- println("Running part 1")
- part1()
- println("Running part 2")
- //part2()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement