ScalaでVerticalCode

とりあえず作った

import scala.collection.mutable.BitSet
class VerticalCode(nums:Array[Int]) {
  val length = 32
  var data   = Array[BitSet]()
  this.insertNums(nums)

  def insertNums(nums:Array[Int]) = {
    for (i <- 0 until nums.length) {
      val diff = if (i > 0) nums(i) - nums(i-1) else nums(i)
      if (diff > -1) this.insertNum(diff, i)
    }
  }

  def insertNum(num:Int, index:Int) = {
    val binary = num.toBinaryString
    val diff   = binary.length - this.data.length 
    
    for (i <- 0 until diff) this.data = this.data :+ BitSet()
    for (digit <- binary.length to 1 by -1) {
      if (binary(digit - 1).toString.toInt == 1) this.data(this.data.length - digit) += index
    }
  }

  def dump() {
    this.data.foreach { bitset =>
      var line = ""
      for (i <- 0 until this.length) line += (if(bitset(i)) "1" else "0")
      println(line)
    }
  }

}

object TryVerticalCode {
  def main(args:Array[String]) {
    val vc = new VerticalCode(Array(0,1,2,4))
    vc.dump()
  }
}