回答編集履歴
1
コードを修正しました。
answer
CHANGED
@@ -10,42 +10,39 @@
|
|
10
10
|
var MTX = []; // 結果格用
|
11
11
|
var small; // ブロック内の最小値
|
12
12
|
var size; // 処理対象のブロックの大きさ
|
13
|
-
var
|
13
|
+
var row, col; // 行、列
|
14
14
|
var ptr; // ブロックの起点を指す(配列の添字)
|
15
15
|
var maxlen; // 表示する値の最大長さ
|
16
16
|
var strval; // 配列から取り出した値(文字列)
|
17
17
|
var vallen; // 配列から取り出した値の長さ
|
18
|
-
var str; //結果表示
|
18
|
+
var str; // 結果表示
|
19
19
|
|
20
|
-
|
21
20
|
// 結果格納用の配列準備
|
22
21
|
for(i=0; i<N+1; i++) MTX[i] = [];
|
23
22
|
|
24
23
|
|
25
|
-
// 渦巻き
|
24
|
+
// 渦巻き状の値が入った配列を作成
|
26
25
|
small = S - 2 * N - 1; // 最初のブロックの最小値を求める
|
27
26
|
size = N + 1; // 最初のブロックサイズ
|
28
27
|
ptr = 0;
|
29
28
|
while (size > 0){
|
30
|
-
for(i=0;i<size;i++){
|
31
|
-
|
29
|
+
for(col=0; col<size; col++){ // 上の行を埋める
|
32
|
-
for(j=0;j<size;j++){
|
33
|
-
|
30
|
+
MTX[ptr][ptr+col] = small + 2 * (size - 1) + col;
|
34
|
-
|
31
|
+
}
|
32
|
+
for(row=1; row<size; row++){
|
33
|
+
if (row < size-1){ // 中の行を埋める
|
34
|
+
MTX[ptr+row][ptr] = MTX[ptr+row-1][ptr] -1;
|
35
|
+
MTX[ptr+row][ptr+size-1] = MTX[ptr+row-1][ptr+size-1] + 1;
|
35
36
|
}
|
36
|
-
else
|
37
|
+
else{ // 下の行を埋める
|
37
|
-
for(
|
38
|
+
for(col=0; col<size; col++){
|
38
|
-
MTX[ptr+
|
39
|
+
MTX[ptr+row][ptr+col] = small + size - col - 1;
|
39
40
|
}
|
40
41
|
}
|
41
|
-
else{ // 間の行を埋める
|
42
|
-
MTX[ptr+i][ptr] = MTX[ptr+i-1][ptr] - 1;
|
43
|
-
MTX[ptr+i][ptr+size-1] = MTX[ptr+i-1][ptr+size-1] + 1;
|
44
|
-
}
|
45
42
|
}
|
46
43
|
|
47
44
|
// 次のブロックの最小値を計算
|
48
|
-
small+=Math.pow(size, 2) - (size <= 2 ? 0 : Math.pow(size
|
45
|
+
small+=Math.pow(size, 2) - (size <= 2 ? 0 : Math.pow(size-2, 2));
|
49
46
|
|
50
47
|
size -= 2;
|
51
48
|
ptr++;
|
@@ -54,9 +51,9 @@
|
|
54
51
|
// 表示用
|
55
52
|
maxlen = (N * N + S).toString().length;
|
56
53
|
str = "";
|
57
|
-
for(
|
54
|
+
for(row=0; row<N; row++){
|
58
|
-
for(
|
55
|
+
for(col=1; col<N+1; col++){
|
59
|
-
strval = MTX[
|
56
|
+
strval = MTX[row][col].toString();
|
60
57
|
while (maxlen > strval.length) strval = "0" + strval;
|
61
58
|
str = str + strval + ",";
|
62
59
|
}
|