advent-of-code/2019/Scala/day13/Main.scala

95 lines
2.4 KiB
Scala
Raw Normal View History

2019-12-13 07:38:22 +01:00
package day13
import intcode.{Finished, Input, Machine, Ready}
import kamlib.{Reader, Wrapper}
import scala.collection.mutable
object Main {
val screen = Array.ofDim[Int](50, 50)
@scala.annotation.tailrec
def drawScreen(list: List[Long]): Unit = {
list match {
case List() => ()
case x1::x2::x3::xs =>
if (x1 == -1 && x2 == 0) {
println(x3)
drawScreen(xs)
}
else drawScreen(xs) /*screen(x2.toInt)(x1.toInt) match {
case 0 =>
screen(x2.toInt)(x1.toInt) = x3.toInt
drawScreen(xs)
case 1 =>
drawScreen(xs)
case 2 =>
if (x3 == 4) screen(x2.toInt)(x1.toInt) = x3.toInt
else drawScreen(xs)
case 3 =>
drawScreen(xs)
case 4 =>
screen(x2.toInt)(x1.toInt) = x3.toInt
drawScreen(xs)
}*/
}
}
def logScreen(): Unit = {
println()
for (i <- 0 until 50; j <- 0 until 50) {
screen(j)(i) match {
case 0 => print('.')
case 1 => print('X')
case 2 => print('#')
case 3 => print('-')
case 4 => print('o')
}
if (j == 49) println()
}
}
@scala.annotation.tailrec
final def listof0(n: Int, list: List[Long] = List()): List[Long] = {
n match {
case 0 => list
case k => listof0(k-1, 0::list)
}
}
@scala.annotation.tailrec
final def iterate(machine: Machine): Unit = {
machine.getState match {
case Finished =>
drawScreen(machine.outputAll)
//logScreen()
()
case Input =>
machine.enqueue(0L)
machine.run()
drawScreen(machine.outputAll)
//logScreen()
iterate(machine)
case Ready =>
machine.run()
drawScreen(machine.outputAll)
//logScreen()
iterate(machine)
}
}
def main(args: Array[String]): Unit = {
val memory: Array[Long] = Array.ofDim[Long](5000)
val input: Array[Long] = Reader.readString("/input13.txt").split("[^\\d-]+").map(x => x.toLong)
for(i <- input.indices) { memory(i) = input(i)}
2019-12-13 07:53:56 +01:00
for (i <- 1608 until 1650) { memory(i) = 3 } /** Z0MG H4X */
2019-12-13 07:38:22 +01:00
val machine: Machine = new Machine(memory)
machine.setMem(0, 2)
iterate(machine)
}
}