I converted the solution examples to functions, wrote a test to measure each 100 times with a diamond of size 1001. These are release build times. timon's crashed so I took it out. Maybe I made a mistake copying ... have to go back and look.

D:\diamond\diamond\diamond\Release>diamond 1>nul
brad: time: 78128[ms]
printDiamond1: time: 1166[ms]
printDiamond2: time: 1659[ms]
printDiamond3: time: 631[ms]
jay1: time: 466[ms]
sergei: time: 11944[ms]
jay2: time: 414[ms]


These are the the measurement functions


void measure( void function(in int a) func, int times, int diamondsz, string name ){
  StopWatch sw;
  sw.start();
  for (int i=0; i<times; i++){
    func(diamondsz);
  }
  sw.stop;
  stderr.writeln(name, ": time: ", sw.peek().msecs, "[ms]");
}

void measureu( void function(in uint a) func, int times, uint diamondsz, string name ){
  StopWatch sw;
  sw.start();
  for (int i=0; i<times; i++){
    func(diamondsz);
  }
  sw.stop;
  stderr.writeln(name, ": time: ", sw.peek().msecs, "[ms]");
}

int main(string[] argv)
{
        int times = 100;
        int dsz = 1001;
        uint dszu = 1001;
        measure (&brad,times,dsz,"brad");
        //measure (&timon,times,dsz,"timon");
        measureu (&printDiamond1,times,dszu,"printDiamond1");
        measure (&printDiamond2,times,dsz,"printDiamond2");
        measure (&printDiamond3,times,dsz,"printDiamond3");
        measure (&jay1,times,dsz,"jay1");
        measure (&sergei,times,dsz,"sergei");
        measure (&jay2,times,dsz,"jay2");

        return 0;

}

All the functions are like this:
void brad(in int length){
  import std.algorithm, std.range, std.stdio, std.conv;

  auto rng =
    chain(iota(length), iota(length, -1, -1))
    .map!((a => " ".repeat(length-a)),
    (a => "#".repeat(a*2+1)))
    .map!(a => chain(a[0].joiner, a[1].joiner, "\n"))
    .joiner;

  writeln(rng);
}

void timon(in int s){
  import std.stdio, std.range, std.algorithm, std.math;

  writef("%(%s\n%)", (i=>i.map!(a=>i.map!(b=>"* "[a+b>s/2])))
    (iota(-s/2,s/2+1).map!abs));
}

Reply via email to