Ciao, benissimo, ora è certamente un po' tutto più chiaro.
Tu pensa che leggendo solo il tuo primo post ti avevo inquadrato come uno studente degli ultimi anni di un qualche liceo, che si cimentava in qualche esercizio appioppatogli da qualche vecchio prof
Anche se questo non dovrebbe influire sull'atteggiamento di chi eventualmente risponde, è comunque sempre importante, soprattutto quando si fa una richiesta in un forum come in questo caso, fornire quanti più dettagli possibili così da dare modo a chi ti legge (magari per la prima volta) di comprendere appieno il contesto e il senso stesso della richiesta, quindi poter fornire a sua volta delle risposte più precise e mirate a quella particolare situazione.
Chiaramente sono giusto dei consigli da un vecchio frequentatore di forum.
Venendo alla tua richiesta, abbiamo inquadrato che si tratta di "calcolo combinatorio" e in particolare di un sistema che elabora e mostra le possibili "combinazioni semplici" secondo vari parametri.
Nel tuo secondo post hai riportato l'intero codice funzionante. Questo è importante perché vedendo il codice del primo post, chiaramente mancante di quelle parti che danno un responso anche visivo (così da poterne valutare anche il corretto funzionamento), mi era difficile capire se ti serviva "aggiustare" la funzione in sé piuttosto che avere giusto delle informazioni per comprendere come questa lavori.
Detto ciò, parto con qualche consiglio iniziale. In generale, quando si sviluppa del codice, è importante fare uso di tutte quelle tecniche, convenzioni e buone pratiche riguardo la buona programmazione, così che dovendo riesaminare in futuro il proprio elaborato si abbiano dei riferimenti utili, se non indispensabili, per comprendere meglio come funziona il tutto. Questo a grandi linee.
E' chiaro che nel caso specifico tu non abbia troppa colpa dal momento che stai prendendo del codice elaborato da terzi per adeguarlo ad un tuo progetto.
In questo caso, prima di entrare in un discorso troppo tecnico sul funzionamento di quel codice, il mio secondo consiglio è quello di riprendere l'intero codice riga per riga, quindi "riscriverlo" secondo, appunto, quelle buone regole di programmazione. Certo, capisco che (come hai scritto) avendo un livello medio di programmazione, per te sarebbe impensabile procedere in questo modo. Su questo posso venirti in aiuto. Anche io non posso dire comunque di avere un'esperienza universitaria riguardo la programmazione ma ho qualche buona base e avrei il piacere (per sfizio personale) di "abbellire" il tuo codice cosi che ti aiuti a capire meglio alcuni aspetti prima di passare eventualmente ad un discorso più tecnico.
Io procederei in questo modo:
- Applicare una corretta indentazione a tutto il codice. Non so se il tuo codice originario è indentato, ma ciò che hai riportato qui non lo è affatto. Ad ogni modo risulta molto utile utilizzare una corretta indentazione per poter comprendere l'organizzazione gerarchica delle varie parti di codice e script, cosi da avere una percezione migliore su come queste agiscono all'interno del loro contesto. Se utilizzi editor avanzati per la stesura del codice, spesso trovi già degli strumenti che ti aiutano ad indentarlo; diversamente puoi usare anche strumenti come
questo (o altri che puoi trovare con una ricerca del tipo "indent online") per ottenere facilmente una rapida formattazione del tuo elaborato. Se può interessarti vedi in generale anche l'argomento "
indentazione" nell'ambito della programmazione.
- Attribuire un nome consono e autoesplicativo ad ogni elemento, variabile e funzione. Questo chiaramente aiuta a determinare in modo rapido quale sia il ruolo di ogni singolo elemento. Se può interessarti vedi anche argomenti come
design pattern e
camel case.
- Usare la "
modalità strict". Probabilmente in questo caso non è così necessario ma serve più che altro per essere forzati all'uso di alcune regole più rigide durante lo sviluppo dello script così da ottenere una struttura meglio definita del codice.
- Applicare dei commenti per le varie parti più o meno rilevanti del codice. Aiuta te, ed eventuali altri sviluppatori che mettono mano al tuo codice, a comprendere esattamente cosa fa o deve fare ogni parte/riga del codice, così anche riprendendo il codice a distanza di tempo è possibile interpretarne correttamente le funzionalità. Particolarmente utile soprattutto a scopo didattico proprio per poter trasmettere, agli altri utilizzatori del mio codice, tutte quelle informazioni necessarie a comprenderne appieno il funzionamento.
- In JavaScript fare eventuale uso della funzione "
console.log()" per controllare fasi del processo durante l'esecuzione dello script e/o eventuali valori utilizzati, così da poter comprendere meglio, appunto, i vari passaggi che questo compie. Utile in genere per la fase di debug ma anche in casi esemplificativi e/o a scopo didattico.
Direi che per il momento la lezione è terminata

A parte gli scherzi, proverò a cimentarmi (lo faccio comunque anche per mio diletto) nella rielaborazione del tuo codice secondo i punti appena indicati. Da lì sicuramente avrai modo di apprezzarne meglio il funzionamento; eventualmente si potrà procedere poi con un discorso più tecnico e dettagliato se lo ritieni opportuno.
Buona serata.