Skip to content

Instantly share code, notes, and snippets.

@jonasporto
Last active September 28, 2016 16:39
Show Gist options
  • Save jonasporto/e7792a97e4a3230e194e60fd828b4fc3 to your computer and use it in GitHub Desktop.
Save jonasporto/e7792a97e4a3230e194e60fd828b4fc3 to your computer and use it in GitHub Desktop.

Imprima os números de 1 a 100. Troque os números múltiplos de 5 por Peg, os múltiplos de 7 por car, e os múltiplos de 35 por Pegcar.

Em outras palavaras temos um lista de dados, que precisamos processar e gerar uma nova lista de dados, de acordo com a regra de negócio.

Um cenário ideal pra utilização do #map então segue uma primeira solução para o exercício.

result_a =  
	(1..100).map{ |n| 
	 	('Pegcar' if (n % 35).zero?) || ('car' if (n % 7).zero?) || ('Peg' if (n % 5).zero?) || n
	 }.join(', ')

# resultado
# => "1, 2, 3, 4, Peg, 6, car, 8, 9, Peg, 11, 12, 13, car, Peg, 16, 17, 18, 19, Peg, car, 22, 23, 24, Peg, 26, 27, car, 29, Peg, 31, 32, 33, 34, 
# Pegcar, 36, 37, 38, 39, Peg, 41, car, 43, 44, Peg, 46, 47, 48, car, Peg, 51, 52, 53, 54, Peg, car, 57, 58, 59, Peg, 61, 62, car, 64, Peg, 66, 67, 
# 68, 69, Pegcar, 71, 72, 73, 74, Peg, 76, car, 78, 79, Peg, 81, 82, 83, car, Peg, 86, 87, 88, 89, Peg, car, 92, 93, 94, Peg, 96, 97, car, 99, Peg" 

Aproveitando o conceito de classes abertas do ruby, podemos melhorar a expressividade dessa solução, adicionando um novo método #is_multiple_of? à classe Fixnum.

class Fixnum
  def is_multiple_of?(n)
  	n.nonzero? && (self % n).zero?
  end
end

E atualizar a solução com o novo método, obtendo o mesmo resultado

result_b = 
	(1..100).map{ |n| 
	 	('Pegcar' if n.is_multiple_of? 35) || ('car' if n.is_multiple_of? 7) || ('Peg' if n.is_multiple_of? 5) || n
	 }.join(', ')
   
# resultado
# => "1, 2, 3, 4, Peg, 6, car, 8, 9, Peg, 11, 12, 13, car, Peg, 16, 17, 18, 19, Peg, car, 22, 23, 24, Peg, 26, 27, car, 29, Peg, 31, 32, 33, 34, 
# Pegcar, 36, 37, 38, 39, Peg, 41, car, 43, 44, Peg, 46, 47, 48, car, Peg, 51, 52, 53, 54, Peg, car, 57, 58, 59, Peg, 61, 62, car, 64, Peg, 66, 67, 
# 68, 69, Pegcar, 71, 72, 73, 74, Peg, 76, car, 78, 79, Peg, 81, 82, 83, car, Peg, 86, 87, 88, 89, Peg, car, 92, 93, 94, Peg, 96, 97, car, 99, Peg" 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment