Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View MarkCLewis's full-sized avatar

Mark Lewis MarkCLewis

View GitHub Profile
@MarkCLewis
MarkCLewis / slambda2.scala
Last active December 18, 2021 18:23
Alternate Lambda Scala Example
/**
* Return a list of functions for attacks. Max roll takes 10% of health.
* Other values do that much damage.
*/
def attack(numTimes: Int, dieSides: Int): Seq[Int => Int] =
for i <- 1 to numTimes yield
val d = util.Random.between(1, dieSides + 1)
if d == dieSides then
(hits: Int) => math.max(d, hits / 10)
else
@MarkCLewis
MarkCLewis / plambda.py
Last active December 18, 2021 23:15
Lambda Comparison (Python vs. Scala)
import random
def attack(numTimes, dieSides):
"""
Return a list of functions for attacks. Max roll takes 10% of health.
Other values do that much damage.
"""
damageFuncs = []
for i in range(1, numTimes):
d = random.randint(1, dieSides)
@MarkCLewis
MarkCLewis / pclass.py
Last active December 18, 2021 18:23
Class Error Comparison (dynamics vs. static)
import math
class Person:
age = 5
name = 'hi'
def birthday(self):
self.age += 1
return self.age
@MarkCLewis
MarkCLewis / pfile_test.py
Last active December 18, 2021 18:19
File Reading Comparison (dnamic vs. static)
def readData(filename):
f = open(filename, 'r')
v1 = int(f.readline())
v2 = f.readline()
v3 = f.readline()
f.close()
return (v1, v2, v3)
def mult(x, y):
print(x, y) # Added for debugging
@MarkCLewis
MarkCLewis / pdice.py
Last active December 18, 2021 18:47
Dice Error Comparison (dynamic vs. static)
import random
def attack():
d1 = random.randint(1, 6)
d2 = random.randint(1, 6)
n = d1 + d2
if n == 2:
n = 'critical miss!'
elif n < 8:
m = 'weak hit.'
@MarkCLewis
MarkCLewis / Renderer2D.scala
Created August 26, 2017 13:03
Renderers that students can use for their graphical games in CSCI 1321.
import scalafx.scene.canvas.GraphicsContext
import scalafx.scene.image.Image
/**
* This is a 2D renderer that with draw your game elements to a Canvas. You should change the
* images to fit the style of your game. Also, alter the entities to match what you have in
* your game.
*/
class Renderer2D(gc: GraphicsContext, blockSize: Double) {
private var lastCenterX = 0.0
@MarkCLewis
MarkCLewis / MainTiming.scala
Created January 4, 2017 21:18
This shows two different timing applications that I used for timing some N-body simulations in Scala.
object MainTiming 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 / NBodyMutable.cpp
Created January 4, 2017 21:15
This file does a simple N-body simulation in C++ and times how long it takes to complete 1000 steps.
#include<iostream>
#include<valarray>
#include<cmath>
#include <chrono>
using namespace std;
struct MVect3 {
double x, y, z;
MVect3() {}
@MarkCLewis
MarkCLewis / NBodyFunctional.scala
Created January 4, 2017 00:09
This code gives two versions of an N-body integrator that are functional. The first one uses the approach of the mutable methods that does the minimum number of distance calculations, but at the cost of using updated on Vector. The second version does twice as many distance calculations, but doesn't have to rebuild data structures nearly as much…
object NBodyFunctional {
def initBodies(numBodies: Int): Vector[ImmutableBody] = {
Vector.tabulate(numBodies) { i =>
ImmutableBody(Vect3(i,0,0), Vect3(0,math.sqrt(1.0/i),0),
if(i==0) 1 else 1e-10)
}
}
def forSim(bodies: Vector[ImmutableBody], steps: Int, dt: Double): Vector[ImmutableBody] = {
@MarkCLewis
MarkCLewis / NBodyValClass.scala
Created January 3, 2017 19:12
This code does a simple N-body integration using arrays of doubles for storing values and a value class to make the code more readable without introducing overhead.
object NBodyValClass {
private var numBodies = 0
private var dt = 0.0
private var positions = Array.fill(0)(0.0)
private var velocities = Array.fill(0)(0.0)
private var accel = Array.fill(0)(0.0)
private var masses = Array.fill(0)(1e-10)
class Particle(val index: Int) extends AnyVal {
def x = positions(index*3)