Estoy tratando de resolver un ejercicio, cuando hago un recorrido en cada cadena en un arreglo, por ejemplo a = [1,1,1,1,4,3,5,9], cuenta los numeros que estan duplicada por ejemplo el numero 1, la cantidad de duplicado del numero 1 es 4. eso se hace con for y un contador. ahora bien, lo que trato es que no me salga la cantidad de duplicado (cadena). solamente que salga el numero 1 . igualmente para otro ejemplo de arreglo b = [1,2,3,4,5], en este arreglo no hay duplicado saldria 0. otro ejemplo c = [7,2,4,5,4,6,4] en este caso hay 3 duplicado del numero cuatro, en lo cual deberia salir 4.
le paso el codigo si me puedes apoyar en que esta mal.
Código ruby:
Ver original
#encoding:UTF-8 =begin Una empresa de maquinas tragamonedas desea poder determinar cual es el premio asignado a un cliente. Para ello se le solicita desarrollar los siguientes subprogramas: a) Un subprograma que permita determinar cuantas veces apareció un digito en un número determinado. Se tiene como datos de entrada el número y el digito. Por ejemplo, si el numero es 1234 y el digito es 5, se obtendrá como resultado 0; si el numero es 12344 y el digito es 4, se obtendrá como resultado 2. b) Un subprograma que permita determinar cual es el digito que apareció 2 o mas veces en un número. Se tiene como dato de entrada un número. Por ejemplo, si el numero es 1234 se obtendrá como resultado 0 pues ningún numero aparece mas de 2 veces, si el numero es 77093 se obtendrá como resultado 7. (Considerar que no puede haber 2 o mas coincidencias de distintos números, es decir no se puede dar el caso 7766, en donde se repite 2 veces el 7 y 2 veces el 6) c) Un subprograma que permita determinar el premio a pagar. El premio se calcula de la siguiente manera: premio = numeroCoincidencias*10. En donde el número de coincidencias es el máximo número de veces que se repite un digito en el numero. Nota: Para la formación del numero se considera dígitos del 1 al 9, se excluye el 0, es decir no se puede dar el siguiente numero 1002, pues el 0 esta excluido. =end def obtenerNumeroCoincidencias(valor, cifra) valor_cadena = valor.to_s cifra_cadena = cifra.to_s coincidencia = 0 for a in 0...valor_cadena.size if valor_cadena[a] == cifra_cadena coincidencia = coincidencia + 1 end end return coincidencia end def obtenerNumeroMasRepite(valor) cadena = valor.to_s ultimo = [] contador = 0 for i in 0...cadena.size ultimo << cadena[i] end numero = ultimo.first for j in 0...cadena.size if cadena[j] == numero numero = cadena[j] else numero = 0 end end return numero end def obtenerPremio(valor) total_valor = obtenerNumeroMasRepite(valor) return total_valor.to_i * 10 end #--- zona del programa principal ---- #--- zona de test ---- def test_obtenerNumeroCoincidencias print validate(3, obtenerNumeroCoincidencias(6661,6)) print validate(0, obtenerNumeroCoincidencias(1234,5)) print validate(2, obtenerNumeroCoincidencias(7881,8)) print validate(1, obtenerNumeroCoincidencias(7861,8)) end def test_obtenerNumeroMasRepite print validate(2, obtenerNumeroMasRepite(122234)) print validate(7, obtenerNumeroMasRepite(76713)) print validate(0, obtenerNumeroMasRepite(123456)) print validate(9, obtenerNumeroMasRepite(999999)) end def test_obtenerPremio print validate(0, obtenerPremio(123456)) print validate(30, obtenerPremio(122324)) print validate(50, obtenerPremio(199999)) print validate(60, obtenerPremio(111111)) end def validate (expected, value) expected == value ? "." : "F" end def test puts "Test de prueba del programa" puts "---------------------------" test_obtenerNumeroCoincidencias test_obtenerNumeroMasRepite test_obtenerPremio puts " " end test