2012-04-03 9 views
1

Ich versuche ein Ruby-Programm zu erstellen, wo drei Zahlen eingegeben werden und ihre Summe genommen wird, aber wenn irgendwelche Zahlen gleich sind, zählen sie nicht auf die Summe. Beispiel (4,5,4) = 5 Mein Problem ist mit meinen Ausdrücken. Wenn ich die gleiche Nummer gebe, bekomme ich mehrere Ausgaben für verschiedene Kombinationen. Beispiel eingeben 5,5,5 = 15,5,0Variable und Ausdrücke in Ruby

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

Dies ist, wie ich tun würde: 1 # Sortieren Sie die * Array * 2 # Iterate durch das Feld, und für jedes Element, das nur eine (erscheint sie in Läufe werden jetzt -of-the-self-number) fügt es zu einem neuen Array hinzu. # 3 Summiere den Inhalt des neuen Arrays. (# 1 + # 2 kann mit 'Enumerable # group_by' vereinfacht werden, gefolgt von' Enumerable.select' und # 3 mit 'Enumerable # reduce'.) –

Antwort

2

es mit zwei schönen Selbst Einzeiler

array = [a,b,c] 

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

-Der erste Zeile erstellt ein Array mit Parametern erklärend zu lösen.
-Die zweite Zeile nur die Elemente, deren Anzahl gleich 1 ist (entfernen Sie diejenigen, die mehr als einmal angezeigt werden), und speichern Sie diese auf dem Array.
-Die dritte Zeile summiert alle verbleibenden Elemente.

Voilà, der Rubin Weg :)

+3

Die dritte Zeile kann' array.inject (0 ,: +) '. Dies hat zwei Vorteile IMO: 1) Sie können sagen, es ist nur hinzufügen, und nichts anderes tun, viel schneller 2) es hat ein süßes Emoticon. –

+0

Punkt genommen, speziell für das zweite Argument: D – Castilho

Verwandte Themen