回答編集履歴

3

Update

2021/12/25 06:57

投稿

melian
melian

スコア19825

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  ranking.map(&:flatten).transpose.each_with_index{|(m, w), idx|
28
28
 
29
- idx == 0 ? printf("%4s%4s\n", m, w) : printf("%4d%4d%4d\n", idx, m, w)
29
+ idx == 0 ? printf("%5s%3s\n", m, w) : printf("%2d%4d%4d\n", idx, m, w)
30
30
 
31
31
  }
32
32
 

2

Update

2021/12/25 06:57

投稿

melian
melian

スコア19825

test CHANGED
@@ -24,12 +24,22 @@
24
24
 
25
25
 
26
26
 
27
- p ranking
27
+ ranking.map(&:flatten).transpose.each_with_index{|(m, w), idx|
28
+
29
+ idx == 0 ? printf("%4s%4s\n", m, w) : printf("%4d%4d%4d\n", idx, m, w)
30
+
31
+ }
28
32
 
29
33
 
30
34
 
31
35
  #
32
36
 
37
+ 男 女
38
+
39
+ 1 39 61
40
+
41
+ 2 30 45
42
+
33
- [["男", [39, 30, 58]], ["女", [61, 45, 34]]]
43
+ 3 58 34
34
44
 
35
45
  ```

1

Update

2021/12/25 06:46

投稿

melian
melian

スコア19825

test CHANGED
@@ -1,4 +1,4 @@
1
- 入力する CSV ファイルにヘッダ行(「氏名,氏名(カタカナ),性別,...」)が付いているのであれば、`CSV::table` を使っても良いかもしれません。以下では質問文にある CSV データを `data.csv` としています。
1
+ 入力する CSV ファイルにヘッダ行(「氏名,氏名(カタカナ),性別,...」)が付いているのであれば、`CSV::table` を使っても良いかもしれません。以下では質問文にある CSV データを `data.csv` としています(全て異なる年齢ですので、データの内容を水増ししています)
2
2
 
3
3
 
4
4
 
@@ -14,13 +14,13 @@
14
14
 
15
15
  table.group_by{|g| g["性別"]}
16
16
 
17
- .map{|gender, rows| [
17
+ .map{|gender, rows| [gender,
18
18
 
19
- gender,
19
+ CSV::Table.new(rows, headers: table.headers)
20
20
 
21
- CSV::Table.new(rows, headers: table.headers)["年齢"]
21
+ .group_by{|g| g["年齢"]}.map{|age, r| [age, r.count]}
22
22
 
23
- .sort.reverse[...3]]}
23
+ .sort_by{|e| e[1]}.reverse[...3].collect(&:first)]}
24
24
 
25
25
 
26
26
 
@@ -30,6 +30,6 @@
30
30
 
31
31
  #
32
32
 
33
- [["男", [94, 91, 60]], ["女", [92, 87, 61]]]
33
+ [["男", [39, 30, 58]], ["女", [61, 45, 34]]]
34
34
 
35
35
  ```