2012-04-03 13 views
1

3つの数字が入力され、その合計が取られているルビプログラムを作成しようとしていますが、数字が同じであれば合計には数えません。 例(4,5,4)= 5 私の問題は私の表現です。私が同じ番号を入力すると、私は様々な組み合わせのために複数の出力を得る。例では、5,5,5と入力します= 15,5,0 -The最初の行は、あなたのパラメータを持つ配列を作成します。二人の美しい自明ワンライナールビの変数と式

array = [a,b,c] 

array = array.keep_if {|item| array.count(item) == 1 } 
array.inject(0){|sum,item| sum + item} 

でそれを解決

if a != b or c then 
    puts a+b+c 
elsif b != a or c then 
    puts a+b+c 
elsif c != a or b then 
    puts a+b+c 
end 

if a == b then 
    puts c 
elsif a == c then 
    puts b 
elsif b == c then 
    puts a 
end 

if a == b and c then 
    puts 0 
elsif b == a and c then 
    puts 0 
elsif c == a and b then 
    puts 0 
end 
+0

これは私がどうなるかである:配列を通り、一つだけ表示される各要素の1#ソート*配列* 2#の反復(彼らは今の実行になります同じ番号の)新しい配列に追加します。 #3新しい配列の内容を合計します。 (#1 +#2は 'Enumerable#group_by'、' Enumerable.select'、 'Enumerable#reduce'で簡単に行えます) –

答えて

2


- 2行目は、数が1に等しいアイテムのみを保持します(複数回表示されるアイテムを削除します)。
- 3行目は、残りの要素を合計します。

ほら、ルビーの道:)

+3

3行目は' array.inject 、:+) '。これには2つのメリットがあります:1)あなただけが追加するだけで何か他のことはしないと言うことができます。2)かわいい顔文字があります。 –

+0

ポイント、とりわけ2番目の引数:D – Castilho