- val C = io.Source.fromFile(today + "input").getLines.toList
- def parseMask(m: String) = m.zipWithIndex.filter(_._1 != 'X').map(x => (x._1 - '0', x._2)).map(_.swap).map(x => (35L - x._1.toLong, x._2.toLong)).toMap
- def flipBitAtIndex(cur: Long, mIndexBit: (Long, Long)): Long = {
- val (mIdx, bitFlip) = mIndexBit
- bitFlip match {
- case 1L ⇒ cur | (1L << mIdx)
- case 0L ⇒ cur & ~(1L << mIdx)
- }
- }
- var mask = Map[Long, Long]()
- var memory = Map[Long, Long]()
- C.foreach { line =>
- val command = line.split(" = ")
- if (command(0) == "mask") {
- mask = parseMask(command(1))
- } else {
- val index = command(0).substring(4, command(0).length - 1).toLong
- val value = command(1).toLong
- val maskedValue = mask.foldLeft(value)(flipBitAtIndex)
- memory = memory + (index -> maskedValue)
- }
- }
- println(memory.values.sum)
14 1