Pregunta

Creé un algoritmo para convertir un dígito hexadecimal en una cadena alfanumérica, pero ahora quiero crear el inverso de este algoritmo.El algoritmo, en resumen, es el siguiente:

dígito hexadecimal % longitud de la matriz de caracteres alfanuméricos = índice en la matriz de caracteres alfanuméricos

Por ejemplo, el algoritmo toma dígitos hexadecimales. 4e (78 en decimal), lo modifica con el tamaño de una matriz de caracteres alfanuméricos (tamaño: 62), y devuelve un número decimal 16, el cual es un G.La matriz de caracteres alfanuméricos de este ejemplo está estructurada de la siguiente manera:(0-9, A-Z, a-z).

En resumen, este ejemplo se escribe como: (4e)78 % 62 = 16(G)

Lo inverso de este algoritmo es lo que espero lograr y, a partir de varias pruebas, parece que pueden ocurrir múltiples resultados, pero mi objetivo final es terminar con un algoritmo reversible, donde, por ejemplo, un dígito hexadecimal 4e se convierte a letra G luego de nuevo a 4e cuando se somete al algoritmo inverso.A partir del ejemplo, desarrollé una posible descripción del algoritmo inverso:

Supongamos que tenemos una ecuación modular.Dejar x sea ​​el dividendo, y ser el divisor, y r ser el resto. r y y se dan donde r=16 y y=62.Encuentra un x tal que x % y = r o x % 62 = 16.

La solución que probé:Fuerza bruta el dividendo

El dividendo nunca saldrá del intervalo cerrado. [0, 255] ya que un par de números hexadecimales pueden tener un valor máximo de ff, cual es 255 en decimales.Por lo tanto, si comparamos x con la ecuación modular hasta que obtengamos un resto igual, podemos derivar el dividendo.

Sin embargo, esta solución dará lugar a múltiples posibles x valores debido a que la operación de módulo causa un efecto envolvente en la matriz alfanumérica, lo que significa que múltiples valores pueden hacer que la ecuación sea verdadera.En el caso del ejemplo proporcionado, la solución propuesta genera los siguientes dividendos: 16, 78, 140, y 202.El segundo dividendo es el correcto y el que da como resultado que los algoritmos sean reversibles.Sin embargo, el problema es encontrarlo, ya que no se conoce directamente el correcto en el momento de ejecutar el algoritmo inverso.

Cualquier ayuda para idear una solución a mi método propuesto o una diferente sería muy apreciada.Gracias.

¿Fue útil?

Solución

Terminé resolviendo mi problema, pero no de la manera que esperaba.La solución implica la inherente reducción a la mitad de la cadena de salida.Usando esto, uno puede simplemente calcular el cociente de dividir x por y y usándolo como segundo carácter alfanumérico, formando un par.En el ejemplo dado, el resultado G se convertiría G1 porque la aritmética modular implicaba recorrer la matriz de caracteres alfanuméricos una vez.

El algoritmo ahora es el siguiente: x % y = r + (x / y), que es fácilmente reversible mediante la fuerza bruta de los posibles dividendos y simplemente seleccionando el correcto usando el segundo carácter del par alfanumérico.Por lo tanto, este algoritmo modificado ahora es reversible y se ha demostrado que funciona con el ejemplo dado en la pregunta original.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top