alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Scala example source code file (knucleotide.scala-2.scala)

This example Scala source code file (knucleotide.scala-2.scala) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Scala tags/keywords

bufferedreader, bufferedreader, counter, counter, ggt, ggta, ggtatt, ggtattttaatttatagt, hashmap, int, int, io, string, string, stringbuffer

The Scala knucleotide.scala-2.scala source code

/* The Computer Language Shootout
   http://shootout.alioth.debian.org/
   contributed by Isaac Gouy
*/

import java.io._
import scala.collection.mutable.HashMap
import scala.Console

object knucleotide { 

   var sequence: String = _

   def main(args: Array[String]) = {
      val r = new BufferedReader(new InputStreamReader(System.in))
      findSequence(">THREE", r)
      sequence = nextSequence(r)
      r.close

      writeFrequencies(1)
      writeFrequencies(2)

      writeCount("GGT")
      writeCount("GGTA")
      writeCount("GGTATT")
      writeCount("GGTATTTTAATT")
      writeCount("GGTATTTTAATTTATAGT")
   } 



   def findSequence(id: String, r: BufferedReader) {
      var line = r.readLine
      while (line != null) {
         val c = line.charAt(0)
         if (c == '>' && line.startsWith(id)) return
         line = r.readLine
      }
   } 


   def nextSequence(r: BufferedReader): String = {
      val b = new StringBuffer()

      var line = r.readLine
      while (line != null) {
         val c = line.charAt(0)
         if (c == '>') { 
            return b.toString
         } else { 
            if (c != ';') b.append(line.toUpperCase) 
         }
         line = r.readLine
      }
      b.toString
   }


   class Counter(_value: Int) { 
      var value = _value
      def ++() = { value += 1 }
   }


   def generateFrequencies(length: Int) = {
      val d: HashMap[String,Counter] = new HashMap()
   
      def kFrequency(offset: Int, j: Int) = {
         val n = sequence.length - j + 1
         var i = offset
         while (i < n){
            val k = sequence.substring(i, i+j)
            d.get(k) match {
               case None => d += (k -> new Counter(1))
               case Some(c) => c++
            }
            i += j
         }
      }

      for (o <- Iterator.range(0,length)) kFrequency(o,length)
      d
   } 


   def writeFrequencies(j: Int) {
      val d = generateFrequencies(j)
      val n = sequence.length - j + 1.0
      val sortedValues = d.toList.sort(
         (a,b) => if (a._2.value == b._2.value) a._1 > b._1 
                  else a._2.value > b._2.value )

      for (a <- sortedValues) 
         Console.printf("%s %.3f\n", a._1, a._2.value / n * 100.0)

      Console.println
   }


   def writeCount(fragment: String) {
      val d = generateFrequencies(fragment.length)
      val count = if (d.contains(fragment)) d(fragment).value else 0
      Console.println(count + "\t" + fragment)
   }

}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala knucleotide.scala-2.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.