La scelta dell'algoritmo così come l'ho postato e sperimentato, è stata determinata dall'esigenza di ridurre al minimo i comandi, per velocizzare l'esecuzione dei vari comandi in rapporto al tipo di linguaggio non eccessivamente veloce, pur rispettando i termini del problema di seguito riportati (il 1°....gli altri derivano da questo con le dovute variazioni):
----------------------------------------------------------------------------------
In un'urna sono contenuti 2016 bussolotti numerati da 1 a 2016.
Ne estraggo 3 e poi altri 3 (senza aver rimesso nell'urna i primi 3).
----------------------------------------------------------------------------------
Quindi ho immaginato un'urna contenente 2016 numeri [ matrice a(2016)];
ho creato poi un contenitore da 6 diviso in 2 parti (da 1 a 3 e da 4 a 6) [matrice b(6)]
(potrebbe rappresentare un tavolo sul quale vado ad appoggiare a sinistra i primi 3 numeri estratti ed a destra i secondi 3)
Quindi estraggo i 6 numeri e li sistemo in sequenza nello stesso ordine casuale con cui vengono estratti, tenendo presente che poi i primi 3 rappresenteranno le misure della scatola che dovrà entrare nella seconda, alla quale saranno assegnate le misure rappresentate dai secondi 3 numeri (mi dilungo per essere quanto più chiaro possibile anche nei cofronti di qualche ragazzo appassionato che ci legge).
Metto in ordine crescente i primi tre numeri e così proseguo per i secondi tre, perché poi esguirò il confronto fra i lati più corti, fra quelli medi e fra quelli più lunghi, assumendo che una scatola entra nell'altra solo se il lato corto dell'una è <= del lato corto dell' altra e così dicasi per i lati di misura media e poi per i restanti più lunghi. Conteggio i casi favorevoli su 500.000 reiterazioni e ne traggo la percentuale.
Una volta lavoravo in Quick Basic, poi mi convertii al Decimal, grazie ai buoni uffici di Gianfranco, ma in questo periodo di inattività qualcosa era già finita nel dimenticatoio.
Quanto sopra si riferisce all'intento di aderire allo spirito del quesito da cui consegue materialmente la traduzione in Decimal Basic, così come l'ho intesa.
Penso che simuli abbastanza quanto richesto:
per ottenere l'estrazione di 6 numeri diversi di varie dimensioni tratte a caso dall'urna dei 2016, ho utilizzato il randomizzatore dello stesso Decimal (con i limiti che ogni randomizzatore può avere, ma accettabili per questo problema); ogni numero estratto viene smarcato sulla matrice ( LET a(x)=1)], per evitare che possa essere ripetuto (cosa casualmente inevitabile); per cui se il randomizzatore dovesse scegliere un numero già smarcato, cioè già estratto, il programma gli dà l'alt e gli dice di riprovare, perché significherebbe la presenza nell'urna di due numeri uguali che non dovevano esserci; questo significa perdere del tempo, ma non ho visto altra soluzione e d'altra parte l'ventualità sarebbe rara, dovendosi estrarre solo 6 numeri su 2016. Quanto sopra si traduce nel comando ELSE GOTO 10.
IL resto dell'algoritmo mette in ordine crescente separatamente i primi 3 numeri e poi i secondi 3 per il confronto di cui ho detto prima, che segue all'ordinamento.
Riducendo le reiterazioni a 100.000 ed anche meno, l'esecuzione naturalmente si velocizza, ma aumenta l'imprecisione, anche se il programma dà egualmente un'idea sulla tendenza.
Tutto quanto sopra a beneficio del dubbio di Gianfranco, al quale naturalmente sarei grato se avesse da proporre un'alternativa alla mia soluzione.
Per quanto concerne la richiesta di Franco, direi che il suo algoritmo differisce solo nell'ordinamento delle terne, realizzato in senso decrescente.
Non saprei come mai il suo risultato di discosta dal mio, non conoscendo le caratteristiche di Excel, specie per quanto riguarda il randomizzatore. Potrebbe essere che non sia molto efficiente? Ogni macchina random genera una crta quantità di numeri casuali ed al termine li ripete se la routine non ha terminato il suo lavoro. Poniamo che Excel generi meno numeri random di Decimal Basic, questo potrebbe giustificare la differenza, perché comunque una routine random non è una formula matematica. Tutto è relativo e volendo, sforzandoci un po' possiamo dire che 22 è più vicino a 25 rispetto a 16 o 64.
Suggerirei, per una verifica, di provare a cambiare il numero delle reiterazioni, diminuendole e aumentandole gradualmente, con la speranza di trarne qualche conclusione.
Magari si potrebbe provare anche a diminuire la quantità dei numeri nell'urna (300 in vece di 2016), sempre allo scopo di testare l'efficienza del randomizzatore e per vedere se si notano miglioramenti.
Quanto tempo impiega Excel per sfornare il risultato? Il 22% è abbastanza stabile, oppure soffre di una certa variabilità non del tutto trascurabile?
Magari si potrebbe provare anche a diminuire la quantità dei numeri nell'urna (300 in vece di 2016), sempre allo scopo di testare l'efficienza del randomizzatore e per vedere se si notano miglioramenti.