el problema de ordenar las letras segun la cantidad de apariciones

en hackealo.co/ presentan el siguiente problema y de aburrido me dedique a resolverlo con Ruby de la siguiente manera:

El problema

Dado el siguiente String:

uhERnSOTIiZJTMxuvVLATRfboavhtRwlyUKacuYlOopNWnoMWrUHCEtpcwzEYTWVptoxOlyHEeUMeMcbfEyjAVylxRpxVCRUCXAJFjUGSEUgQxJwrgGEPvIXInuFOAkcXjLdmPmiIzNWUXhYePvckLQotpAUTosytjPjxsRDPDebUXCVOTBrpjrchwLeVgnsaMDVztV

Ordenar las siguientes letras del alfabeto según cantidad de apariciones, de mayor a menor (en caso de empate, considerar órden alfabético).La respuesta debe estar en minúscula y sin letras repetidas.

#!/usr/bin/env ruby
letras="uhERnSOTIiZJTMxuvVLATRfboavhtRwlyUKacuYlOopNWnoMWrUHCEtpcwzEYTWVptoxOlyHEeUMeMcbfEyjAVylxRpxVCRUCXAJFjUGSEUgQxJwrgGEPvIXInuFOAkcXjLdmPmiIzNWUXhYePvckLQotpAUTosytjPjxsRDPDebUXCVOTBrpjrchwLeVgnsaMDVztV"
frase=letras.chars.sort { |a, b| a.casecmp(b) }.join.downcase
#puts frase.inspect
contador=frase.scan(/\w/).inject(Hash.new(0)){|h, c| h[c] += 1; h}
#puts contador.inspect
orden=contador.sort { |x, y| y[1] <=> x[1] }
#puts orden.inspect
semiresp=""
temp=0
orden.each do |c|
if temp==c[1]
semiresp+=c[0]
else
semiresp+=','+c[0]
end
temp=c[1]
end
separado=semiresp.split(',')
resultado=""
#puts separado.inspect
separado.each{|x| resultado+=x.chars.sort.join}
puts resultado.inspect
fuente:

Contar letras con ruby
ordenar las letras alfabeticamente en una frase
interprete de ruby en linea

No comments: