Ultima modifica:
Ma la macchina enigma non era un concetto astratto?
- - - Updated - - -
Per la risoluzione problemi
Mi sa che ti stai confondendo con la macchina di turing.
edit:
Per i rotori non è troppo difficile, sostanzialmente ogni rotore applica un cifrario a sostituzione che può essere banalmente implementato da un semplice array, dove l'indice n rappresenta l'(n-1)-esima lettera dell'alfabeto e il valore contenuto nella cella dell'array con questo indice rappresenta la lettera risultante dopo la sostituzione.
Per esempio, un array tale che la A è mappata sulla C, la B sulla Z e la C sulla F inizierà così:
int rotore[]={2,25,5,...}
Il problema è che i rotori ruotano di una lettera ogni tanto, ad esempio dopo una rotazione il rotore di prima mappa la A alla Z, la B alla F, la C a quello su cui prima veniva mappata la D etc. etc. fino alla Z che è mappata sulla C.
In C mettiamo di dover codificare una A attraverso 4 rotori, basta fare una cosa del genere:
rotore4[(step4+rotore3[(step3+rotore2[(step2+rotore1[(step1+codice_lettera)%26])%26])%26])%26]
Dove gli step sono controllati esternamente dal ciclo principale che gestisce il tutto, ad esempio se vuoi che il primo rotore ruoti ad ogni lettera e il secondo ogni 10 lettere metterai nel ciclo principale una condizione che li aumenta sempre e solo quando il counter del ciclo è congruo a 0 modulo 10, rispettivamente.
Il %26 assicura che le coordinate restino sempre nel range giusto.
Ovviamente ci sono metodi molto più eleganti ed efficenti di fare la stessa cosa, soprattutto evitare il modulo 26, ma questo è quello più breve