Domanda

Ho creato un algoritmo per convertire una cifra esadecimale in una stringa alfanumerica, ma ora voglio creare l'inverso di questo algoritmo.L’algoritmo, in breve, è il seguente:

cifra esadecimale % lunghezza dell'array di caratteri alfanumerici = indice nell'array di caratteri alfanumerici

Ad esempio, l'algoritmo accetta cifre esadecimali 4e (78 in decimale), lo modifica con la dimensione di un array di caratteri alfanumerici (dimensione: 62) e restituisce il numero decimale 16, il quale è un G.L'array di caratteri alfanumerici in questo esempio è strutturato come segue:(0-9, A-Z, a-z).

In breve questo esempio è scritto come: (4e)78 % 62 = 16(G)

Spero di ottenere l'inverso di questo algoritmo e da vari test sembra che possano verificarsi più risultati, ma il mio obiettivo finale è finire con un algoritmo reversibile, dove, ad esempio, la cifra esadecimale 4e viene convertito in lettera G poi torna di nuovo a 4e quando sottoposto all'algoritmo inverso.Dall'esempio, ho sviluppato una possibile descrizione dell'algoritmo inverso:

Supponiamo di avere un'equazione modulare.Permettere x essere il dividendo, y essere il divisore e r essere il resto. r E y sono dati dove r=16 E y=62.Trova un x tale che x % y = r O x % 62 = 16.

La soluzione che ho provato:Forza bruta il dividendo

Il dividendo non uscirà mai dall'intervallo chiuso [0, 255] poiché una coppia di numeri esadecimali può avere un valore massimo di ff, che è 255 in decimale.Pertanto, se confrontiamo le x con l'equazione modulare finché non otteniamo un resto uguale, possiamo ricavare il dividendo.

Tuttavia, questa soluzione comporterà molteplici possibili x valori dovuti all'operazione modulo che causa un effetto avvolgente nell'array alfanumerico, il che significa che più valori possono far sì che l'equazione rimanga vera.Nel caso dell'esempio fornito, la soluzione proposta comporta i seguenti dividendi: 16, 78, 140, E 202.Il secondo dividendo è quello corretto e quello che rende gli algoritmi reversibili.Tuttavia, il problema è trovarlo, poiché quello corretto non è noto direttamente al momento dell'esecuzione dell'algoritmo inverso.

Qualsiasi aiuto nell'ideare una soluzione al metodo proposto o uno diverso sarebbe molto apprezzato.Grazie.

È stato utile?

Soluzione

Alla fine ho risolto il mio problema, ma non nel modo in cui mi aspettavo.La soluzione prevede il dimezzamento intrinseco della stringa di output.Usando questo, si può semplicemente calcolare il quoziente della divisione x di y e utilizzandolo come secondo carattere alfanumerico, formando una coppia.Nell'esempio fornito, il risultato G potrebbe diventare G1 perché l'aritmetica modulare prevedeva il ciclo una volta sull'array di caratteri alfanumerici.

L'algoritmo ora è il seguente: x % y = r + (x / y), che è facilmente reversibile forzando brutalmente i possibili dividendi e semplicemente selezionando quello corretto utilizzando il secondo carattere della coppia alfanumerica.Pertanto, questo algoritmo modificato è ora reversibile ed è stato dimostrato che funziona con l'esempio fornito nella domanda originale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top