body -> onload=load_set visualizza il set di immagini
carica le immagini e le visualizza in lista_img
se onclick su una img set_img
set_img -> costruisce la matrice w_img e la visualizza in word_img
elenca... -> showCombination(inputField.value)
controlla il numero - printWordList(createWordList(new Array(), "", inputText))
esegue la stampa della funzione ricorsiva createWordList(parametri: wordArray, strbase e remainingchars)
wordArray: matrice vuota che sarà restituita con tutte permutazioni
strbase: stringa che genera a permutazione successiva ?
remainingchars: stringa rimanente dopo...
_____________________________________
Permutazioni (scelta ordinata) di n ogg. presi r alla volta: P(n,r) = n!/(n-r)!. Se:r=n, P(n,r) = n!
Combinazioni (scelta non ordinata) di n ogg. presi r alla volta: C(n,r) = n!/r!(n-r)!. Se: r=n, C(n,r) = 1
button -elenca- chiama showCombinations(inputField.value) e passa il paramtero che compare nel campo "inputField"
showCombinations(parola) > calculateCombinations(parola) /controlla/ printWordList(createWordList(new Array(), "", inputText)) /calcola e stampa/
printWordList riceve il parametro: (createWordList(new Array(), "", inputText))
createWordList(new Array(), "", inputText))
funzione ricorsiva che riceve 3 parametri:
wordArray (inizialmente vuoto), strbase (vuoto), remainingchars (inizialmente la parola iniziale)
wordArray è la somma di tutte le parole, strbase
printWordList() ricostruisce la matrice interponendo un separatore (, ) e costruisce una nuova matrice con parole formate da immagini al posto di lettere .
algoritmo per la genarazione di tutte le permutazioni in ordine lessicografico. Da "Combinatoria computazionale"
k[] = k[1], k[2], k[3], k[4]
// 1. trovare il massimo i tale che k[i-1] < k[i]
// la posizione più a sinistra tale che il il valore (della cifra) sia maggiore della successiva.
for (i=n; i=2; i--)
if k[i] > k[i-1]
x = k[i-1]
// 2. trovare il massimo j tale che k[i-1] < k[j]
// la posizione più a sinistra tale che il il valore (della cifra) sia maggiore di k[i-1].
// 3. scambiare k[i-1] e k[j]