Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

617
Vistas
Ruby's times method and for loop does the same thing, but what are the respective processes?

I have a paradigm where the purpose is to calculate "the total accumulated from 'variable from' to 'variable to'". I got two methods, but I don't know exactly what steps they go through.

The first is the times method. I don't understand what (to - from +1) produces and why (i + from)? Also, this code throws syntax error, unexpected end, expecting end-of-input, I don't know where I am going wrong .

from = 10
to = 20
sum = 0
  (to - from +1).times to |i|
    sum = sum + (i + from)
  end
puts sum

Then there is the for loop. I can't understand what is the "total sum accumulated from 'variable from' to 'variable to'", what is the process of adding it?

from = 10
to = 20
sum = 0
for i in from..to
  sum = sum + i
end
puts sum

I'm bad at math, thank you all.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Using the IRB you can create an array that represents all the numbers from to to:

irb(main):043:0> from=10
=> 10
irb(main):044:0> to=20
=> 20
irb(main):047:0> a=(from..to).to_a
=> [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

You can get a sum of that array:

irb(main):048:0> a.sum
=> 165

And, actually, you don't need to make an array at all:

irb(main):049:0> (from..to).sum
=> 165

Side note. If you have three dots the last value of to is not included and that is a different sum obviously:

irb(main):053:0> (from...to).to_a
=> [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
irb(main):054:0> (from...to).sum
=> 145

So upto should really be called uptoandincluding:

irb(main):055:0> from.upto(to).to_a
=> [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

You can also use reduce or the alias inject either with a block or symbol to an operation to reduct a list the the pairwise application of the operator.

Example (reduce and inject are the same, but I usually use inject with a block or reduce with the parenthesis):

# block form where n is repeatedly added to an accumulator
irb(main):058:0> (from..to).inject{|sum, n| sum+n}
=> 165

# the operator + is repeated applied from the left to right 
irb(main):059:0> (from..to).reduce(:+)
=> 165
over 4 years ago · Santiago Trujillo Denunciar

0

Here are a few idiomatic ways of solving this problem in Ruby. They might be a little easier to follow than the solution you proposed.

sum = 0

10.upto(20) do |i|
  sum = sum + i
end

For the first iteration of loop, i will = 10, the second, i will = 11 and so "up to" 20. Each time it will add the value of i to sum. When it completes, sum will have a value of 165.

Another way is this:

10.upto(20).sum

The reason this works is that 10.upto(20) returns an Enumerator. You can call sum on an Enumerator.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda