2 ms·
Here's Conway's Game of Life by Arthur Whitney (creator of K): life:{3=a-x*4=a:2{+(0+':x)+1_x,0}/x} I'm guessing a numpy implementation would be between one
by smabie 6y ago
Here's Conway's Game of Life by Arthur Whitney (creator of K):
life:{3=a-x*4=a:2{+(0+':x)+1_x,0}/x}
I'm guessing a numpy implementation would be between one and two orders of magnitude more verbose, even if you're just comparing the number of operations.
- worc3131 6y agoIt doesn't quite seem fair to compare numpy to one of the most famous K code golf's ever created, but here is my attempt, 140 characters compared to Arthur's 30, so 5 times longer. Not worry about padding the edges would cut it to 100. I don't think the gap is as wide as you think it is. def life(M): MP = np.pad(M,[(1,1),(1,1)]) N = sum(np.roll(MP,(i,j),(0,1)) for i in [1,0,-1] for j in [1,0,-1]) return (3==N-MP*(4==N))[1:-1,1:-1] Speedtest (presumably memory bound): 100 x 100 matrix, numpy 0.2ms, K 0.2ms 200 x 200 matrix, numpy 0.5ms, K 0.8ms 500 x 500 matrix, numpy 5.2ms, K 8.0ms 1000x1000 matrix, numpy 20.0ms, K 36.0ms 5000x5000 matrix, numpy 0.5s , K 1.2s Interestingly the K code is designed to return a boolean matrix, but operates much more slowly for me on a boolean matrix compared to an integer matrix, with the result that: q)\t klife M Takes 1.2 seconds whilst q)\t klife klife M Takes 24 seconds. So whilst the idea seems to be that klife is used with scan/over to run a number of iterations, it's actually a bad idea to run it more than once.