回答編集履歴
15
修正
answer
CHANGED
@@ -266,4 +266,7 @@
|
|
266
266
|
福井県27人
|
267
267
|
鳥取県24人
|
268
268
|
島根県21人
|
269
|
-
```
|
269
|
+
```
|
270
|
+
###補足について
|
271
|
+
もしかしたらこちらの記事が参考になるかもしれません。
|
272
|
+
[Ruby文字エンコードに悩まされ、直接指定やnkfによる推測などを試した](http://qiita.com/rojiuratech/items/9d40cb294eb08f2204ac)
|
14
補足
answer
CHANGED
@@ -53,6 +53,7 @@
|
|
53
53
|
2017/01/06追記
|
54
54
|
2017/01/07追記
|
55
55
|
2017/01/07追記
|
56
|
+
2017/01/09追記
|
56
57
|
```Ruby
|
57
58
|
#encoding : utf-8
|
58
59
|
f = File.read("ファイル名").encode("UTF-8").split("\n").map!{|e| e.split("\,")}
|
@@ -212,4 +213,57 @@
|
|
212
213
|
puts f.map{|y| [y[3], y[0], y[2]]}.sort.select{|g| g[2] == "男"}.map{|word| word[1] + word[0] + word[2]}[0]
|
213
214
|
puts "---------------------------------------"
|
214
215
|
f.map!{|k| k[4]}.uniq.map{|e|[f.count(e), e]}.sort!.reverse!.map{|word| puts word[1] + word[0].to_s + "人"}
|
216
|
+
```
|
217
|
+
```
|
218
|
+
実行結果例
|
219
|
+
中沢 由宇2016/1/10女
|
220
|
+
上山 勤2016/1/10男
|
221
|
+
---------------------------------------
|
222
|
+
東京都480人
|
223
|
+
大阪府369人
|
224
|
+
神奈川県318人
|
225
|
+
愛知県295人
|
226
|
+
埼玉県281人
|
227
|
+
北海道239人
|
228
|
+
千葉県227人
|
229
|
+
福岡県208人
|
230
|
+
兵庫県184人
|
231
|
+
静岡県146人
|
232
|
+
広島県124人
|
233
|
+
長野県104人
|
234
|
+
京都府104人
|
235
|
+
宮城県98人
|
236
|
+
岐阜県95人
|
237
|
+
茨城県94人
|
238
|
+
群馬県90人
|
239
|
+
栃木県84人
|
240
|
+
新潟県83人
|
241
|
+
福島県80人
|
242
|
+
鹿児島県74人
|
243
|
+
三重県71人
|
244
|
+
岩手県70人
|
245
|
+
熊本県69人
|
246
|
+
岡山県69人
|
247
|
+
石川県62人
|
248
|
+
愛媛県61人
|
249
|
+
長崎県56人
|
250
|
+
滋賀県56人
|
251
|
+
山口県53人
|
252
|
+
沖縄県52人
|
253
|
+
大分県52人
|
254
|
+
奈良県50人
|
255
|
+
和歌山県48人
|
256
|
+
青森県47人
|
257
|
+
秋田県47人
|
258
|
+
高知県39人
|
259
|
+
佐賀県39人
|
260
|
+
香川県38人
|
261
|
+
山形県38人
|
262
|
+
山梨県36人
|
263
|
+
徳島県33人
|
264
|
+
宮崎県33人
|
265
|
+
富山県32人
|
266
|
+
福井県27人
|
267
|
+
鳥取県24人
|
268
|
+
島根県21人
|
215
269
|
```
|
13
修正
answer
CHANGED
@@ -104,7 +104,7 @@
|
|
104
104
|
[2]については、生年月日順に氏名を並び替えたのち、男女で分けて男の先頭と女の先頭を
|
105
105
|
表示することにしました。
|
106
106
|
=end
|
107
|
-
f = File.read("ファイル名").encode("UTF-8").split("\n").map{|e| e.split("\,")}
|
107
|
+
f = File.read("ファイル名.csv").encode("UTF-8").split("\n").map{|e| e.split("\,")}
|
108
108
|
=begin
|
109
109
|
#1:データの入ったメモ帳を読み込みます。手を加えやすいようにUTF-8にエンコードします。
|
110
110
|
このファイルは1行で一つのまとまりになっているのでいったん改行で分割<split("\n")>
|
@@ -114,8 +114,8 @@
|
|
114
114
|
ken = [] #2:県名を入れる配列を作ります。
|
115
115
|
years = [] #3:氏名、生年月日、性別だけを1つにまとめた情報を入れる配列を作ります。
|
116
116
|
f.each do |element|
|
117
|
-
ken << element[
|
117
|
+
ken << element[4]
|
118
|
-
years << [element[
|
118
|
+
years << [element[3], element[0], element[2]]
|
119
119
|
end
|
120
120
|
=begin
|
121
121
|
#4:f(最初に読み込んだファイル)の中身(例:[佐藤 太郎,サトウ タロウ,男,,887-4155,宮城県,xx市,xx,3-50-5,xxマンション307,1982/06/09,O ]を
|
@@ -147,10 +147,9 @@
|
|
147
147
|
rank = num + 1 #12:順位に使う数字です。numは0から始まるので1を足さないと順位が1位からになりません。
|
148
148
|
puts rank.to_s + "\s" + ken_count[num][1] + ken_count[num][0].to_s + "人"
|
149
149
|
#13:rank.to_sでrankを文字にします。そうしないと文字と+できません。初めにファイルをUTF-8にエンコード
|
150
|
-
# しておかないとこの辺でエラーが出ると思います。画面に表示したときに見やすいように、文字にした
|
150
|
+
# しておかないとこの辺でエラーが出ると思います。画面に表示したときに見やすいように、文字にしたrankの後ろに
|
151
|
-
#
|
151
|
+
# スペースを入れます。その次にken_count(配列)のnum番目にある要素(配列)の1番目の要素=県名と
|
152
|
-
# 2番目(配列の要素は0から数える)の要素=県名とken_count(配列)のnum番目にある要素(配列)
|
153
|
-
# の
|
152
|
+
# ken_count(配列)のnum番目にある要素(配列)の0番目の要素=人数を文字にしたものを足しています。
|
154
153
|
num += 1 #14:numに1を足します。そうしないと2位以降が表示されなくなります。
|
155
154
|
if num == 5 || num > ken_count.length - 1 then
|
156
155
|
#15:loopを抜ける処理を書いています。このloopはnum==5(numは0から始まっているので順位では6位)
|
@@ -180,7 +179,7 @@
|
|
180
179
|
puts "男性:該当者なし"
|
181
180
|
#24:空の場合は分かりやすいように"男性:該当者なし"と表示することにします。
|
182
181
|
end
|
183
|
-
if woman[0] != nil then #25:
|
182
|
+
if woman[0] != nil then #25:manの中身が空かどうかで処理を分けます。
|
184
183
|
puts "女性:" + woman[0][1] + woman[0][0]
|
185
184
|
#26:空ではない場合は、男性か女性か分かりやすいように性別を表示することにして
|
186
185
|
# womanの先頭の要素(配列)の2番目の要素(氏名)とwomanの先頭の要素(配列)
|
@@ -190,6 +189,17 @@
|
|
190
189
|
#27:空の場合は分かりやすいように"女性:該当者なし"と表示することにします。
|
191
190
|
end
|
192
191
|
```
|
192
|
+
```
|
193
|
+
実行結果例
|
194
|
+
1 東京都480人
|
195
|
+
2 大阪府369人
|
196
|
+
3 神奈川県318人
|
197
|
+
4 愛知県295人
|
198
|
+
5 埼玉県281人
|
199
|
+
-------------------------------------------
|
200
|
+
男性:上山 勤2016/1/10
|
201
|
+
女性:中沢 由宇2016/1/10
|
202
|
+
```
|
193
203
|
ランキング機能を無くしてみました。
|
194
204
|
katoy様が紹介してくださった「なんちゃって個人情報」を使ってデータを作ってみました。
|
195
205
|
データの内容は「名前、ふりがな、性別、誕生日、都道府県、電話番号」です。
|
12
補足
answer
CHANGED
@@ -52,6 +52,7 @@
|
|
52
52
|
同じ人数になった場合はどれか一つしか表示されません。
|
53
53
|
2017/01/06追記
|
54
54
|
2017/01/07追記
|
55
|
+
2017/01/07追記
|
55
56
|
```Ruby
|
56
57
|
#encoding : utf-8
|
57
58
|
f = File.read("ファイル名").encode("UTF-8").split("\n").map!{|e| e.split("\,")}
|
@@ -188,4 +189,17 @@
|
|
188
189
|
puts "女性:該当者なし"
|
189
190
|
#27:空の場合は分かりやすいように"女性:該当者なし"と表示することにします。
|
190
191
|
end
|
192
|
+
```
|
193
|
+
ランキング機能を無くしてみました。
|
194
|
+
katoy様が紹介してくださった「なんちゃって個人情報」を使ってデータを作ってみました。
|
195
|
+
データの内容は「名前、ふりがな、性別、誕生日、都道府県、電話番号」です。
|
196
|
+
正確に動いているかどうかは分かりません。
|
197
|
+
```Ruby
|
198
|
+
#encoding : utf-8
|
199
|
+
f = File.read("データ2.txt").encode("UTF-8").split("\n").map{|e| e.split("\,")}
|
200
|
+
f.shift
|
201
|
+
puts f.map{|y| [y[3], y[0], y[2]]}.sort.select{|g| g[2] == "女"}.map{|word| word[1] + word[0] + word[2]}[0]
|
202
|
+
puts f.map{|y| [y[3], y[0], y[2]]}.sort.select{|g| g[2] == "男"}.map{|word| word[1] + word[0] + word[2]}[0]
|
203
|
+
puts "---------------------------------------"
|
204
|
+
f.map!{|k| k[4]}.uniq.map{|e|[f.count(e), e]}.sort!.reverse!.map{|word| puts word[1] + word[0].to_s + "人"}
|
191
205
|
```
|
11
修正
answer
CHANGED
@@ -146,9 +146,10 @@
|
|
146
146
|
rank = num + 1 #12:順位に使う数字です。numは0から始まるので1を足さないと順位が1位からになりません。
|
147
147
|
puts rank.to_s + "\s" + ken_count[num][1] + ken_count[num][0].to_s + "人"
|
148
148
|
#13:rank.to_sでrankを文字にします。そうしないと文字と+できません。初めにファイルをUTF-8にエンコード
|
149
|
-
# しておかないとこの辺でエラーが出ると思います。画面に表示したときに見やすいように、文字にした
|
149
|
+
# しておかないとこの辺でエラーが出ると思います。画面に表示したときに見やすいように、文字にした
|
150
|
-
# スペースを入れます。その次にken_count(配列)のnum番目にある要素(配列)の
|
150
|
+
# rankの後ろにスペースを入れます。その次にken_count(配列)のnum番目にある要素(配列)の
|
151
|
+
# 2番目(配列の要素は0から数える)の要素=県名とken_count(配列)のnum番目にある要素(配列)
|
151
|
-
#
|
152
|
+
# の1番目の要素=人数を文字にしたものを足しています。
|
152
153
|
num += 1 #14:numに1を足します。そうしないと2位以降が表示されなくなります。
|
153
154
|
if num == 5 || num > ken_count.length - 1 then
|
154
155
|
#15:loopを抜ける処理を書いています。このloopはnum==5(numは0から始まっているので順位では6位)
|
10
補足
answer
CHANGED
@@ -147,8 +147,8 @@
|
|
147
147
|
puts rank.to_s + "\s" + ken_count[num][1] + ken_count[num][0].to_s + "人"
|
148
148
|
#13:rank.to_sでrankを文字にします。そうしないと文字と+できません。初めにファイルをUTF-8にエンコード
|
149
149
|
# しておかないとこの辺でエラーが出ると思います。画面に表示したときに見やすいように、文字にしたrankの後ろに
|
150
|
-
# スペースを入れます。その次にken_count(配列)のnum番目にある要素(配列)の
|
150
|
+
# スペースを入れます。その次にken_count(配列)のnum番目にある要素(配列)の2番目の要素=県名と
|
151
|
-
# ken_count(配列)のnum番目にある要素(配列)の
|
151
|
+
# ken_count(配列)のnum番目にある要素(配列)の1番目の要素=人数を文字にしたものを足しています。
|
152
152
|
num += 1 #14:numに1を足します。そうしないと2位以降が表示されなくなります。
|
153
153
|
if num == 5 || num > ken_count.length - 1 then
|
154
154
|
#15:loopを抜ける処理を書いています。このloopはnum==5(numは0から始まっているので順位では6位)
|
9
修正
answer
CHANGED
@@ -103,7 +103,7 @@
|
|
103
103
|
[2]については、生年月日順に氏名を並び替えたのち、男女で分けて男の先頭と女の先頭を
|
104
104
|
表示することにしました。
|
105
105
|
=end
|
106
|
-
f = File.read("ファイル名").encode("UTF-8").split("\n").map
|
106
|
+
f = File.read("ファイル名").encode("UTF-8").split("\n").map{|e| e.split("\,")}
|
107
107
|
=begin
|
108
108
|
#1:データの入ったメモ帳を読み込みます。手を加えやすいようにUTF-8にエンコードします。
|
109
109
|
このファイルは1行で一つのまとまりになっているのでいったん改行で分割<split("\n")>
|
8
修正
answer
CHANGED
@@ -178,7 +178,7 @@
|
|
178
178
|
puts "男性:該当者なし"
|
179
179
|
#24:空の場合は分かりやすいように"男性:該当者なし"と表示することにします。
|
180
180
|
end
|
181
|
-
if woman[0] != nil then #25:
|
181
|
+
if woman[0] != nil then #25:womanの中身が空かどうかで処理を分けます。
|
182
182
|
puts "女性:" + woman[0][1] + woman[0][0]
|
183
183
|
#26:空ではない場合は、男性か女性か分かりやすいように性別を表示することにして
|
184
184
|
# womanの先頭の要素(配列)の2番目の要素(氏名)とwomanの先頭の要素(配列)
|
7
修正
answer
CHANGED
@@ -98,49 +98,93 @@
|
|
98
98
|
|
99
99
|
```Ruby
|
100
100
|
#encoding : utf-8
|
101
|
+
=begin
|
102
|
+
[1]について、私は単純にそれぞれの県の人数を数えて人数の多い順に並び替えることにしました。
|
103
|
+
[2]については、生年月日順に氏名を並び替えたのち、男女で分けて男の先頭と女の先頭を
|
104
|
+
表示することにしました。
|
105
|
+
=end
|
101
106
|
f = File.read("ファイル名").encode("UTF-8").split("\n").map!{|e| e.split("\,")}
|
107
|
+
=begin
|
108
|
+
#1:データの入ったメモ帳を読み込みます。手を加えやすいようにUTF-8にエンコードします。
|
109
|
+
このファイルは1行で一つのまとまりになっているのでいったん改行で分割<split("\n")>
|
110
|
+
します。このままだと1行がすべてくっついているので、くっついている1行を対象にカンマで分割
|
111
|
+
<split("\,")>します。
|
102
|
-
|
112
|
+
=end
|
103
|
-
|
113
|
+
ken = [] #2:県名を入れる配列を作ります。
|
114
|
+
years = [] #3:氏名、生年月日、性別だけを1つにまとめた情報を入れる配列を作ります。
|
104
115
|
f.each do |element|
|
105
116
|
ken << element[5]
|
106
117
|
years << [element[10], element[0], element[2]]
|
107
118
|
end
|
119
|
+
=begin
|
120
|
+
#4:f(最初に読み込んだファイル)の中身(例:[佐藤 太郎,サトウ タロウ,男,,887-4155,宮城県,xx市,xx,3-50-5,xxマンション307,1982/06/09,O ]を
|
121
|
+
順番にelementに入れて処理を行います。
|
122
|
+
処理の内容は2つあって、1つは県名をとってkenに入れるもの、もう1つは生年月日、氏名、性別をとってyearsに入れるものです。
|
123
|
+
=end
|
108
124
|
|
109
|
-
ken_list = ken.uniq
|
125
|
+
ken_list = ken.uniq #5:#4によって今、kenには県名が入っています。このkenから重複した県名を削除した新しい配列ken_listを作ります。
|
110
|
-
ken_count = []
|
126
|
+
ken_count = [] #6:数えた県名の数(=その県名が含まれたデータの数)を入れておく配列を作ります。
|
111
|
-
ken_list.each do |e|
|
127
|
+
ken_list.each do |e| #7:ken_listの中身(例:[沖縄県, 宮城県, 広島県])を順番にeに入れます。
|
112
128
|
ken_count << [ken.count(e), e]
|
113
129
|
end
|
130
|
+
=begin
|
131
|
+
#8:重複ありで県名が入っているkenを対象にe(個別の県名)の個数を調べます。その個数とe(個別の県名)を
|
132
|
+
ken_countに入れます。
|
133
|
+
=end
|
114
134
|
ken_count.sort!.reverse!
|
135
|
+
=begin
|
136
|
+
#9:ken_countをsortします。sortをすると数字の小さい順に並べ替えられます。
|
137
|
+
並び替えられた結果をreverseすることで数字を大きい順に並び替えることができます。
|
138
|
+
=end
|
115
139
|
years.sort!
|
116
|
-
|
140
|
+
=begin
|
141
|
+
#10:ついでに氏名、生年月日、性別が入っているyearsもsortをします。
|
142
|
+
こちらは生年月日の古い順(=数字が小さい順)なのでsortだけで大丈夫です。
|
143
|
+
=end
|
144
|
+
num = 0 #11:県名と人数を数字の大きい順に5つ表示します。表示にはloopを使います。
|
117
145
|
loop{
|
118
|
-
rank = num + 1
|
146
|
+
rank = num + 1 #12:順位に使う数字です。numは0から始まるので1を足さないと順位が1位からになりません。
|
119
147
|
puts rank.to_s + "\s" + ken_count[num][1] + ken_count[num][0].to_s + "人"
|
148
|
+
#13:rank.to_sでrankを文字にします。そうしないと文字と+できません。初めにファイルをUTF-8にエンコード
|
149
|
+
# しておかないとこの辺でエラーが出ると思います。画面に表示したときに見やすいように、文字にしたrankの後ろに
|
150
|
+
# スペースを入れます。その次にken_count(配列)のnum番目にある要素(配列)の1番目の要素=県名と
|
151
|
+
# ken_count(配列)のnum番目にある要素(配列)の0番目の要素=人数を文字にしたものを足しています。
|
120
|
-
num += 1
|
152
|
+
num += 1 #14:numに1を足します。そうしないと2位以降が表示されなくなります。
|
121
153
|
if num == 5 || num > ken_count.length - 1 then
|
154
|
+
#15:loopを抜ける処理を書いています。このloopはnum==5(numは0から始まっているので順位では6位)
|
155
|
+
# になるか、numがken_countの要素の数を超える(県名が5よりも少なかった場合用)と終了します。
|
122
156
|
break
|
123
157
|
end
|
124
158
|
}
|
125
159
|
|
126
|
-
man = []
|
160
|
+
man = [] #16:男性を入れておく配列を作ります。
|
127
|
-
woman = []
|
161
|
+
woman = [] #17:女性を入れておく配列を作ります。
|
128
162
|
years.each do |date|
|
163
|
+
#18:氏名、生年月日、性別が入ったyearsの要素(例[[氏名1, xxxx/xx/xx, 男], [氏名2, xxxx/xx/xx, 女]]を
|
164
|
+
# 順番にdateに入れます。
|
129
|
-
if date[2] == "男" then
|
165
|
+
if date[2] == "男" then #19:dateの3番目(配列の要素は0から数える)の要素が男なら
|
130
|
-
man << date
|
166
|
+
man << date #20:manにdateを入れます
|
131
|
-
elsif date[2] == "女" then
|
167
|
+
elsif date[2] == "女" then #21:dateの3番目(配列の要素は0から数える)の要素が女なら
|
132
|
-
woman << date
|
168
|
+
woman << date #20:womanにdateを入れます
|
133
169
|
end
|
134
170
|
end
|
135
|
-
puts "-------------------------------------------"
|
171
|
+
puts "-------------------------------------------" #21:少しでも見やすくなるように[1]で出した県名と人数ランキングの下に線を引きます。
|
136
|
-
if man[0] != nil then
|
172
|
+
if man[0] != nil then #22:manの中身が空かどうかで処理を分けます。
|
137
173
|
puts "男性:" + man[0][1] + man[0][0]
|
174
|
+
#23:空ではない場合は、男性か女性か分かりやすいように性別を表示することにして
|
175
|
+
# manの先頭の要素(配列)の2番目の要素(氏名)とmanの先頭の要素(配列)
|
176
|
+
# の1番目の要素(生年月日)を表示します。
|
138
177
|
else
|
139
178
|
puts "男性:該当者なし"
|
179
|
+
#24:空の場合は分かりやすいように"男性:該当者なし"と表示することにします。
|
140
180
|
end
|
141
|
-
if woman[0] != nil then
|
181
|
+
if woman[0] != nil then #25:manの中身が空かどうかで処理を分けます。
|
142
182
|
puts "女性:" + woman[0][1] + woman[0][0]
|
183
|
+
#26:空ではない場合は、男性か女性か分かりやすいように性別を表示することにして
|
184
|
+
# womanの先頭の要素(配列)の2番目の要素(氏名)とwomanの先頭の要素(配列)
|
185
|
+
# の1番目の要素(生年月日)を表示します。
|
143
186
|
else
|
144
187
|
puts "女性:該当者なし"
|
188
|
+
#27:空の場合は分かりやすいように"女性:該当者なし"と表示することにします。
|
145
189
|
end
|
146
|
-
```
|
190
|
+
```
|
6
修正
answer
CHANGED
@@ -51,6 +51,7 @@
|
|
51
51
|
もしかしなくても意図した動きをしない可能性があります。
|
52
52
|
同じ人数になった場合はどれか一つしか表示されません。
|
53
53
|
2017/01/06追記
|
54
|
+
2017/01/07追記
|
54
55
|
```Ruby
|
55
56
|
#encoding : utf-8
|
56
57
|
f = File.read("ファイル名").encode("UTF-8").split("\n").map!{|e| e.split("\,")}
|
@@ -93,4 +94,53 @@
|
|
93
94
|
puts man[0]
|
94
95
|
puts woman[0]
|
95
96
|
```
|
96
|
-
同じ人数でも表示されるようになりました。
|
97
|
+
同じ人数でも表示されるようになりました。
|
98
|
+
|
99
|
+
```Ruby
|
100
|
+
#encoding : utf-8
|
101
|
+
f = File.read("ファイル名").encode("UTF-8").split("\n").map!{|e| e.split("\,")}
|
102
|
+
ken = []
|
103
|
+
years = []
|
104
|
+
f.each do |element|
|
105
|
+
ken << element[5]
|
106
|
+
years << [element[10], element[0], element[2]]
|
107
|
+
end
|
108
|
+
|
109
|
+
ken_list = ken.uniq
|
110
|
+
ken_count = []
|
111
|
+
ken_list.each do |e|
|
112
|
+
ken_count << [ken.count(e), e]
|
113
|
+
end
|
114
|
+
ken_count.sort!.reverse!
|
115
|
+
years.sort!
|
116
|
+
num = 0
|
117
|
+
loop{
|
118
|
+
rank = num + 1
|
119
|
+
puts rank.to_s + "\s" + ken_count[num][1] + ken_count[num][0].to_s + "人"
|
120
|
+
num += 1
|
121
|
+
if num == 5 || num > ken_count.length - 1 then
|
122
|
+
break
|
123
|
+
end
|
124
|
+
}
|
125
|
+
|
126
|
+
man = []
|
127
|
+
woman = []
|
128
|
+
years.each do |date|
|
129
|
+
if date[2] == "男" then
|
130
|
+
man << date
|
131
|
+
elsif date[2] == "女" then
|
132
|
+
woman << date
|
133
|
+
end
|
134
|
+
end
|
135
|
+
puts "-------------------------------------------"
|
136
|
+
if man[0] != nil then
|
137
|
+
puts "男性:" + man[0][1] + man[0][0]
|
138
|
+
else
|
139
|
+
puts "男性:該当者なし"
|
140
|
+
end
|
141
|
+
if woman[0] != nil then
|
142
|
+
puts "女性:" + woman[0][1] + woman[0][0]
|
143
|
+
else
|
144
|
+
puts "女性:該当者なし"
|
145
|
+
end
|
146
|
+
```
|
5
補足
answer
CHANGED
@@ -49,4 +49,48 @@
|
|
49
49
|
全く詳しくないですが考えてみました。
|
50
50
|
私はデータを持っていないので質問の最初に書いてある例を参考にして作りました。
|
51
51
|
もしかしなくても意図した動きをしない可能性があります。
|
52
|
-
同じ人数になった場合はどれか一つしか表示されません。
|
52
|
+
同じ人数になった場合はどれか一つしか表示されません。
|
53
|
+
2017/01/06追記
|
54
|
+
```Ruby
|
55
|
+
#encoding : utf-8
|
56
|
+
f = File.read("ファイル名").encode("UTF-8").split("\n").map!{|e| e.split("\,")}
|
57
|
+
ken = []
|
58
|
+
years = []
|
59
|
+
f.each do |element|
|
60
|
+
ken << element[5]
|
61
|
+
years << element[10]
|
62
|
+
end
|
63
|
+
|
64
|
+
ken_list = ken.uniq
|
65
|
+
ken_count = []
|
66
|
+
ken_list.each do |e|
|
67
|
+
ken_count << [ken.count(e), e]
|
68
|
+
end
|
69
|
+
ken_count.sort!.reverse!
|
70
|
+
|
71
|
+
num = 0
|
72
|
+
loop{
|
73
|
+
rank = num + 1
|
74
|
+
puts rank.to_s + ken_count[num][1] + ken_count[num][0].to_s + "人"
|
75
|
+
num += 1
|
76
|
+
if num == 5 || num > ken_count.length - 1 then
|
77
|
+
break
|
78
|
+
end
|
79
|
+
}
|
80
|
+
years_sort = years.sort
|
81
|
+
man = []
|
82
|
+
woman = []
|
83
|
+
years_sort.each do |y|
|
84
|
+
name = f[years.index(y)][0]
|
85
|
+
year = f[years.index(y)][10]
|
86
|
+
sex = f[years.index(y)][2]
|
87
|
+
if sex == "男" then
|
88
|
+
man << [name + year + sex]
|
89
|
+
elsif sex == "女" then
|
90
|
+
woman << [name + year + sex]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
puts man[0]
|
94
|
+
puts woman[0]
|
95
|
+
```
|
96
|
+
同じ人数でも表示されるようになりました。
|
4
修正
answer
CHANGED
@@ -49,4 +49,4 @@
|
|
49
49
|
全く詳しくないですが考えてみました。
|
50
50
|
私はデータを持っていないので質問の最初に書いてある例を参考にして作りました。
|
51
51
|
もしかしなくても意図した動きをしない可能性があります。
|
52
|
-
同じ人数になった場合
|
52
|
+
同じ人数になった場合はどれか一つしか表示されません。
|
3
補足
answer
CHANGED
@@ -48,4 +48,5 @@
|
|
48
48
|
```
|
49
49
|
全く詳しくないですが考えてみました。
|
50
50
|
私はデータを持っていないので質問の最初に書いてある例を参考にして作りました。
|
51
|
-
もしかしなくても意図した動きをしない可能性があります。
|
51
|
+
もしかしなくても意図した動きをしない可能性があります。
|
52
|
+
同じ人数になった場合などではどれか一つしか表示されないという欠陥があります。
|
2
修正
answer
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
end
|
18
18
|
|
19
19
|
ken_sort
|
20
|
-
ken_sort_new = ken_sort.sort
|
20
|
+
ken_sort_new = ken_sort.sort.reverse
|
21
21
|
|
22
22
|
rank = 0
|
23
23
|
loop{
|
1
修正
answer
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
num = ken_count[ken_sort.index(ee)][1]
|
27
27
|
puts "#{rank + 1}\s#{name + num.to_s}\s人"
|
28
28
|
rank += 1
|
29
|
-
if rank ==
|
29
|
+
if rank == 5 || rank > ken_list.length - 1 then
|
30
30
|
break
|
31
31
|
end
|
32
32
|
}
|