View parprog - week1.sc
// task and parallel definition can be found at https://www.coursera.org/learn/parprog1/discussions/weeks/1/threads/2gsI2DHVEeaKAhJC1hWxEQ/replies/-avxXTIBEeabvwrOSKMg4w/comments/O5yTH3K6EeeM7BK4-ybiDA | |
/** Computes the blurred RGBA value of a single pixel of the input image. */ | |
def boxBlurKernel(src: Img, x: Int, y: Int, radius: Int): RGBA = { | |
val xMin = clamp(x-radius, 0, src.width-1) | |
val xMax = clamp(x+radius, 0, src.width-1) | |
val yMin = clamp(y-radius, 0, src.height-1) | |
val yMax = clamp(y+radius, 0, src.height-1) | |
var (i,j,n) = (xMin, yMin, 0.0) | |
var r,g,b,a = 0.0 |
View lib.html
<script id="library" title="it must be a part of starndard javascript"> | |
const log = console.log ; const assert = console.assert | |
update = (o, mutator) => {mutator(o); return o} | |
trace = (value, format) => {format = format || (data => data) ; log(format(value)); return value}; | |
tracejs = (msg, data) => trace(data, data => [msg, data.json()]) | |
Object.prototype.trace = function(format) {trace(this, format)} | |
function range (len, begin) {begin = begin || 0 |
View header.js
const log = console.log ; const assert = console.assert | |
//Object.prototype.trace = function(format) {format = format || (data => data); log(format(this)); return this} // prints something wrong | |
const trace = (data, format) => {format = format || (data => data); log(format(data)); return data} | |
const tracejs = (ms, data) => trace(data, data => [ms, data.json()]) | |
function range (len, begin) {begin = begin || 0 | |
return Array.apply(null, Array(len)).map((_, i) => {return begin+i;})} | |
//Array.prototype.fill = function(filler) {return this.map(_ => filler)} // startard func | |
Array.prototype.equals = function(that) {return this.every((my, i) => my == that[i] )} ; [1,2].equals([1,2]) | |
Array.prototype.sum = function() {return this.reduce((acc, el) => acc + el,0)} |
View 1. ProxyDB - reduced.sc
import java.lang.reflect.{Method, InvocationHandler, Proxy} | |
import scala.language.reflectiveCalls, scala.language.postfixOps | |
import scala.collection.mutable, java.io._, Util._ | |
// I called this version "reduced" because proxies are not GC-ed when not referenced by user | |
// This makes a code a bit simpler and, probably, even faster if proxies are small indeed. | |
// The experiment | |
// timeit "scala -J-Xmx33m ProxyDemo + 16 100 > nul" | |
// however suggests that this implementation is slow as 144 sec vs 129 sec for managed proxies. |
View Test.sc
import Vhdl._ | |
// TODO: CharLiteral -> Char, StringLiteral -> String to save memory | |
object AllTests extends App { | |
def recover[T](okMsg: String/*, shouldRecover: T => Boolean = _ => true*/): ParseResult[T] => ParseResult[_] = pr => pr match { | |
case f @ Failure(msg, rem) => Success(okMsg, rem) //if (shouldRecover(msg)) Success(okMsg, rem) else f | |
case e @ Error(msg, rem) => println("Recovering error " + msg); Success(okMsg, rem) //if (shouldRecover(msg)) Success(okMsg, rem) else f | |
case s @ Success(msg, rem) => Failure(s"we had to fail because $okMsg but succeeded with " + msg, rem); case a => a | |
} |
View Expressions.sc
trait E { | |
def e(dict: Map[Const, Int]): Int | |
def +(another: E): E = (this, another) match { | |
case (zero, _) => another // Bug! Bug! this unintentionally redefines zero | |
case (_, zero) => this | |
case _ => Plus(this, another) | |
} | |
def *(another: E): E = { | |
def par(e: E) = e match {case e @ Plus(a,b) => Par(e); case e => e} | |
Mult(par(this), par(another)) |
View 1. asexual_oversimplication.scala
// This talk https://www.youtube.com/watch?v=MGfr_col5PI claims that if 4% of healty people degenerate with every | |
// and if 50% recover from defective genetics then we reach 8% failed genetics. Here is the simulation that confirms this. | |
def sim1(healthy: Double, generation: Int = 1): Unit = if (generation < 100) { | |
val degenerates = 1 - healthy; println((degenerates * 100) + "% down" ) | |
sim1(healthy * 0.96 + degenerates * 0.5, generation + 1) | |
} //> sim1: (healthy: Double, generation: Int)Unit | |
sim1(1) //> 0.0% down | |
//| 4.0000000000000036% down |
View 1.generators.sc
object generator { | |
// Coursera Reactive programming | |
trait Generator[T] { self => | |
def generate: T | |
def map[K](f: T => K) = new Generator[K] { | |
// {val sample = generate ; println("map creates a generator [" + sample.getClass().getSimpleName + "]") } | |
def generate: K = f(self.generate) | |
} |
View Scala+gcc.sc
File deletion does not have immediate effect at least process image file, at least when | |
process was killed ungracefully prematurely. I have to retry the delete in my app. | |
Also, EVEN IF FILE DELETED, IT IS REPORTED EXISTING and complire cannot reporduce the | |
file. I have to retry the compilation also. | |
object prog_gen extends App { | |
import scala.sys.process._, scala.concurrent._, ExecutionContext.Implicits.global, Paths.get | |
implicit def toPath(filename: String) = get(filename) |
View 1.sequence_generator.py
# There were multiple goals: to implement AI for my game, to inject bugs ino VHDL and prove that sexual demorphims | |
# where boys have much higher mutation rate ' Сперматозоидов у мужчины за всю его жизнь вырабатывается гораздо больше, чем яйцеклеток у женщины. Это значит, что предшественники мужских половых клеток делятся гораздо интенсивнее и, следовательно, у них больше риск возникновения мутаций.' | |
#, is advantageous. | |
# Inspired by http://eli.thegreenplace.net/2010/01/28/generating-random-sentences-from-a-context-free-grammar | |
from collections import defaultdict | |
import random | |
def weighted_choice(weights): | |
rnd = random.random() * sum(weights) |
NewerOlder