回答編集履歴

1

追記

2017/03/05 01:34

投稿

katoy
katoy

スコア22324

test CHANGED
@@ -3,3 +3,97 @@
3
3
  * 審査員が偶数人数の場合、中央値はどうしますか?
4
4
 
5
5
  * そして、それ以降の順位判定方法はどうしますか?
6
+
7
+
8
+
9
+ 審査員は奇数人数ということなので、それに従って書いてみました。
10
+
11
+
12
+
13
+ a.rb
14
+
15
+ ```ruby
16
+
17
+ def calc_factores(score)
18
+
19
+ fail "bad data size: score.size" if score.size.even?
20
+
21
+ center_index = score.size / 2
22
+
23
+ center_value = score[center_index]
24
+
25
+ center_value_count = score.count(center_value)
26
+
27
+ [
28
+
29
+ center_value,
30
+
31
+ center_value_count * (-1),
32
+
33
+ score[center_index..-1].sum,
34
+
35
+ score[0..center_index].sum * (-1)
36
+
37
+ ]
38
+
39
+ end
40
+
41
+
42
+
43
+ scores = {
44
+
45
+ 'Ken': [1, 1, 1, 4, 7],
46
+
47
+ 'Shinji': [1, 2, 3, 3, 4],
48
+
49
+ 'Taro': [2, 2, 3, 4, 4],
50
+
51
+ 'Kazuya': [2, 3, 5, 5, 6],
52
+
53
+ 'Shota': [3, 4, 5, 5, 7],
54
+
55
+ 'Fumiya': [1, 6, 6, 6, 7],
56
+
57
+ 'Ryu': [2, 5, 6, 7, 7]
58
+
59
+ }
60
+
61
+ factores = scores.map { |name, score| [name.to_sym, calc_factores(score)] }
62
+
63
+ result = factores.sort_by {|entory| entory[1] }
64
+
65
+ result.each {|entory| p entory[0].to_s }
66
+
67
+ ```
68
+
69
+
70
+
71
+ 実行結果
72
+
73
+ ```
74
+
75
+ $ ruby a.rb
76
+
77
+ "Ken"
78
+
79
+ "Shinji"
80
+
81
+ "Taro"
82
+
83
+ "Kazuya"
84
+
85
+ "Shota"
86
+
87
+ "Fumiya"
88
+
89
+ "Ryu"
90
+
91
+ ````
92
+
93
+
94
+
95
+ 順位判定に使う数値を配列で得るようにします。
96
+
97
+ その数値の配列でソートして、結果を得ています。
98
+
99
+