JavaFree.org | RubyOnBr.org

Ajuda a melhorar codigo Combinaçao

Acompanhar Ajuda a melhorar codigo Combinaçao 7 posts, 6 participantes

Avatar bartorista 31 posts

O código nada mais faz do que pegar x números e combiná-los p a p, mas como foi o meu primeiro programa em ruby, eu acho que ficou muito feio.

Será que alguém poderia postar os padrões que eu não usei e poderia ter usado para melhorar o código, e etc?

Uma coisa que eu sei que posso melhorar é o nome do método combinarr, mas é que a ideia era ele ser do mesmo nome do combinar, mas ter parâmetros diferentes, isso funciona em java/C++, linguagens que eu vim, mas não consegui fazer em ruby.

Tem como?

 
Avatar Mereghost 1476 posts

Tu quer fazer uma combinação simples de n números de um vetor, certo?

Bom, tem o jeito fácil que é

Vamos às dicas:

  1. Variáveis com @ são de instância, então tu não precisa passá-las no método.
  2. Ruby não tem sobrecarga e não precisa dela. =p
  3. O teu for pode ser substitído por um qntNumeros.times { numeros << gets.chomp.to_i }
  4. Teu initialize não tem nada demais entãonão precisa estar lá
  5. Dá uma revisada na lógica que tá meio estranho.
 
Avatar bartorista 31 posts

A logica é a seguinte

Imagina que eu queria combinar 6 numeros 3 a 3

eu imaginei colocar os numeros em colunas

111
222
333
444
555
666

So qye nao é possivelfazer combincaçoes começando do 5 e do 6
entao ficaria assim

111
222
333
444
_55
_x6

so que o 1 nunca vai fazer parte da segunda e da 3 coluna

123
234
345
456

assim para combinar os numeros basta ir em linha reta e descer na coluna

exemplo
o 1 se combina com todos os da segunda coluna e , o 2 so se combina com o 3 4 5 o 3 so se combina com 4 5, e assim vale para segunda coluna também

Ai no codigo eu generalizei isso.

Obrigado pelas dicas.
Eu so passei as variáveis de instancia por parâmetro pois depois eu faço recursão com o combinarr

 
Avatar nofxx 1960 posts

6. Variaveis de instancia n precisam ficar passando de lá pra cá.
7. Vc nem ta criando uma instancia disso pra precisar de uma classe, da pra por ateh em array….
8. Apaga tudo e começa denovo… com a mente livre de C/Java e um Ruby book ;)

 
Avatar Matheus Cáceres 22 posts

Está muito procedural seu código, o metodo combinar poderia ser apenas chamado e os @numeros e @combinados estariam no initialize, nele você já faria o @fim e a @combinação.

Outra existe código duplicado, no combinarr numeros[inicio..fim].each do |numero| poderia melhorar isso.

Claro não deixa de valer a dica acima, se você ja esta usando variáveis de instância então precisa enviar pela função.

 
Avatar atwooddiscount 1 post

cheap boots
buy boots
womens boots
boots online
cheap shoes online

Tory Burch shoes black1 grind arenaceous <sup class='footnote' id='fnr20008'><a href='#fn20008'>20008</a></sup> – $179.98

<form name='quick_find_header' method='get' action='http://www.shoescheaponline.com/index.php?main_page=advanced_search_result'>

</form>




Your cart is empty

<form name='currencies_form' method='get' action='http://www.shoescheaponline.com/'>

</form>