blob: dffdc354a03d17c9bca8a3430aad248134553f98 (
plain) (
tree)
|
|
/* The Computer Language Shootout
http://shootout.alioth.debian.org/
contributed by Isaac Gouy
*/
// This test is in pending because it fails on windows only,
// but partest's output and the fact that this test outputs in
// binary makes it a challenge to debug remotely. However,
// it's easy to guess that it has to do with the BufferedOutputStream
// and some kind of windows-specific damage that requires an extra
// flush, or different line-ending characters, or any of the various
// write-once-know-quirks-everywhere aspects of java i/o.
//
// [partest] testing: [...]\files\shootout\mandelbrot.scala-2.scala [FAILED]
// [partest] P4
// [partest] 200 200
// [partest]
// ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
// ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
// [etc]
import java.io.BufferedOutputStream
object mandelbrot {
def main(args: Array[String]) = {
val side = Integer.parseInt(args(0))
val limitSquared = 4.0
val max = 50
var bits = 0
var bitnum = 0
val w = new BufferedOutputStream(System.out)
Console.println("P4\n" + side + " " + side)
var y = 0
while (y < side){
var x = 0
while (x < side){
val cr = 2.0 * x / side - 1.5
val ci = 2.0 * y / side - 1.0
var zr = 0.0; var zi = 0.0
var tr = 0.0; var ti = 0.0
var j = max
do {
zi = 2.0 * zr * zi + ci
zr = tr - ti + cr
ti = zi*zi
tr = zr*zr
j = j - 1
} while (!(tr + ti > limitSquared) && j > 0)
bits = bits << 1
if (!(tr + ti > limitSquared)) bits = bits + 1
bitnum = bitnum + 1
if (x == side - 1){
bits = bits << (8 - bitnum)
bitnum = 8
}
if (bitnum == 8){
w.write(bits.toByte)
bits = 0
bitnum = 0
}
x = x + 1
}
y = y + 1
}
w.close
}
}
|