Acabo de iniciar con retos diarios de desarrollo en ruby, les dejo la imagen del algoritmo que empece a resolver
el objetivo es conseguir la brecha mas larga en una cadena binaria
ejemplo:
N : 1041
binario : 10000010001
brecha mas larga : 5
brecha mas corta : 3
por ahora ya he adelantado algunos pasos basicos
- Random del numero N (entero)
- Convertir a Binario
- Almacenar en un array
- Iterar parte del array para conseguir los (1) y (0)
Código:
n = rand(7.. 1000)
def convertir (no)
guardoposicion =0
@pos = Array.new
@vectbin = Array.new
puts 'el numero aleatorio es ' + no.to_s
bin = no.to_s(2)
puts 'el numero Binario es ' + bin
tam = bin.length()
puts 'Cantida de numeros binarios: ' + tam.to_s
@vectbin = bin
@vectbin.each_char.with_index do |valor, posicion|
puts "En la posicion [ #{posicion} ] tenemos: #{valor} "
if valor == '1'
guardoposicion = posicion
#puts 'posicion : ' + guardoposicion.to_s
@pos = posicion
@pos.to_s.each_char do |elemento|
print "Nuevo vector [ ", elemento, " ]"
puts
puts
end
end
end
end
convertir(n)
Estoy teniendo problemas para comparar las posiciones de los 1 (binario)
tenia pensado conseguir la brecha mas larga restando las posiciones de los (1)
ejempleo:
N : 1041
binario : 10000010001
vector posiciones de (binario 1) --> [0][6][10]
Restar (0 - 6) - 1 = 5
Restar (6 - 10) - 1 = 3