問題
1 から 9 までの数字の中から4つの数字を選択する。
4つの数字は同じ数値が重複する事もある。
4つの数字をあらゆる並べ方を試し、和の最大値(最大スコア)を求めます。
例えば、 1 の 2, 9, 3, 8 の 4 枚を使う場合、
以下の 12 通りの和の 175 が最大となる。
4つの数値の並べ方は 4! = 24 通り存在しますが、足し算は順序に依存しないため、12 通りのみ考慮すればよいことに注意してください。
たとえば、9, 2, 3, 8 の順で並べた場合のスコアは 92 + 38 = 130 となります。
例
・92 + 38 = 130
・92 + 83 = 175
・93 + 28 = 121
・93 + 82 = 175
・98 + 23 = 121
・98 + 32 = 130
・39 + 28 = 67
・38 + 29 = 67
・82 + 39 = 121
・89 + 23 = 112
・89 + 32 = 121
・83 + 29 = 112
条件
1 ≦ a, b, c, d ≦ 9
例
入力例1
2 9 3 8
出力例1
175
入力例2
7 8 7 7
出力例2
164
回答
input_line = gets.split(" ").sort { |a,b| a.to_i <=> b.to_i }.reverse
puts "#{input_line[0]}#{input_line[2]}".to_i + "#{input_line[1]}#{input_line[3]}".to_i
回答(refactoring)
input_line = gets.split(" ").sort { |a,b| a.to_i <=> b.to_i }.reverse
puts [input_line[0], input_line[2]].join.to_i + [input_line[1], input_line[3]].join.to_i
学び
sortメソッド / sort_byメソッド
a = [2,3,1,4,5,1]
p a.sort
#=> [1, 1, 2, 3, 4, 5]
s = ["aaaaa","b","cc"]
p s.sort_by {|array| array.size}
#=> ["b", "cc", "aaaaa"]
joinメソッド
配列の要素を連結して文字列を返すjoinメソッド
array = ["1", "5", "4"]
p array.join
# => "154"
p array.join("-")
# => "1-5-4"
おわりに
最終的な出力の際に
puts [input_line[0], input_line[2]].join.to_i + [input_line[1], input_line[3]].join.to_i
としているが、[input_line[0], input_line[2]]
この部分は、もう少しスマートに書ける気がする。
配列の中から指定したindexの要素を取り出し新たな配列を作り出すメソッドがあれば、もっとスマートに書けるようになるのではないか、見つからなかったけど,,,