回答編集履歴
2
修正
test
CHANGED
@@ -45,12 +45,12 @@
|
|
45
45
|
PosValue max = new PosValue();
|
46
46
|
for(int x=0; x<SIZE; x++) {
|
47
47
|
for(int y=0; y<SIZE; y++) {
|
48
|
-
|
48
|
+
largest(x, y, max);
|
49
49
|
}
|
50
50
|
}
|
51
51
|
System.out.println(max);
|
52
52
|
}
|
53
|
-
static
|
53
|
+
static void largest(int x, int y, PosValue max) {
|
54
54
|
for(Dir dir : Dir.values()) {
|
55
55
|
int value = 1;
|
56
56
|
for(int i=0, xx=x, yy=y; i<4; i++, xx+=dir.dx, yy+=dir.dy) {
|
@@ -67,7 +67,6 @@
|
|
67
67
|
max.value = value;
|
68
68
|
}
|
69
69
|
}
|
70
|
-
return max;
|
71
70
|
}
|
72
71
|
}
|
73
72
|
```
|
1
c へ移植
test
CHANGED
@@ -71,6 +71,85 @@
|
|
71
71
|
}
|
72
72
|
}
|
73
73
|
```
|
74
|
+
c へ移植
|
75
|
+
```c
|
76
|
+
#include <stdio.h>
|
77
|
+
#include <string.h>
|
78
|
+
|
79
|
+
#define SIZE 20
|
80
|
+
|
81
|
+
int GRID[SIZE][SIZE] = { //ファイル読み込みを省略, "04" 等と 0 をアタマにつけると 8 進数になってしまうので頭0は削除
|
82
|
+
{ 8, 2,22,97,38,15, 0,40, 0,75, 4, 5, 7,78,52,12,50,77,91, 8},
|
83
|
+
{49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48, 4,56,62, 0},
|
84
|
+
{81,49,31,73,55,79,14,29,93,71,40,67,53,88,30, 3,49,13,36,65},
|
85
|
+
{52,70,95,23, 4,60,11,42,69,24,68,56, 1,32,56,71,37, 2,36,91},
|
86
|
+
{22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80},
|
87
|
+
{24,47,32,60,99, 3,45, 2,44,75,33,53,78,36,84,20,35,17,12,50},
|
88
|
+
{32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70},
|
89
|
+
{67,26,20,68, 2,62,12,20,95,63,94,39,63, 8,40,91,66,49,94,21},
|
90
|
+
{24,55,58, 5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72},
|
91
|
+
{21,36,23, 9,75, 0,76,44,20,45,35,14, 0,61,33,97,34,31,33,95},
|
92
|
+
{78,17,53,28,22,75,31,67,15,94, 3,80, 4,62,16,14, 9,53,56,92},
|
93
|
+
{16,39, 5,42,96,35,31,47,55,58,88,24, 0,17,54,24,36,29,85,57},
|
94
|
+
{86,56, 0,48,35,71,89, 7, 5,44,44,37,44,60,21,58,51,54,17,58},
|
95
|
+
{19,80,81,68, 5,94,47,69,28,73,92,13,86,52,17,77, 4,89,55,40},
|
96
|
+
{ 4,52, 8,83,97,35,99,16, 7,97,57,32,16,26,26,79,33,27,98,66},
|
97
|
+
{88,36,68,87,57,62,20,72, 3,46,33,67,46,55,12,32,63,93,53,69},
|
98
|
+
{ 4,42,16,73,38,25,39,11,24,94,72,18, 8,46,29,32,40,62,76,36},
|
99
|
+
{20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74, 4,36,16},
|
100
|
+
{20,73,35,29,78,31,90, 1,74,31,49,71,48,86,81,16,23,57, 5,54},
|
101
|
+
{ 1,70,54,71,83,51,54,69,16,92,33,48,61,43,52, 1,89,19,67,48},
|
102
|
+
};
|
103
|
+
|
104
|
+
typedef struct {
|
105
|
+
char *name;
|
106
|
+
int dx, dy;
|
107
|
+
} Dir;
|
108
|
+
Dir dirs[] = {
|
109
|
+
{"RIGHTUP",1,-1},
|
110
|
+
{"RIGHT",1,0},
|
111
|
+
{"RIGHTDOWN",1,1},
|
112
|
+
{"DOWN",0,1}
|
113
|
+
};
|
114
|
+
|
115
|
+
typedef struct {
|
116
|
+
int x, y;
|
117
|
+
Dir *dir;
|
118
|
+
int value;
|
119
|
+
} PosValue;
|
120
|
+
|
121
|
+
void largest(int x, int y, PosValue *max) {
|
122
|
+
for(int j=0; j<sizeof(dirs)/sizeof(Dir); j++) {
|
123
|
+
Dir *dir = &dirs[j];
|
124
|
+
int value = 1;
|
125
|
+
for(int i=0, xx=x, yy=y; i<4; i++, xx+=dir->dx, yy+=dir->dy) {
|
126
|
+
if(xx < 0 || xx >= SIZE || yy < 0 || yy >= SIZE) { //GRID 範囲外
|
127
|
+
value = 0;
|
128
|
+
break;
|
129
|
+
}
|
130
|
+
value *= GRID[yy][xx];
|
131
|
+
}
|
132
|
+
if(max->value < value) {
|
133
|
+
max->x = x;
|
134
|
+
max->y = y;
|
135
|
+
max->dir = dir;
|
136
|
+
max->value = value;
|
137
|
+
}
|
138
|
+
}
|
139
|
+
}
|
140
|
+
|
141
|
+
int main(int argc, char *argv[]) {
|
142
|
+
PosValue max;
|
143
|
+
memset(&max, 0, sizeof(PosValue));
|
144
|
+
for(int x=0; x<SIZE; x++) {
|
145
|
+
for(int y=0; y<SIZE; y++) {
|
146
|
+
largest(x, y, &max);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
printf("x=%d, y=%d, dir=%s, value=%d\n", max.x, max.y, max.dir->name, max.value);
|
150
|
+
return 0;
|
151
|
+
}
|
152
|
+
```
|
74
153
|
実行結果
|
75
154
|
```plain
|
76
155
|
x=3, y=15, dir=RIGHTUP, value=70600674
|