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

回答編集履歴

1

コードを提示

2019/06/25 02:52

投稿

mather
mather

スコア6765

answer CHANGED
@@ -8,4 +8,66 @@
8
8
  例:全員第一希望のおやつが来た => 3 x 4 = 12
9
9
 
10
10
  というふうに配点をして、4!(=24)通りの組み合わせについて点数を付けてみればいいです。
11
- 最高点で同点のものがあればランダムで一つ組み合わせを決定すれば良いと思います。
11
+ 最高点で同点のものがあればランダムで一つ組み合わせを決定すれば良いと思います。
12
+
13
+ ----
14
+ 2019-06-25 追記
15
+
16
+ > 少年Aと少年Bがケーキを第1希望とし、少年C、少年Dがケーキを第2希望とした場合、3+3+2+2で10になると思いますが、
17
+
18
+ いや、問題設定に従うと全員違うおやつになるはずですよね?
19
+ もし少年Aが「ケーキ」だったときには3点としてカウントし、他の少年も同様に配られたおやつで採点するだけです。
20
+ もし `["プリン", "ケーキ", "いちご", "メロン"]` という配り方をした場合、この組み合わせの評価は何点か?を計算しているだけですよ。
21
+
22
+ 以下、採点までを行うRubyのコードです。
23
+
24
+ ```ruby
25
+ # ["ケーキ","プリン","いちご","メロン"]を並べ替えたすべての組み合わせ(24個)
26
+ PERMIRATIONS = ["ケーキ","プリン","いちご","メロン"].permutation(4).to_a
27
+
28
+ # 4人がそれぞれ欲しい順
29
+ wants = Array.new(4) { PERMIRATIONS.sample }
30
+ #[
31
+ # ["いちご", "メロン", "ケーキ", "プリン"],
32
+ # ["いちご", "ケーキ", "メロン", "プリン"],
33
+ # ["プリン", "ケーキ", "いちご", "メロン"],
34
+ # ["いちご", "メロン", "ケーキ", "プリン"]
35
+ #]
36
+
37
+ # すべての組み合わせについて採点
38
+ result = {}
39
+ PERMIRATIONS.each { |a|
40
+ total = 0
41
+ a.each_with_index { |b, i|
42
+ total += 3 - wants[i].index(b)
43
+ }
44
+ result[a] = total
45
+ }
46
+
47
+ # 結果
48
+ result
49
+ #{["ケーキ", "プリン", "いちご", "メロン"]=>4,
50
+ # ["ケーキ", "プリン", "メロン", "いちご"]=>4,
51
+ # ["ケーキ", "いちご", "プリン", "メロン"]=>9,
52
+ # ["ケーキ", "いちご", "メロン", "プリン"]=>4,
53
+ # ["ケーキ", "メロン", "プリン", "いちご"]=>8,
54
+ # ["ケーキ", "メロン", "いちご", "プリン"]=>3,
55
+ # ["プリン", "ケーキ", "いちご", "メロン"]=>5,
56
+ # ["プリン", "ケーキ", "メロン", "いちご"]=>5,
57
+ # ["プリン", "いちご", "ケーキ", "メロン"]=>7,
58
+ # ["プリン", "いちご", "メロン", "ケーキ"]=>4,
59
+ # ["プリン", "メロン", "ケーキ", "いちご"]=>6,
60
+ # ["プリン", "メロン", "いちご", "ケーキ"]=>3,
61
+ # ["いちご", "ケーキ", "プリン", "メロン"]=>10,
62
+ # ["いちご", "ケーキ", "メロン", "プリン"]=>5,
63
+ # ["いちご", "プリン", "ケーキ", "メロン"]=>7,
64
+ # ["いちご", "プリン", "メロン", "ケーキ"]=>4,
65
+ # ["いちご", "メロン", "ケーキ", "プリン"]=>6,
66
+ # ["いちご", "メロン", "プリン", "ケーキ"]=>8,
67
+ # ["メロン", "ケーキ", "プリン", "いちご"]=>10,
68
+ # ["メロン", "ケーキ", "いちご", "プリン"]=>5,
69
+ # ["メロン", "プリン", "ケーキ", "いちご"]=>7,
70
+ # ["メロン", "プリン", "いちご", "ケーキ"]=>4,
71
+ # ["メロン", "いちご", "ケーキ", "プリン"]=>7,
72
+ # ["メロン", "いちご", "プリン", "ケーキ"]=>9}
73
+ ```