|
Scala example source code file (knucleotide.scala-3.scala)
The Scala knucleotide.scala-3.scala source code
/* The Computer Language Benchmarks Game
http://shootout.alioth.debian.org/
contributed by Isaac Gouy
fixed by Iulian Dragos
fixed by Meiko Rachimow
*/
import java.io._
import scala.collection.mutable.{HashTable, HashEntry}
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): Unit = {
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
}
def generateFrequencies(length: Int) = {
val bag: HashBag[String] = new HashBag()
def kFrequency(offset: Int, j: Int) = {
val n = sequence.length - j + 1
var i = offset
while (i < n){ bag += sequence.substring(i,i+j); i = i+j }
}
for (val o <- Iterator.range(0,length)) kFrequency(o,length)
bag
}
def writeFrequencies(j: Int) = {
val bag = generateFrequencies(j)
val n = sequence.length - j + 1.0
val sortedValues = bag.iterator.toList.sort(
(a,b) => if (a.value == b.value) a.key > b.key
else a.value > b.value )
for (val a <- sortedValues)
Console.printf("%s %.3f\n", a.key, a.value / n * 100.0)
Console.println
}
def writeCount(fragment: String) = {
val bag = generateFrequencies(fragment.length)
Console.println( bag.findOccurrences(fragment) + "\t" + fragment )
}
}
class HashBag[A] extends HashTable[A, Counter[A]] {
protected type Entry = Counter[A]
protected def entryKey(e: Entry) = e.key
def iterator = entries
def +=(elem: A): Unit = {
var bucket = table(index(elemHashCode(elem))).asInstanceOf[Entry]
while (bucket ne null) {
if (elemEquals(entryKey(bucket), elem)){
bucket.inc
return
}
bucket = bucket.next
}
addEntry(new Entry(elem, 1))
}
def findOccurrences(elem: A): Int = {
var bucket = table(index(elemHashCode(elem))).asInstanceOf[Entry]
while (bucket ne null) {
if (elemEquals(entryKey(bucket), elem)){
return bucket.value
}
bucket = bucket.next
}
return 0
}
/*
def -=(elem: A): Unit = {
var bucket = table(index(elemHashCode(elem)))
while (!bucket.isEmpty) {
if (elemEquals(entryKey(bucket.head), elem)){
bucket.head.dec
if (bucket.head.value == 0) removeEntry(elem)
return
}
bucket = bucket.tail
}
}
*/
}
protected class Counter[A](k: A, v: Int) extends AnyRef with HashEntry[A, Counter[A]] {
val key = k
var value = v
def inc = { value = value + 1 }
def dec = { value = value - 1 }
}
Other Scala examples (source code examples)Here is a short list of links related to this Scala knucleotide.scala-3.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
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.