Anonymous user
Spiral matrix: Difference between revisions
Reformatted second D version
(Simplified D code) |
(Reformatted second D version) |
||
Line 440:
[13, 22, 21, 20, 7]
[12, 11, 10, 9, 8]</pre>
Using a generator for any rectangular array
<lang d>import std.stdio
int w, h;
▲struct Spiral { // spiral 2d index generator
▲ immutable int w, h ;
int opApply(int delegate(ref int, ref int, ref int) dg) {
int
int[] subLen = [w, h-1]
void
auto t = -dy;
dx = t;
xy = 1 - xy;
}
void forward(int d = 1) {
x += d * dx;
y += d * dy;
idx += d;
}
Bye:
while (true) {
if (subLen[xy] == 0)
foreach
break Bye;
else
forward();
forward(-1);
turn();
forward();
}
▲ return 0 ;
return 0;
}
}
auto spiralMatrix(int w, int h) {
auto m = new int[][](h, w)
foreach (
m[y][x] =
return m
}
void main() {
foreach (r; spiralMatrix(9, 4))
writefln("%2s", r)
}</lang>
Output:
<pre>[ 0, 1, 2, 3, 4, 5, 6, 7, 8]
[21, 22, 23, 24, 25, 26, 27, 28, 9]
[20, 35, 34, 33, 32, 31, 30, 29, 10]
[19, 18, 17, 16, 15, 14, 13, 12, 11]</pre>
=={{header|E}}==
|