liste = File.readlines("schrauben.txt").map{|l| l.split(" ")}.map{|l| [l[0],l[1].to_i]} liste.sort!{|a,b| # a und b stehen für die Arrays # sortiergeschwindigkeit ist O(nlog(n)) if a[1]==b[1] # wenn die Zahlen gleich sind, dann werden die Buchstaben verglichen. PC kennt Reihenfolge der Buchstaben a[0]<=>b[0] # liefert auch wieder -1 wenn a>b, 0 wenn a=b, 1 wenn ab[1] # vergleicht die Zahlen, sortiert sie end } a=0 # a & g stehen für die Indizes der Unterarrays g=1 schrauben = 0 muttern = 0 last_size=liste[a][1] puts #leicht hübschere Ausgabe while a!=liste.size if liste[a][1]==last_size # solange die grösse der Muttern/Schrauben gleich sind... while liste[a]==liste[g] # solange die Unterarrays gleich sind... g+=1 # ...wächst g end differenz= g-a # die Buchstaben, die für die Indizes der Unterarrays stehen, werden verglichen if liste[a][0]=="s" schrauben = differenz elsif liste[a][0]=="m" muttern = differenz end a=g # a wird aktualisiert else if muttern == 0 or schrauben == 0 # damit kein Auswurf entsteht wenn es keine Paare gibt nil elsif muttern > schrauben puts "#{last_size}mm = #{schrauben} Paare" elsif muttern < schrauben puts "#{last_size}mm = #{muttern} Paare" elsif puts "#{last_size}mm = #{muttern} Paare" end last_size=liste[a][1] # last_size wird aktualisiert, auf eine neue Grösse eingstellt schrauben = 0 # bevor die nächsten Unterarrays verglichen werden, sollen diese wieder auf 0 stehen muttern = 0 end end puts # leicht hübschere Ausgabe # gesamt Aufwand ist O(nlog(n))