質問編集履歴

5

規約に則り削除

2017/03/05 12:04

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -117,161 +117,3 @@
117
117
  #
118
118
 
119
119
  #
120
-
121
-
122
-
123
- 例題の追記をします。
124
-
125
-
126
-
127
- とある学校で受験が行われるそうです。がんばってください。
128
-
129
- その学校には1つの学年に文系と理系のクラスがあるそうですが、文系か理系かによって合格の条件が変わります。
130
-
131
-
132
-
133
- ・1科目は100点満点です
134
-
135
- ・共通する条件はどちらのクラスも合計点が350点以上なければなりません。
136
-
137
- ー350点の内、理系受験者は理科と数学の合計点が150点以上なければなりません。
138
-
139
- ー350点の内、文系受験者は国語と社会の合計点が150点以上なければなりません。
140
-
141
- ・一行目に受験した人数が入力されます
142
-
143
- ・2行目以降はどちらを受験したかの後に、各教科の点数が半角スペース区切りで入力されます。科目の順番は国語・数学・英語・理科・社会の順番です。
144
-
145
- ・whichがscなら理系受験者、soなら文系受験者です。
146
-
147
-
148
-
149
- 人数
150
-
151
- which 国 数 英 理 社
152
-
153
- .
154
-
155
- .
156
-
157
- .
158
-
159
- 人数分の入力
160
-
161
-
162
-
163
- ```Ruby
164
-
165
- n = gets.chomp.to_i #生徒の人数
166
-
167
- score = [] #生徒の成績を入れるための配列
168
-
169
- #生徒の人数分配列にスペース区切りで配列の最後に追加していく
170
-
171
- n.times do
172
-
173
- score << gets.chomp.split()
174
-
175
- end
176
-
177
-
178
-
179
- #scoreを1つずつ展開する。展開直後は多重配列になっているのでさらに展開して普通の状態の配列にする。
180
-
181
- #次に配列の中身の値で条件分岐する。最初のアルファベットでどちらを受験したか判断する。
182
-
183
- #判断した後は数列にして点数を求めたいので文字列を削除。
184
-
185
- #そして数列に
186
-
187
- #数列にしたnum2の値を合計してnumberに代入
188
-
189
- #numberの合計値と受験したクラスの条件によって合否の判定
190
-
191
-
192
-
193
- #以上の処理を文系と理系分作成
194
-
195
-
196
-
197
- score.each_slice(1) do |num|
198
-
199
- num.each do |num2|
200
-
201
- if num2[0] == "so"
202
-
203
- num2.delete("so")
204
-
205
- num2 = num2.map(&:to_i)
206
-
207
- number = num2.inject{ |sum, n| sum + n }
208
-
209
-
210
-
211
- if number >= 350 && num2[0] + num2[4] >= 150
212
-
213
- puts "文系クラス合格"
214
-
215
- else
216
-
217
- puts "残念でした"
218
-
219
- end
220
-
221
- end
222
-
223
- if num2[0] == "sc"
224
-
225
- num2.delete("sc")
226
-
227
- num2 = num2.flatten.map(&:to_i)
228
-
229
- number = num2.flatten.inject{ |sum, n| sum + n }
230
-
231
-
232
-
233
- if number >= 350 && num2[1] + num2[3] >= 150
234
-
235
- puts "理系クラス合格"
236
-
237
- else
238
-
239
- puts "残念でした"
240
-
241
- end
242
-
243
- end
244
-
245
- end
246
-
247
- end
248
-
249
-
250
-
251
- ```
252
-
253
-
254
-
255
- といった具合でしょうか。
256
-
257
- 私が一番改善したい箇所はnum2[0]やnum2[4]などと書いてあるところです。
258
-
259
- この場合ですと
260
-
261
- kokugo = num2[0]
262
-
263
- のようにやるしかないのでしょうか。
264
-
265
- ここの値が個数が多い問題で処理を書き直すときなどに理解が追いつかなくなってしまい、とても時間がかかってしまいます。
266
-
267
-
268
-
269
-
270
-
271
- もう一つは、理系と文系に分けて処理していますがこの部分を2in1や問題によっては3in1などでキレイに書けないものかと模索しています。
272
-
273
-
274
-
275
-
276
-
277
- よろしくお願いいたします。

4

参考問題の追記

2017/03/05 12:04

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -111,3 +111,167 @@
111
111
 
112
112
 
113
113
  よろしくお願いいたします。
114
+
115
+
116
+
117
+ #
118
+
119
+ #
120
+
121
+
122
+
123
+ 例題の追記をします。
124
+
125
+
126
+
127
+ とある学校で受験が行われるそうです。がんばってください。
128
+
129
+ その学校には1つの学年に文系と理系のクラスがあるそうですが、文系か理系かによって合格の条件が変わります。
130
+
131
+
132
+
133
+ ・1科目は100点満点です
134
+
135
+ ・共通する条件はどちらのクラスも合計点が350点以上なければなりません。
136
+
137
+ ー350点の内、理系受験者は理科と数学の合計点が150点以上なければなりません。
138
+
139
+ ー350点の内、文系受験者は国語と社会の合計点が150点以上なければなりません。
140
+
141
+ ・一行目に受験した人数が入力されます
142
+
143
+ ・2行目以降はどちらを受験したかの後に、各教科の点数が半角スペース区切りで入力されます。科目の順番は国語・数学・英語・理科・社会の順番です。
144
+
145
+ ・whichがscなら理系受験者、soなら文系受験者です。
146
+
147
+
148
+
149
+ 人数
150
+
151
+ which 国 数 英 理 社
152
+
153
+ .
154
+
155
+ .
156
+
157
+ .
158
+
159
+ 人数分の入力
160
+
161
+
162
+
163
+ ```Ruby
164
+
165
+ n = gets.chomp.to_i #生徒の人数
166
+
167
+ score = [] #生徒の成績を入れるための配列
168
+
169
+ #生徒の人数分配列にスペース区切りで配列の最後に追加していく
170
+
171
+ n.times do
172
+
173
+ score << gets.chomp.split()
174
+
175
+ end
176
+
177
+
178
+
179
+ #scoreを1つずつ展開する。展開直後は多重配列になっているのでさらに展開して普通の状態の配列にする。
180
+
181
+ #次に配列の中身の値で条件分岐する。最初のアルファベットでどちらを受験したか判断する。
182
+
183
+ #判断した後は数列にして点数を求めたいので文字列を削除。
184
+
185
+ #そして数列に
186
+
187
+ #数列にしたnum2の値を合計してnumberに代入
188
+
189
+ #numberの合計値と受験したクラスの条件によって合否の判定
190
+
191
+
192
+
193
+ #以上の処理を文系と理系分作成
194
+
195
+
196
+
197
+ score.each_slice(1) do |num|
198
+
199
+ num.each do |num2|
200
+
201
+ if num2[0] == "so"
202
+
203
+ num2.delete("so")
204
+
205
+ num2 = num2.map(&:to_i)
206
+
207
+ number = num2.inject{ |sum, n| sum + n }
208
+
209
+
210
+
211
+ if number >= 350 && num2[0] + num2[4] >= 150
212
+
213
+ puts "文系クラス合格"
214
+
215
+ else
216
+
217
+ puts "残念でした"
218
+
219
+ end
220
+
221
+ end
222
+
223
+ if num2[0] == "sc"
224
+
225
+ num2.delete("sc")
226
+
227
+ num2 = num2.flatten.map(&:to_i)
228
+
229
+ number = num2.flatten.inject{ |sum, n| sum + n }
230
+
231
+
232
+
233
+ if number >= 350 && num2[1] + num2[3] >= 150
234
+
235
+ puts "理系クラス合格"
236
+
237
+ else
238
+
239
+ puts "残念でした"
240
+
241
+ end
242
+
243
+ end
244
+
245
+ end
246
+
247
+ end
248
+
249
+
250
+
251
+ ```
252
+
253
+
254
+
255
+ といった具合でしょうか。
256
+
257
+ 私が一番改善したい箇所はnum2[0]やnum2[4]などと書いてあるところです。
258
+
259
+ この場合ですと
260
+
261
+ kokugo = num2[0]
262
+
263
+ のようにやるしかないのでしょうか。
264
+
265
+ ここの値が個数が多い問題で処理を書き直すときなどに理解が追いつかなくなってしまい、とても時間がかかってしまいます。
266
+
267
+
268
+
269
+
270
+
271
+ もう一つは、理系と文系に分けて処理していますがこの部分を2in1や問題によっては3in1などでキレイに書けないものかと模索しています。
272
+
273
+
274
+
275
+
276
+
277
+ よろしくお願いいたします。

3

誤解を生まないようなタイトルに編集

2017/03/04 18:05

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 競技プログラミングで記述量減らしたい
1
+ 競技プログラミングで可読性高めたい
test CHANGED
File without changes

2

2017/03/04 10:15

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -106,7 +106,7 @@
106
106
 
107
107
 
108
108
 
109
- 理解に努めますが、Ruby以外分からないのでその際は言葉で説明して頂ければ助かります。
109
+ 理解に努めますが、Ruby以外分からないのでその際は言葉で説明して頂けると助かります。
110
110
 
111
111
 
112
112
 

1

誤字の修正

2017/03/04 01:34

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  のように行っています。
48
48
 
49
- しかし、これが上記のifの結果を更に使用して、そしてその結果もまた使用する。といった事があります。
49
+ しかし、これが上記のifの結果を使用して、そしてその結果もまた使用する。といった事があります。
50
50
 
51
51
 
52
52
 
@@ -70,7 +70,7 @@
70
70
 
71
71
  ```
72
72
 
73
- や、これさらにnumをeachしたコードを書いています。
73
+ や、ものよってはeachを2重3重したコードを書いています。
74
74
 
75
75
  さらにまたその結果を・・・と合計で4回ほど行う時があり、辟易してしまいます。
76
76