Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.80 KB | None | 0 0
  1.  
  2. object Day14 {
  3.   val input = scala.io.Source.fromFile("data/data14.txt", "UTF-8").getLines.toVector.map(_.mkString)
  4.   var surplus = 0
  5.   def part1(): Unit = {
  6.     println(recur("FUEL", 1) -surplus)
  7.   }
  8.  
  9.   def recur(target:String, n:Int): Int = {
  10.  
  11.     if (target == "ORE") return returning(n, target)
  12.  
  13.     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)))
  14.     println("Target: " + target)
  15.     println("Demand: " + n)
  16.     println("Potents:")
  17.     potent.foreach(x => println(x._1 + " " + x._2))
  18.  
  19.     var m:Int = input.filter(_.split(" ").last == target)(0).split(" => ").takeRight(1)(0).split(" ")(0).toInt
  20.     println("M: " + m)
  21.     var sum = 0
  22.     println
  23.     for (pot <- potent) {
  24.       val i:Int= recur(pot._2, java.lang.Math.ceil((n.toDouble * pot._1.toDouble) / m.toDouble).toInt)
  25.       sum += i
  26.     }
  27.     println(target+ ": "+sum)
  28.     sum
  29.   }
  30.  
  31.   def part2(): Unit = {
  32.  
  33.   }
  34.  
  35.   def returning(n:Int, target:String):Int = {
  36.     val o = input.filter(x => x.contains("ORE") || x.contains(target))(0).split(" => ").take(1)(0).split(" ").take(1)(0).toInt
  37.     var sum = surplus
  38.     surplus = 0
  39.  
  40.     while (sum < n) {
  41.       sum  += o
  42.     }
  43.     surplus = sum - n
  44.     sum
  45.   }
  46.  
  47.   // Ta in hur mycket som behövs, target (n,target)
  48.   // kolla vad som behövs för att kunna skapa target. (potent)
  49.   // kolla hur mycket som skapas (m)
  50.   // dividera allt med hur mycket som ges, sen gångra det med hur mycket som behövs (pot._1 * n / m)
  51.   // plussa på summa det som ges
  52.   // ta minus de ores som blir överskott
  53.  
  54.  
  55.  
  56.  
  57.   def apply() = {
  58.     println("SOLUTION DAY 14")
  59.     println("Running part 1")
  60.     part1()
  61.     println("Running part 2")
  62.     //part2()
  63.   }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement