回答編集履歴

2

修正

2022/09/21 20:51

投稿

jimbe
jimbe

スコア12648

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
- max = largest(x, y, max);
48
+ largest(x, y, max);
49
49
  }
50
50
  }
51
51
  System.out.println(max);
52
52
  }
53
- static PosValue largest(int x, int y, PosValue max) {
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 へ移植

2022/09/21 20:32

投稿

jimbe
jimbe

スコア12648

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