domingo, 9 de mayo de 2010

Numero de repeticiones de cada elemento de un vector en ruby

Les dejo una clase en ruby que cuenta las veces que se repite cada elemento en un vector, si alguien se idea otra manera de hacerlo mas eficiente, se lo agradezco que lo comparta. Gracias

class Repetidos

def llenar
v = []
loop do
puts "Ingrese numero "
n = gets.to_i
return v if n == 0
v << n
end
end

def imprimir(a,b)
for i in 0..a.size-1
puts "#{a[i]} -- #{b[i]}"
end
end

def repetidos(vector)
v1 = []
v2 = []
v1[0] = vector[0]
v2[0] = 0
for i in 0..vector.length-1
s = 0
for j in 0...v1.length
if vector[i] == v1[j]
v2[j] = v2[j] + 1
s = 1
end
end
if s == 0
v1 << vector[i]
v2 << 1
end
end
return v1, v2
end

end

x = Repetidos.new
vec = x.llenar
v1, v2 = x.repetidos(vec)
x.imprimir(v1, v2)

Bajar archivo fuente

Ahora veremos la version de Daniel y Ruby; la cual me parece muy buena, quedaria mucho mejor si utilizara clases, metodos y parametros, pero igual, esta buena.

#llenar un vector
def self.llenar
@v=[]
i=0
while i <=4
puts "Ingrese numero:"
num = gets.chomp.to_i
@v[i]=num
i=i+1
end
end

def self.imprimir
@v.sort!
c=0
i=0
while c <= @v.size
con=0
while @v[c] == @v[i]
con=con+1
i=i+1
end
puts "#{@v[c]} - #{con}"
c=i
return if i == @v.size
end
end


llenar
imprimir

Bajar archivo fuente

Otra mas, les dejo la version de Erley.

v=[5,2,5,3,5,2,9,1]
v.sort!
c1=0
while c1<=7
a=0
for c2 in 0..7
if v[c2]==v[c1]
a+=1
end
end
puts "el #{v[c1]} esta #{a} veces"
c1+=a
end

Archivo fuente

No hay comentarios: