⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 revcomp.scala-2.scala

📁 JAVA 语言的函数式编程扩展
💻 SCALA
字号:
/* The Computer Language Shootout   http://shootout.alioth.debian.org/   contributed by Isaac Gouy*/import java.io._import scala.collection.mutable.Stackobject revcomp {    val IUB = IUBCodeComplements   def IUBCodeComplements() = {      val code = "ABCDGHKMNRSTVWYabcdghkmnrstvwy".getBytes      val comp = "TVGHCDMKNYSABWRTVGHCDMKNYSABWR".getBytes      val a: Array[byte] = new Array( 'z'.toByte )      for (val indexValue <- code zip comp)         indexValue match { case Pair(i,v) => a(i) = v }      a   }   type LineStack = Stack[Array[byte]]   def main(args: Array[String]) = {      val r = new BufferedReader(new InputStreamReader(System.in))      val w = new BufferedOutputStream(System.out)      var lines: LineStack = new Stack      var desc = ""      var line = r.readLine      while (line != null) {         val c = line.charAt(0)         if (c == '>'){            if (desc.length > 0){               complementReverseWrite(desc, lines, w)               lines = new Stack            }            desc = line         } else {            if (c != ';') lines += line.getBytes         }         line = r.readLine      }      r.close      if (desc.length > 0) complementReverseWrite(desc, lines, w)      w.close   }    def complementReverseWrite(desc: String, lines: LineStack,          w: BufferedOutputStream) = {      def inplaceComplementReverse(b: Array[byte]) = {         var i = 0          var j = b.length - 1         while (i < j){            val swap = b(i)             b(i) = IUB( b(j) )             b(j) = IUB( swap )            i = i + 1            j = j - 1         }         if (i == j) b(i) = IUB( b(i) )      }      val nl = '\n'.toByte      w.write(desc.getBytes); w.write(nl)      val n = 60      val k = if (lines.isEmpty) 0 else lines.top.length      val isSplitLine = k < n      var isFirstLine = true      while (!lines.isEmpty) {        val line = lines.pop        inplaceComplementReverse(line)                if (isSplitLine){           if (isFirstLine){ w.write(line); isFirstLine = false }           else { w.write(line,0,n-k); w.write(nl); w.write(line,n-k,k) }        }         else { w.write(line); w.write(nl) }      }      if (isSplitLine && !isFirstLine) w.write(nl)   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -