Algoritmos notables: Convertir de número romano a número arábigo
Este reto de código lo he visto hace muy poco en una entrevista para developers, échale un ojito y apréndelo 😉

Hey cracks del código 🧑‍💻👩‍💻, les tengo un algoritmo conocido y se trata de un conversor de número de romano a arábigo, es decir al sistema numeral que todos nosotros usamos, el decimal.

Como ya saben, primero inténtenlo ustedes leyendo el enunciado si después de su máximo esfuerzo o mucho rato sin poder hacerlo mira la solución y luego vuelve a hacerlo sin copiar, tratando de recordar, así se aprende. Sin más preámbulo comencemos 🫡

Enunciado

Dado una cadena de texto que representa un número en romanos, se debe retornar su equivalente en números arábigos.

Asumir que el número romano dado es válido, no es necesario validar que esté bien escrito.

Algoritmo

  • Definir las equivalencias entre letras (de los números romanos) y sus valores equivalentes en el sistema decimal. Para esto puedes usar un dictionary.
  • Iterar caracter por caracter de la cadena
  • Verificar el caracter siguiente en cada paso, si este es mayor, entonces quiere decir que el actual en vez de sumarse debe restarse, ir acumulando los valores en el proceso.
  • Si se trata de el último caracter como no hay un siguiente con el cual compararse, directamente sumarlo.
  • Devolver la sumatoria.

Código

    public int Convert(string romanNumber) 
    {
        var values = new Dictionary<char, int>();
        values.Add('I', 1);
        values.Add('V', 5);
        values.Add('X', 10);
        values.Add('L', 50);
        values.Add('C', 100);
        values.Add('D', 500);
        values.Add('M', 1000);

        int result = 0;
        for (int i = 0; i < romanNumber.Length; i++)
        {
            if (i == romanNumber.Length - 1)//si se trata del último caracter, sumarlo directamente
            {
                result += values[romanNumber[i]];
                break;
            }

            if (values[romanNumber[i]] < values[romanNumber[i + 1]])
                result -= values[romanNumber[i]];
            else
                result += values[romanNumber[i]];            
        }
        return result;
    }

Pues ya lo tienes dev!

Foto de carolyn christine en Unsplash

Recuerda que esta entrada es de la serie de artículos Algoritmos notables, los cuales los subo a este repo, puedes visitarlo y descubrir más algoritmos 😉 

Ahora la pelota está en tu cancha, practícalo y comparte este artículo con tu equipo de ingeniería por supuesto 🥳👌

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *