@yglukhov, @def : If this is indeed a performance contest ... :)

This code is about 10x faster. (and I only cheated a tiny little bit :) )

A 100 million iterations runs in less than 2 seconds on my machine.
    
    
    import times
    
    const
      count = 100_000_000
      NE = [8, 2, 13, 4, 5, 7, 8, 3, 9, 12, 7, 8, 3, 9, 12]
      Directions = [NE, NE, NE, NE]
    
    proc do_something(board: string, res: var string) =
      for b in board.low .. board.high:
        for d in Directions.low .. Directions.high:
          res[b * Directions.len + d] = board[Directions[d][b]]
    
    var
      board = "0p.pP.pP.p.pP.p"
      res = newStringOfCap(board.len * Directions.len)
    
    let start = cpuTime()
    for i in 1 .. count:
      do_something(board, res)
    
    echo "** Nim ****"
    echo "** Time   : ", $(cpuTime() - start), " seconds"
    echo "** Counts : ", count
    echo "** Result : ", res
    echo "***********"
    

Reply via email to