| Ciao a tutti, rieccomi dopo una lunga assenza (purtroppo), mi e' venuta in mente una vecchia idea, che avevo avuto fin dai tempi dell'MSX (quindi anni '80): scrivere una parola e fare tutti gli anagrammi possibili, indipendentemente che abbiano senso o no.
L'utilita', e' pressoche' zero, lo so, ma mi e' sempre piaciuta l'idea di provarci. Io vorrei provare con i pic, ma nulla vieta di usare altri processori. Prima pero' di provarci "fisicamente" sul micro, vorrei provare solo a stendere il software sul compilatore e vedere cosa succede.
Gia' il fatto di predisporre una tastiera di input per ogni lettera, non e' cosi' semplice, quindi procediamo per gradi. Qualcuno a suo tempo, ha suggerito di trasformare la parola in una array di caratteri e poi usare una funzione che trova le varie combinazioni. Ok, come si fa? Supponiamo di avere il caso: ABC
ogni lettera, sara' messa nel suo registro con il corrispettivo codice asci es:
A (0x20) codice asci 100 (solo indicativo, non ricordo la lettera A che codice ha), ma tralasciamo B (0x21) C( 0x22)
considerando che tutte le combinazioni si ottengono, se non erro col calcolo fattoriale, quello indicato col ! sulla calcolatrice, si avrebbe che con ABC si hanno 3*2*1=6 combinazioni. Ma questo forse e' irrilevante.
La mia idea, sarebbe di shiftare le lettere:
si parte con ABC poi
ACB, CBA BAC
e cosi' cia. Quando la lettera B ha raggiunto il registro 0x20, che e' il primo, si deve passare ad un'altra lettera e cosi' via, fino a passare tutte le lettere, a quel punto le combinazioni sono finite.
L'operazione di shift, in questo caso, non so bene come farla, visto che si parla di shiftare registri e non un singolo bit all'interno del byte, non so se mi spiego. Comunque e' solo un'idea molto molto grezza. Certo che se la parola va su un po' di lettere, povero micro: supponiamo la parola CALORIFERO: 3628800 combinazioni!!!!!!
Bhe, magari bisognerebbe ricorrere al C piuttosto che all'assembler, qui non so, magari mi sapete dire voi
|