Skip to content

Instantly share code, notes, and snippets.

View MarkCLewis's full-sized avatar

Mark Lewis MarkCLewis

View GitHub Profile
@MarkCLewis
MarkCLewis / NBodyImmutableClass.scala
Last active January 3, 2017 19:07
This code uses immutable body and 3-D vector classes with a mutable array to do a basic N-body simulation.
case class Vect3(x: Double, y: Double, z: Double) {
def +(v: Vect3) = Vect3(x+v.x, y+v.y, z+v.z)
def -(v: Vect3) = Vect3(x-v.x, y-v.y, z-v.z)
def *(c: Double) = Vect3(x*c, y*c, z*c)
def /(c: Double) = Vect3(x/c, y/c, z/c)
}
case class ImmutableBody(p: Vect3, v: Vect3, mass: Double) {
def step(a: Vect3, dt: Double) = {
val nv = v+a*dt
@MarkCLewis
MarkCLewis / NBodyMutableClass.scala
Created January 3, 2017 16:51
This code does a basic N-body simulation using arrays of mutable classes. This approach mirrors what is done in languages like C++, but the memory model is different so the array actually holds references to the bodies and the bodies could be distributed through memory.
class MVect3(var x: Double, var y: Double, var z: Double) {
def zero(): Unit = {
x = 0.0
y = 0.0
z = 0.0
}
}
class MutableBody(
val p: MVect3,
@MarkCLewis
MarkCLewis / NBodyArray.scala
Created January 1, 2017 21:05
This is a little code segment that I wrote to do a time comparison of the speed of Scala for and while loops between 2.11 and 2.12. This code uses a lot of mutation with a value class that makes things more OO. I plan to test this against other approaches for overall speed later.
object NBodyArray extends App {
def timeCode[T](warmups: Int, timeRuns: Int)(body: => T): Seq[Double] = {
for(_ <- 1 to warmups) body
for(_ <- 1 to timeRuns) yield {
val start = System.nanoTime()
body
(System.nanoTime()-start)*1e-9
}
}
def printTimeInfo(times: Seq[Double]): Unit = {
@MarkCLewis
MarkCLewis / REAddition.scala
Created December 7, 2015 15:04
This is a Scala program that runs a Chomsky recursively enumerable grammar. The grammar that it is set up to run adds binary numbers.
package grammars
import io.StdIn._
/**
* @author mlewis
*/
object REAddition extends App {
val prods1 = Map[String, String](
"N+N1" -> "SN+'NL1",
import io.Source
val exportRegex = """.*PIMSDB"."(\S+)".*""".r
val exportSource = Source.fromFile("DBExportList.txt")
val exportData = (for(exportRegex(fname) <- exportSource.getLines) yield fname.trim).toArray
exportSource.close
val tableSource = Source.fromFile("TableDefTable.txt")
val tableData = tableSource.getLines.map(_.split("\t")(1).trim.toUpperCase).toArray
tableSource.close