Algoritmo ordenar dígitos

Explicación del típico ejercicio de algoritmia de ordenar dígitos

26.06.2021 a las 12:13

Algoritmo de ordenar dígitos resuelto

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.

Al turrón...

  1. Creo el fichero de pruebas y el fichero donde estará mi algoritmo
  2. Exporta una función que devuelva el mismo número que reciba

    devuelveMismoNumero
  3. En el fichero de test creo la prueba que no pasará

    test
  4. 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:

    1. Convierto el número dado en un string con la función o método

      num.toString()
    2. 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('')
    3. 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)
    4. 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()
    5. 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()
    6. 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

Saludos,

Servicios

Software

IoT

Digitalización

Aplicaciones móviles

Consultoría

fjmduran.com v0.1.2