teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

Update

2021/12/25 06:57

投稿

melian
melian

スコア21285

answer CHANGED
@@ -12,7 +12,7 @@
12
12
  .sort_by{|e| e[1]}.reverse[...3].collect(&:first)]}
13
13
 
14
14
  ranking.map(&:flatten).transpose.each_with_index{|(m, w), idx|
15
- idx == 0 ? printf("%4s%4s\n", m, w) : printf("%4d%4d%4d\n", idx, m, w)
15
+ idx == 0 ? printf("%5s%3s\n", m, w) : printf("%2d%4d%4d\n", idx, m, w)
16
16
  }
17
17
 
18
18
  #

2

Update

2021/12/25 06:57

投稿

melian
melian

スコア21285

answer CHANGED
@@ -11,8 +11,13 @@
11
11
  .group_by{|g| g["年齢"]}.map{|age, r| [age, r.count]}
12
12
  .sort_by{|e| e[1]}.reverse[...3].collect(&:first)]}
13
13
 
14
- p ranking
14
+ ranking.map(&:flatten).transpose.each_with_index{|(m, w), idx|
15
+ idx == 0 ? printf("%4s%4s\n", m, w) : printf("%4d%4d%4d\n", idx, m, w)
16
+ }
15
17
 
16
18
  #
19
+ 男 女
20
+ 1 39 61
21
+ 2 30 45
17
- [["男", [39, 30, 58]], ["女", [61, 45, 34]]]
22
+ 3 58 34
18
23
  ```

1

Update

2021/12/25 06:46

投稿

melian
melian

スコア21285

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