Olá André, tudo jóia.
Bacana esse algorítimo, já tinha ouvido falar do bubble sort, mas como funciona? Eu entendi parte do código mas não todo, acho que por conta dos métodos ruby. Eu entendi que guarda o tamanho do array em n e inicia o loop, esse loop é a mesma coisa que o while? Depois atribuiu false a variável swapped, dae entra no (n-1).times do |i|, isso é equivalente a um for? Depois entra no if comparando se a posição atual for maior que a posição posterior, então ele vai fazer array[i], array[i+1] = array[i+1], array[i], que não entendi muito bem, e o swapped muda pra true inidcando que foi alterado alguma posição e então tem outro if que se o swapped não for falso, ele encerra e sai desse laço e no fim retorna o array. Poderia me explicar melhor?
Outra questão é que esse método só resolve parte do problema. O grande problema dessa questão é comparar os valores do array, no caso as strings amor e roma, e doce e ecod, ele tem que comparar avaliando que o inverso de amor é roma e são iguais ou vice-versa, mas o importante ele tem que constatar que são iguais, assim como doce e ecod, são iguais , pois o inverso de ecod é doce ou o inverso de ecod é doce que é igual a que já existe que tbm é doce. ou seja ele tem que avaliar as strings em que se o inverso dela for igual ela vai reverter essas strings, e ficará strings iguais dentro do array, e com strings iguais, ele irá retirar essas strings e sobrará o array sem essas strings duplicadas. exemplo:
['code', 'doce', 'ecod', 'report', 'frame', 'amor', 'repo', 'roma']
# aqui ele verificará se os valores invertidos de cada string são iguais as strings passada
Caso tenham strings iguais ele irá então reverter essas strings que ele verificou que são iguais. OBS: Isso na minha maneira de pensar, pois se tiver como já retirá-las assim que se verifica que são iguais, melhor. Mas de qualquer forma penso eu que terar que compará-las.
Então depois de reverter as strings iguais, o array ficará assim:
['code', 'doce', 'doce', 'report', 'frame', 'amor', 'repo', 'amor']
Depois de reverter as strings iguais, terá então que retirá-las, que no caso pode-se usar o código que informei e o array ficará assim:
['code', 'report', 'frame', 'repo']
Por fim, aí sim vem o método bubble_sort que colocará agora o array com as strings já retiradas em ordem alfabética, que ficará assim:
['code', 'frame', 'repo', 'report']
Agora que vem a grande dúvida, como comparo cada string do próprio array e as identifico? Creio que identificando eu possa manipular essa string passando a posição em que ela foi identificada, fazendo a reversão e então gerando um array novo com essas strings revertidas e assim retirar as que estão iguais, no entanto como comparar as strings dentro do array ou até o próprio array?