26.06.2021 a las 12:13
Este algoritmo es muy fácil, no obstante, lo suelen pedir mucho en las pruebas técnicas.
Es un algoritmo que dado un número, tiene que devolver un número con los mismo dígitos pero ordenados.
Para demostrar un nivel de senior resolvería este algoritmo usando TDD (Test-Driven Development) o desarrollo guiado por pruebas. Primero se hacen las pruebas y después el código para que pasen dichas pruebas.
Exporta una función que devuelva el mismo número que reciba
devuelveMismoNumero
En el fichero de test creo la prueba que no pasará
test
Ahora sí me pongo a resolver el algoritmo.
Todo sería más fácil si tuviera un array, pero no puedo convertir un número en un array. Pero lo que sí puedo es convertir un string en un array, así que lo primero:
Convierto el número dado en un string con la función o método
num.toString()
Convierto el string resultante en un array separado por cada uno de los caracteres. Para ello uso la función split pasando como argumento una cadena vacía
num.toString().split('')
Ahora sí puedo ordenar el array con la función sort. Tengo que tener la precaución de convertir los argumentos de ordenación a número, ya que el método sort lo requiere. Lo consigo añadiendo el signo + delante de un string.
num.toString().split('').sort((a,b)=>+a - +b)
Ya tengo un array de número ordenador como quiero, a continuación uno todos los elementos del array para tener un string con el método join.
num.toString().split('').sort((a,b)=>+a - +b).join()
Y por último convierto el string en un number para devolver un number tal y como pedía el enunciado del ejercicio. Uso el operador + delante del string obtenido del punto anterior.
+num.toString().split('').sort((a,b)=>+a - +b).join()
Mi código resultante es:
export function ordenarDigitos(num:number): number{ return + num .toString() .split("") .sort((a,b)=>+a - +b) .join(""); }
Puedes acceder a mi repositorio para descargarte el algoritmo con las pruebas unitarias
Hasta luego 🖖