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:
Estoy teniendo problemas para comparar las posiciones de los 1 (binario)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)
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