JavascriptProva

lunedì 23 dicembre 2013

Riepilogo in preparazione di un algoritmo di distribuzione casuale dei turni restanti.

Ho trovato un algoritmo per la distribuzione casuale di un ArrayList.
Ne ho capito e imparato il concetto.

L'idea è di usare un array su cui lavorare, in cui immettere gli elementi.

Ho un array chiamato matrice.
        mario.nome = "Mario"
        giuseppe.nome = "Giuseppe"
        luigi.nome = "Luigi"
        mario.preferenza = 80
        giuseppe.preferenza = 80
        luigi.preferenza = 20

        matrice = New ArrayList
        matrice.Add(mario)
        matrice.Add(giuseppe)
        matrice.Add(luigi)
Ora mi immetto gli elementi su un array che chiamo matrice2, e verifico:
matrice2 = New ArrayList
        For n = 0 To matrice.Count - 1
            matrice2.Add(matrice(n))
        Next

        For n = 0 To matrice2.Count - 1
            Debug.Print(matrice2(n).nome)
        Next
Mario
Giuseppe
Luigi





Bene.
Adesso faccio le operazioni su questa matrice:

Conto il totale delle singole preferenze, memorizzandolo nella variabile totale
        For n = 0 To matrice2.Count - 1
            totale += matrice2(n).preferenza
        Next
Eseguo il calcolo che attribuisce i turni a seconda della preferenza:
        For n = 0 To matrice2.Count - 1
            matrice2(n).turni = Math.Floor(numTurni / totale * matrice2(n).preferenza)
        Next
e verifico, nella matrice iniziale matrice l'attribuzione dei turni, contando il totale dei turni attribuiti;
Quindi stampo i turni attribuiti e il resto da attribuire:
        For n = 0 To matrice.Count - 1
            Debug.Print(matrice(n).nome & " " & matrice(n).turni)
            attribuiti += matrice(n).turni
        Next

        resto = numTurni - attribuiti

        Debug.Print("attribuiti " & attribuiti)
        Debug.Print("resto " & resto)
Ecco:
Mario 44
Giuseppe 44
Luigi 11
attribuiti 99
resto 1


Fin qua nessuna novità: ora, però, provo a cancellare matrice2. Ecco tutto il codice con il codice che cancella la matrice2 in rosso. Quella matrice mi serve solo per lavorarci.
mario.nome = "Mario"
        giuseppe.nome = "Giuseppe"
        luigi.nome = "Luigi"
        mario.preferenza = 80
        giuseppe.preferenza = 80
        luigi.preferenza = 20

        matrice = New ArrayList
        matrice.Add(mario)
        matrice.Add(giuseppe)
        matrice.Add(luigi)


        matrice2 = New ArrayList
        For n = 0 To matrice.Count - 1
            matrice2.Add(matrice(n))
        Next

        For n = 0 To matrice2.Count - 1
            totale += matrice2(n).preferenza
        Next

        For n = 0 To matrice2.Count - 1

            matrice2(n).turni = Math.Floor(numTurni / totale * matrice2(n).preferenza)
        Next
        matrice2.Clear()
        For n = 0 To matrice.Count - 1
            Debug.Print(matrice(n).nome & " " & matrice(n).turni)
            attribuiti += matrice(n).turni
        Next

        resto = numTurni - attribuiti

        Debug.Print("attribuiti " & attribuiti)
        Debug.Print("resto " & resto)

Ora posso scegliere se distribuire i turni restanti solo a quelli che hanno il massimo delle preferenze o se escludere quelli che vogliono il minimo.
Questa soluzione mi sembra la più giusta.
Dunque devo costruire una funzione che elimini quelli che vogliono il minimo, progressivamente.

Nessun commento:

Posta un commento