Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DA POSIZIONE A COMBINAZIONE

398 views
Skip to first unread message

Zipper

unread,
Sep 14, 2022, 7:18:40 AM9/14/22
to
Buongiorno N. Jones
per introdurre il mio quesito ti rimando ad una discussione che tu
avesti il 16 giugno 2017 con Nelson Cavazzuti e Paoloard, ma che poi
non ha avuto seguito.

https://answers.microsoft.com/it-it/msoffice/forum/all/formula-per-calcolare-l-indice-di-posizione-per/c12019bc-fd5b-4b55-8025-aa7303a26761

Da lì ho preso lo spunto per il problema inverso.
Immaginiamo un insieme di 90 numeri (N = 90), esempio quelli del lotto,
e immaginiamo di elencare le combinazioni delle cinquine (k = 5) in
ordine LESSICOGRAFICO, quindi avremo
1,2,3,4,5
1,2,3,4,6
.........
86,87,88,89,90
OK

Se nello sviluppo inseriamo anche un numero d'ordine avremo che ad ogni
cinquina corrisponde in modo UNIVOCO un numero che potremmo chiamare
anche numero di posizione.
1 - 1,2,3,4,5
2 - 1,2,3,4,6
43949268 - 86,87,88,89,90

Ora il mio problema, a tuttora non risolto, è:
dato un numero in input, e stabilito che il numero (posizionale) si
riferisce allo sviluppo di 90 numeri presi 5 alla volta,
è possibile costruire una formula che in 5 caselle restituisca i 5
numeri della combinazione che occupa appunto quella posizione ?
Io ho diverse soluzioni fatte con MACRO, ma io cerco, se possibile, se
esiste, una soluzione SOLO con FORMULE.
Ho provato diverse strade, compresa quella del Risolutore, e chiesto a
diverse persone, niente da fare.
ESEMPIO:
Se in A1 impongo il numero 1.000.000 (posizione della milionesima
cinquina), in A2, A3, A4, A5, A6 dovrebbero comparire i numeri della
combinazione milionesima, che sono esattamente 1,12,44,83,90.
Non ho preparato un file perchè l'esempio mi sembra chiaro.
Ti ringrazio a prescindere per qualsiasi risposta tu sappia darmi.

LEO

Ammammata

unread,
Sep 14, 2022, 10:49:26 AM9/14/22
to
Il giorno Wed 14 Sep 2022 01:18:22p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfsdac$5ci$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> Se nello sviluppo inseriamo anche un numero d'ordine avremo che ad ogni
> cinquina corrisponde in modo UNIVOCO un numero che potremmo chiamare
> anche numero di posizione.
> 1 - 1,2,3,4,5
> 2 - 1,2,3,4,6
> 43949268 - 86,87,88,89,90
>
> Ora il mio problema, a tuttora non risolto, è:
> dato un numero in input, e stabilito che il numero (posizionale) si
> riferisce allo sviluppo di 90 numeri presi 5 alla volta,
> è possibile costruire una formula che in 5 caselle restituisca i 5
> numeri della combinazione che occupa appunto quella posizione ?
> Io ho diverse soluzioni fatte con MACRO, ma io cerco, se possibile, se
> esiste, una soluzione SOLO con FORMULE.
>

i miei 2 cent

invece di usare un progressivo da 1 a 43.949.268 perchè non usi una
semplice stringa con i 5 numeri formattati a due cifre?

> 0102030405 - 1,2,3,4,5
> 0102030406 - 1,2,3,4,6
> 8687888990 - 86,87,88,89,90

avresti l'univocità del codice e una diretta corrispondenza con i numeri
estratti: forse ti aiuterebbe

issdr

unread,
Sep 15, 2022, 2:58:31 AM9/15/22
to
Zipper wrote:

> Se nello sviluppo inseriamo anche un numero d'ordine avremo che ad
> ogni cinquina corrisponde in modo UNIVOCO un numero che potremmo
> chiamare anche numero di posizione.

senza avere la tabella, tramite un algoritmo? ho generato la tabella con
python, su un buon PC la cinquina è molto impegnativa. non sono nemmeno
convinto che si possa "risalire la corrente" (posizione -> quintupla)

per me l soluzione pratica è tenere la tavola in un file di testo,
pescando la cinquina con un'UDF o una macro autoinnescante (cambi la
cella della posizione e cicciano fuori i 5 numeri relativi)

Zipper

unread,
Sep 15, 2022, 3:05:17 AM9/15/22
to
Scriveva issdr nel messaggio
<87pmfx8...@ID-313311.news.uni-berlin.de>
cio, intanto grazie per la risposta, ma vorrei dire che poichè esiste
benissimo la formula che da 5 numeri restituisce il numero di
posizione, ne deriva che potrebbe essere possibile il contrario
il contrario, e cioè da un numero, che appartiene all'insieme di 90,
ricavare la cinquina è ben possibile con un algoritmo che però vorrebbe
una macro, e questo algo già ce l'ho, ecco perchè ho chiesto se sarebbe
possibile con una formula, cioè senza macro
LEO

issdr

unread,
Sep 15, 2022, 4:50:34 AM9/15/22
to
Zipper wrote:

> questo algo già ce l'ho, ecco perchè ho chiesto se sarebbe possibile
> con una formula, cioè senza macro

puoi condividerlo? (curiosità, dubito sarò d'aiuto)

grazie

Ammammata

unread,
Sep 15, 2022, 5:07:28 AM9/15/22
to
Il giorno Thu 15 Sep 2022 10:50:17a, *issdr* ha inviato su
microsoft.public.it.office.excel il messaggio news:87leql81iu.fsf@ID-
313311.news.uni-berlin.de. Vediamo cosa ha scritto:
ma poi excel le regge 44 milioni di righe? il mio 2021 si ferma a poco più
di un milione

Zipper

unread,
Sep 15, 2022, 6:35:10 AM9/15/22
to
issdr scriveva il 15/09/2022 :
è il banale algo dello sviluppo combinazioni, in questo caso la
cinquina
-----
posizione = 0
for a = 1 to 86
for b = a+1 to 87
for c = b+1 to 88
for d = c+1 to 89
for e = d+1 to 90
posizione = posizione + 1
if posizione = numero scritto in Excel, allora è evidente
che la cinquina è fatta da a,b,c,d,e
next e,d,c,b,a
non c'è proprio niente da scrivere, come pensa Ammammata

LEO

issdr

unread,
Sep 15, 2022, 9:00:05 AM9/15/22
to
Zipper wrote:

> è il banale algo dello sviluppo combinazioni, in questo caso la
> cinquina

il tuo pseudo non mi dice nulla, sarò limitato io. puoi indicarmi un
esempio funzionante in un linguaggio qualsiasi? grazie.

ho già costruito la tabella, con un algoritmo funzionante. non mi sembra
scontato che il percorso inverso, posizione -> quintupla (senza passare
dalla tabella) abbia la stessa complessità computazionale

Zipper

unread,
Sep 15, 2022, 9:15:02 AM9/15/22
to
Scriveva issdr giovedì, 15/09/2022:
pensavo che tu sapessi estrapolare dallo pseudolinguaggio
--------
Sub lotto()
Dim a, b, c, d, e As Byte
Dim p, k As Long
Dim T
p = Range("A1").Value
Range("B1:F1").Cells.Clear
Range("A1:H1").HorizontalAlignment = xlCenter
T = Now
For a = 1 To 86: For b = a + 1 To 87: For c = b + 1 To 88: For d = c +
1 To 89: For e = d + 1 To 90
k = k + 1
If k = p Then

Cells(1, 2).Value = a
Cells(1, 3).Value = b
Cells(1, 4).Value = c
Cells(1, 5).Value = d
Cells(1, 6).Value = e
GoTo fine
End If
Next: Next: Next: Next: Next
fine:

Range("H1").Value = Now - T
Range("A1").Select
End Sub
--------------
la tua seconda affermazione non mi è chiara

Zipper

unread,
Sep 15, 2022, 9:15:49 AM9/15/22
to
Zipper nel messaggio <tfv8ge$3n1$1...@gioia.aioe.org> ha pontificato
e non c'è bisogno di nessuna ma proprio nessuna tabella

issdr

unread,
Sep 15, 2022, 9:20:05 AM9/15/22
to
Ammammata wrote:

> ma poi excel le regge 44 milioni di righe? il mio 2021 si ferma a poco più
> di un milione

ho proposto di leggere la tabella da un file di testo. penso sia la
soluzione più rapida e indolore

Ammammata

unread,
Sep 15, 2022, 9:26:09 AM9/15/22
to
Il giorno Thu 15 Sep 2022 03:05:42p, *issdr* ha inviato su
microsoft.public.it.office.excel il messaggio
news:87leqkk...@ID-313311.news.uni-berlin.de. Vediamo cosa ha
scritto:
ma se usasse semplicemente il codice corrispondente ai 5 numeri (come
scrivevo sopra, 0102030405 per la prima cinquina) non avrebbe nemmeno
bisogno della tabella; certo, dovrebbe però ordinarli dal piccolo al grande
per avere la corrispondenza

Ammammata

unread,
Sep 15, 2022, 9:29:30 AM9/15/22
to
Il giorno Thu 15 Sep 2022 03:14:38p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfv8ge$3n1$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> For a = 1 To 86: For b = a + 1 To 87: For c = b + 1 To 88: For d = c +
> 1 To 89: For e = d + 1 To 90
> k = k + 1
> If k = p Then
>
> Cells(1, 2).Value = a
> Cells(1, 3).Value = b
> Cells(1, 4).Value = c
> Cells(1, 5).Value = d
> Cells(1, 6).Value = e
> GoTo fine
> End If
> Next: Next: Next: Next: Next
>

qualcosa non mi quadra: scrivi sempre nelle stesse celle? ti serve come
test di velocità?

Zipper

unread,
Sep 15, 2022, 9:35:55 AM9/15/22
to
Dopo dura riflessione, Ammammata ha scritto :
credo che parliamo 2 lingue diverse, o che tu non abbia letto bene
ilmio codice
c'è un IF, che è l'unico momento in cui scrive qualcosa

issdr

unread,
Sep 15, 2022, 9:41:11 AM9/15/22
to
Zipper wrote:

> e non c'è bisogno di nessuna ma proprio nessuna tabella

più chiaro in vba, grazie. bello, ma non saprei come fare con le
formule, quelle iterazioni...

Zipper

unread,
Sep 15, 2022, 9:46:16 AM9/15/22
to
Scriveva issdr giovedì, 15/09/2022:
ecco perchè l'altro ieri ho scritto a Norman Jones, lui aveva iniziato
una conversazione 5 anni fa e quindi è già pratico del problema.
come hai potuto vedere io ho scritto il VBA, migliorabile in velocità,
c'è poi che quest oalgo vale solo per le cinquine,quindi non è
universale,ma soprattutto io sto cercando, se esiste, la FORMULA, al
posto della macro, ed hoil sospetto che si possa fare, non la certezza

Ammammata

unread,
Sep 15, 2022, 10:04:35 AM9/15/22
to
Il giorno Thu 15 Sep 2022 03:35:37p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfv9np$mbp$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> credo che parliamo 2 lingue diverse, o che tu non abbia letto bene
> ilmio codice
> c'è un IF, che è l'unico momento in cui scrive qualcosa
>

vada per la seconda :)
resto comunque dell'idea che gestire una eventuale tabella di 44 milioni di
record non sia la soluzione migliore
mi vien da pensare che forse, con un po' di divisioni e di calcoli dei
resti, si potrebbe arrivare allo stesso risultato in un millisecondo,
invece di ciclare, p.e., per 35milioni di volte
se stanotte non riesco a dormire ci penso su seriamente

Zipper

unread,
Sep 15, 2022, 10:14:28 AM9/15/22
to
Dopo dura riflessione, Ammammata ha scritto :
forse non sai che io rimugino da anni su questa materia, le ho provate
tutte, ma la tabella è una idea tua, la tabella, e ancor meno il file
di testo, non serve a niente.
i miei programmini oltre ad usare i relativi linguaggi stanno attenti
anche alla ergonomia e velocità
E proprio per la velocità massima io ipotizzo l'esistenza di una
formula che dia all'istante i 5 estratti, nulla puo' essere più veloce

issdr

unread,
Sep 15, 2022, 10:23:21 AM9/15/22
to
Zipper wrote:

> ecco perchè l'altro ieri ho scritto a Norman Jones, lui aveva iniziato
> una conversazione 5 anni fa e quindi è già pratico del problema.
> come hai potuto vedere io ho scritto il VBA, migliorabile in velocità,
> c'è poi che quest oalgo vale solo per le cinquine,quindi non è
> universale,ma soprattutto io sto cercando, se esiste, la FORMULA, al
> posto della macro, ed hoil sospetto che si possa fare, non la certezza

magari hai già l'UDF, ma ho pensato sta cosa per la cinquina. qui 365,
credo vada ovunque ci sia lo spillover. altrove penso funzioni se si
selezionano 5 celle adiacenti, ma è da provare.

--8<---------------cut here---------------start------------->8---
Function lotto(ByVal pos As Long)
Dim a, b, c, d, e As Integer
Dim k As Long
Dim aVett(0 To 4) As String
k = 0
For a = 1 To 86: For b = a + 1 To 87: For c = b + 1 To 88: For d = c + 1 To 89: For e = d + 1 To 90
k = k + 1
If k = pos Then
aVett(0) = CStr(a)
aVett(1) = CStr(b)
aVett(2) = CStr(c)
aVett(3) = CStr(d)
aVett(4) = CStr(e)
GoTo fine
End If
Next: Next: Next: Next: Next
fine:
lotto = aVett
End Function
--8<---------------cut here---------------end--------------->8---

sarebbe interessante generalizzarla

Zipper

unread,
Sep 15, 2022, 10:26:25 AM9/15/22
to
Dopo dura riflessione, issdr ha scritto :
> --8<---------------cut here---------------end--------------->8---

> sarebbe interessante generalizzarla

io ho Excel 2007, non farmi fare fatiche inutili, vuoi dire che quello
che hai scritto ci mette meno di 1 secondo ?

Ammammata

unread,
Sep 15, 2022, 10:28:01 AM9/15/22
to
Il giorno Thu 15 Sep 2022 04:14:10p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfvc02$1qmm$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> forse non sai che io rimugino da anni su questa materia,

io no :)

> le ho provate
> tutte, ma la tabella è una idea tua, la tabella, e ancor meno il file
> di testo, non serve a niente.
>

ne sono quasi convinto, l'idea di arrivarci senza 5 cicli for/next
innestati è intrigante

Ammammata

unread,
Sep 15, 2022, 10:31:09 AM9/15/22
to
Il giorno Thu 15 Sep 2022 04:27:59p, *Ammammata* ha inviato su
microsoft.public.it.office.excel il messaggio
news:XnsAF13A7814BE8am...@127.0.0.1. Vediamo cosa ha
scritto:

>> forse non sai che io rimugino da anni su questa materia,
>

ancora una domanda: da dove nasce la necessità, come nell'esempio OP, di
sapere che la posizione 1.000.000 corrisponde a 1,12,44,83,90 ?
oppure il contrario, ovviamente, dalla combinazione di 5 numeri risalire
alla posizione?

Zipper

unread,
Sep 15, 2022, 10:36:18 AM9/15/22
to
Ammammata ha sputacchiato:
non nasce da niente, è come mangiare i wurstel, non ce n'è nessuna
necessità, è una delle tante cose che si possono fare-mangiare
Chiaramente se io da quasi 40 anni faccio programmini di eleborazione
matematica-combinatoria e simili, prima o poi mi trovo nella
necessità/utilità di sapere all'istante la risposta ad una domanda, è
esattamente comue una qualsiasi formula matematica

issdr

unread,
Sep 15, 2022, 10:41:35 AM9/15/22
to
Zipper wrote:

> io ho Excel 2007, non farmi fare fatiche inutili, vuoi dire che quello
> che hai scritto ci mette meno di 1 secondo ?

provato con posizione 25000000ᵃ, sì sun un i7. provato su un 2019 (non
ha lo spillover), selezioni 5 celle, tipo B1:F1, in B1 metti l’UDF
riferito ad A1, poi ctrl+shift+return. Cambi pos in A1...

oppure dai il valore direttamente nella formula, ma devi avere
l’accortezza di selezionare l’intervallo e confermare in quel modo ogni
volta


Zipper

unread,
Sep 15, 2022, 10:51:07 AM9/15/22
to
Scriveva issdr nel messaggio
<87v8poi...@ID-313311.news.uni-berlin.de>
io ho 2007 e non so cosa sia lo spillover, è un gioiello per vecchie
signore ?
la tua macro impiega meno di 1 secondo '

Ammammata

unread,
Sep 15, 2022, 10:54:27 AM9/15/22
to
Il giorno Thu 15 Sep 2022 04:36:00p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfvd90$ek1$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> non nasce da niente, è come mangiare i wurstel, non ce n'è nessuna
> necessità

ah, ok, bene, ho una domanda anche io, già fatta su un altro gruppo, ma
senza aver trovato una soluzione "semplice e lineare" (poi boh, forse la
avevo fatta anche qui); ne avevo trovata una (da solo) ma non mi piaceva
molto

colonna A il nome della persona
colonna B la data di nascita

in due celle (posizionate altrove, p.e. in un'altra tab) metto un range di
date che può anche essere a cavallo del cambio anno
quindi dal 15 marzo al 18 giugno come pure dal 28 novembre al 14 febbraio

selezionare le persone che compiono gli anni in quel range di date

Ammammata

unread,
Sep 15, 2022, 10:56:19 AM9/15/22
to
Il giorno Thu 15 Sep 2022 04:54:24p, *Ammammata* ha inviato su
microsoft.public.it.office.excel il messaggio
news:XnsAF13ABFC3E77Bam...@127.0.0.1. Vediamo cosa ha
scritto:

> in due celle (posizionate altrove, p.e. in un'altra tab) metto un
> range di date che può anche essere a cavallo del cambio anno
> quindi dal 15 marzo al 18 giugno come pure dal 28 novembre al 14
> febbraio
>

nota: si considera solo il giorno e il mese, l'anno (eventualmente
aggiunto) non ha importanza
le celle possono anche essere 4, separando giorno e mese, senza l'anno

Zipper

unread,
Sep 15, 2022, 11:01:33 AM9/15/22
to
Sembra che Ammammata abbia detto :

> ah, ok, bene, ho una domanda anche io, già fatta su un altro gruppo, ma
> senza aver trovato una soluzione "semplice e lineare" (poi boh, forse la
> avevo fatta anche qui); ne avevo trovata una (da solo) ma non mi piaceva
> molto

> colonna A il nome della persona
> colonna B la data di nascita

> in due celle (posizionate altrove, p.e. in un'altra tab) metto un range di
> date che può anche essere a cavallo del cambio anno
> quindi dal 15 marzo al 18 giugno come pure dal 28 novembre al 14 febbraio

> selezionare le persone che compiono gli anni in quel range di date

perchè la domanda la fai a me ? onestamente non ho una grande
dimestichezza con le formule EXCEL, quando mi serve o studio su google
o chiedo sui forum

Zipper

unread,
Sep 15, 2022, 11:06:04 AM9/15/22
to
issdr ha detto questo giovedì :
io ho E 2007, W7 HP e un i3
inoltre piu che altro io ragiono ed escogito algoritmi, il mio ambiente
è il Power Basic, ma meccanicamente non conosco troppe manovre di
Excel, dove devo posizionare esattamente la function ?
dove e che cosa esattamente devo chiedere ? le UDF ....poca
dimestichezza

Ammammata

unread,
Sep 15, 2022, 11:15:19 AM9/15/22
to
Il giorno Thu 15 Sep 2022 05:01:16p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfveob$17k3$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> perchč la domanda la fai a me ? onestamente non ho una grande
> dimestichezza con le formule EXCEL, quando mi serve o studio su google
> o chiedo sui forum
>

non era "per te": dato che smanacci in powerbasic prova a scrivere un pezzo
di codice che effettui questa ricerca, cercando di farlo il piů semplice
che riesci

poi lo confronto con il mio (che, ripeto, non mi piace neanche un po' ma
funziona, scritto in SQL)

Zipper

unread,
Sep 15, 2022, 11:28:55 AM9/15/22
to
Ammammata ha pensato forte :
> Il giorno Thu 15 Sep 2022 05:01:16p, *Zipper* ha inviato su
> microsoft.public.it.office.excel il messaggio
> news:tfveob$17k3$1...@gioia.aioe.org. Vediamo cosa ha scritto:

>> perchè la domanda la fai a me ? onestamente non ho una grande
>> dimestichezza con le formule EXCEL, quando mi serve o studio su google
>> o chiedo sui forum
>>

> non era "per te": dato che smanacci in powerbasic prova a scrivere un pezzo
> di codice che effettui questa ricerca, cercando di farlo il più semplice
> che riesci

> poi lo confronto con il mio (che, ripeto, non mi piace neanche un po' ma
> funziona, scritto in SQL)

è difficile che su 2 piedi io mi metta a scrivere codice da zero, con
tutti i casini che ho in questi giorni
poi c'è da dire che io uso la versione CONSOLE di PowerBasic, cioè
quella che usa input da DOS e restituisce in DOS,ovviamente per i miei
usi posso fargli scrivere o prelevare i files CSV
E dovrei inventarmi io quelli che fanno i compleanni e le loro date ?
per adesso proprio no, scusami
Ora stavo seguendo il mio quesito disperato che va avanti da troppo
tempo

issdr

unread,
Sep 15, 2022, 11:32:26 AM9/15/22
to
Zipper wrote:

>> provato con posizione 25000000ᵃ, sì sun un i7. provato su un 2019 (non
>> ha lo spillover), selezioni 5 celle, tipo B1:F1, in B1 metti l’UDF
>> riferito ad A1, poi ctrl+shift+return. Cambi pos in A1...
>
>> oppure dai il valore direttamente nella formula, ma devi avere
>> l’accortezza di selezionare l’intervallo e confermare in quel modo ogni
>> volta
>
> io ho E 2007, W7 HP e un i3

dovrebbe andare

> inoltre piu che altro io ragiono ed escogito algoritmi, il mio
> ambiente è il Power Basic, ma meccanicamente non conosco troppe
> manovre di Excel, dove devo posizionare esattamente la function ?
> dove e che cosa esattamente devo chiedere ? le UDF ....poca
> dimestichezza

la function va al posto della macro, in un modulo o nel codice del
foglio.

selezioni B1:F1 e scrivi in B1:

=lotto(A1)

confermando la formula con control+shift+invio

in A1 scrivi la posizione voluta

Bruno Campanini

unread,
Sep 15, 2022, 11:45:54 AM9/15/22
to
Zipper formulated the question :
> Buongiorno N. Jones
> per introdurre il mio quesito ti rimando ad una discussione che tu avesti il
> 16 giugno 2017 con Nelson Cavazzuti e Paoloard, ma che poi non ha avuto
> seguito.
>
> https://answers.microsoft.com/it-it/msoffice/forum/all/formula-per-calcolare-l-indice-di-posizione-per/c12019bc-fd5b-4b55-8025-aa7303a26761
>
> Da lì ho preso lo spunto per il problema inverso.
> Immaginiamo un insieme di 90 numeri (N = 90), esempio quelli del lotto, e
> immaginiamo di elencare le combinazioni delle cinquine (k = 5) in ordine
> LESSICOGRAFICO, quindi avremo
> 1,2,3,4,5
> 1,2,3,4,6
> .........
> 86,87,88,89,90
> OK
>
> Se nello sviluppo inseriamo anche un numero d'ordine avremo che ad ogni
> cinquina corrisponde in modo UNIVOCO un numero che potremmo chiamare anche
> numero di posizione.
> 1 - 1,2,3,4,5
> 2 - 1,2,3,4,6
> 43949268 - 86,87,88,89,90
>
> Ora il mio problema, a tuttora non risolto, è:
> dato un numero in input, e stabilito che il numero (posizionale) si riferisce
> allo sviluppo di 90 numeri presi 5 alla volta,
> è possibile costruire una formula che in 5 caselle restituisca i 5 numeri
> della combinazione che occupa appunto quella posizione ?
> Io ho diverse soluzioni fatte con MACRO, ma io cerco, se possibile, se
> esiste, una soluzione SOLO con FORMULE.
> Ho provato diverse strade, compresa quella del Risolutore, e chiesto a
> diverse persone, niente da fare.
> ESEMPIO:
> Se in A1 impongo il numero 1.000.000 (posizione della milionesima cinquina),
> in A2, A3, A4, A5, A6 dovrebbero comparire i numeri della combinazione
> milionesima, che sono esattamente 1,12,44,83,90.
> Non ho preparato un file perchè l'esempio mi sembra chiaro.
> Ti ringrazio a prescindere per qualsiasi risposta tu sappia darmi.
>
> LEO

Io ho una routine in Excel-VBA che in una frazione di secondo
pesca qualunque cinquina corrispondente alla posizione
lexicografica definita.
Senza necessità di alcuna tabella contenente le 43 949 268 cinquine.

Con le formule non cavi un ragno da un buco se non hai la
tabella contenente tutte le cinquine.
Poi, avendola, farne la scansione fino al ritrovamento dev'esser
proprio una delizia...

Bruno

issdr

unread,
Sep 15, 2022, 11:59:10 AM9/15/22
to
Bruno Campanini wrote:

> Io ho una routine in Excel-VBA che in una frazione di secondo
> pesca qualunque cinquina corrispondente alla posizione
> lexicografica definita.

se è diversa da quella di zipper la condivideresti?

grazie

Zipper

unread,
Sep 15, 2022, 12:50:02 PM9/15/22
to
Nel messaggio <tfvhbd$jo6$1...@gioia.aioe.org> , Bruno Campanini ha detto:

> Io ho una routine in Excel-VBA che in una frazione di secondo
> pesca qualunque cinquina corrispondente alla posizione
> lexicografica definita.
> Senza necessità di alcuna tabella contenente le 43 949 268 cinquine.

> Con le formule non cavi un ragno da un buco se non hai la
> tabella contenente tutte le cinquine.
> Poi, avendola, farne la scansione fino al ritrovamento dev'esser
> proprio una delizia...

> Bruno

se hai letto i miei post avrai visto che io non uso tabelle, anzi le
rifiuto.
inoltre anche io ho un'altra routine che oltre ad essere generalizzata
impiega meno di una frazione di secondo per pescare qualsiasi
combinazione corrispondente alla posizione lexicografica definita.
E con questo ?
Io, come OP, ho chiesto se sia possibile usare formule invece di macro,
è diventato un mio pallino, un mio piccio, un cruccio.
O c'è o non c'è, il resto lo so
e se io postassi un certo esempio di cio che dico dovreste
riconsiderare molte cose, ma preferisco mantenere il quesito sulla
falsariga della domanda primitiva, non si puo' dare sempre tutto per
scontato.
LEO

Zipper

unread,
Sep 15, 2022, 1:24:29 PM9/15/22
to
issdr ha detto questo giovedì :

> dovrebbe andare
infatti va

> la function va al posto della macro, in un modulo o nel codice del
> foglio.
> selezioni B1:F1 e scrivi in B1:
> =lotto(A1)
> confermando la formula con control+shift+invio
> in A1 scrivi la posizione voluta

buona, ma guardando il codice che differenza ha con la mia ?

issdr

unread,
Sep 15, 2022, 1:38:01 PM9/15/22
to
Zipper wrote:

> buona, ma guardando il codice che differenza ha con la mia ?

è la tua sub, riadattata come UDF (la modifica principale è l'utilizzo
di un array per raccogliere la tupla e passarla all'output della
function). se non ti è chiaro qualche dettaglio chiedi pure

Zipper

unread,
Sep 15, 2022, 1:44:14 PM9/15/22
to
Scriveva issdr giovedì, 15/09/2022:
no no, mi è chiaro
rilevo soltanto che qui è necessario selezionare 5 celle e cliccare 3
tasti mentre nella mia niente di ciò, insomma è la mia abitudine di
fare sempre le cose più semplici.
Aspettiamo la bomba Campanini, sono curioso

casanmaner

unread,
Sep 15, 2022, 2:02:18 PM9/15/22
to
Il giorno giovedì 15 settembre 2022 alle 16:23:21 UTC+2 issdr ha scritto:

> --8<---------------cut here---------------start------------->8---
> Function lotto(ByVal pos As Long)
> Dim a, b, c, d, e As Integer

Una curiosità ...
Perché ti sei limitato a dichiarare "Integer" solo l'ultima delle variabili?

Bruno Campanini

unread,
Sep 15, 2022, 2:33:11 PM9/15/22
to
It happens that casanmaner formulated :
Lo so io il perché...

Come ti va vecchio volpone?

Bruno

issdr

unread,
Sep 15, 2022, 2:44:18 PM9/15/22
to
Zipper wrote:

> rilevo soltanto che qui è necessario selezionare 5 celle e cliccare 3
> tasti mentre nella mia niente di ciò, insomma è la mia abitudine di
> fare sempre le cose più semplici.

lo fai una volta e poi scrivi la posizione voluta nella cella argomento
dell'UDF

issdr

unread,
Sep 15, 2022, 2:51:46 PM9/15/22
to
beccato. sarebbe bello poterlo fare però

Bruno Campanini

unread,
Sep 15, 2022, 3:00:34 PM9/15/22
to
After serious thinking issdr wrote :
Non ne conosco tanti, anzi ne conosco pochi, ma di quei pochi
VBA è l'unico che non lo consente.

Bruno

Bruno Campanini

unread,
Sep 15, 2022, 3:18:24 PM9/15/22
to
After serious thinking issdr wrote :
Io non so se sia diversa da quella di Zipper, non capisco
il codice altrui... faccio già fatica a capire il mio
il giorno dopo.

Se vuoi ti mando quella che fa il contrario: una funzione
che definisce la posizione lexicografica di una combinazione.
Sempre senza l'uso di tabelle chilometriche.

Eventualmente mandami un indirizzo eMail.

Bruno

Zipper

unread,
Sep 15, 2022, 3:32:53 PM9/15/22
to
Scriveva Bruno Campanini giovedì, 15/09/2022:
sbaglio o tu hai 87 anni ?

issdr

unread,
Sep 15, 2022, 4:37:47 PM9/15/22
to
Bruno Campanini wrote:

> Se vuoi ti mando quella che fa il contrario: una funzione
> che definisce la posizione lexicografica di una combinazione.
> Sempre senza l'uso di tabelle chilometriche.
>
> Eventualmente mandami un indirizzo eMail.

non sembra, ma questo qua è pronto uso. grazie

Bruno Campanini

unread,
Sep 16, 2022, 1:35:25 AM9/16/22
to
Bruno Campanini wrote on 15-09-22 :
> After serious thinking issdr wrote :
>> Bruno Campanini wrote:
>>
>>> Io ho una routine in Excel-VBA che in una frazione di secondo
>>> pesca qualunque cinquina corrispondente alla posizione
>>> lexicografica definita.
>>
>> se è diversa da quella di zipper la condivideresti?
>>
>> grazie
> Io non so se sia diversa da quella di Zipper, non capisco
> il codice altrui... faccio già fatica a capire il mio
> il giorno dopo.

Ripensandoci, ho esaminato la versione di Zipper: è semplicissima
e facilissima da riscrivere.
Ma vale solo per le combinazioni 90C5.
Se hai 300C100... ti diverti a riscriverla!
Quella che ho io, e che non ho ancor trovato nel casino di
file non organizzati, vale per ogni nCk, dove k>0 AND n>k.
Però ne ho un'altra, rozzamente generata da un matematico
con le palle formato icosaedro, avente le stesse identiche
funzionalità, ma non è farina del mio sacco....

Quella che fa il contrario è di produzione casalinga.
Sono 2 funzioni per complessive 16 righe di codice
che trovi impostate a n=300, k=20.
I numerosi zeri del risultato conseguono alle limitate
capacità numeriche di Excel.
Per la circostanza (90, 5 ) ed oltre il risultato è corretto.

Ti invio il file.

Bruno

Bruno Campanini

unread,
Sep 16, 2022, 1:42:53 AM9/16/22
to
Zipper has brought this to us :
Sbagli di poco.
Ne ho quasi 87 (1936).

Bruno

issdr

unread,
Sep 16, 2022, 2:03:37 AM9/16/22
to
Bruno Campanini wrote:

> Ti invio il file.

ricevuto, grazie mille Bruno

Zipper

unread,
Sep 16, 2022, 2:22:07 AM9/16/22
to
Scriveva issdr nel messaggio
<87tu577...@ID-313311.news.uni-berlin.de>
> Bruno Campanini wrote:

>> Ti invio il file.

> ricevuto, grazie mille Bruno

ed ora che hai ricevuto questo X-file , mi diresti almeno che cosa fa,
come lo fa ?

LEO

issdr

unread,
Sep 16, 2022, 3:45:22 AM9/16/22
to
lo ha già spiegato Bruno in nuce.

la soluzione migliore rimane l'UDF, forse a pari merito con la tua sub
se resa autoinnescante. scegli tu la via, perché ho la sensazione che
non hai ancora realizzato. posso guidarti, ma ti devi sporcare le mani
per il setup

issdr

unread,
Sep 16, 2022, 4:20:05 AM9/16/22
to
Bruno Campanini wrote:

> Ripensandoci, ho esaminato la versione di Zipper: è semplicissima
> e facilissima da riscrivere.
> Ma vale solo per le combinazioni 90C5.
> Se hai 300C100... ti diverti a riscriverla!

non penso gli serva. invece sto pensando che parametrizzandola si riesce
a generalizzarla per le altre combinazioni vincenti. next pc time

Zipper

unread,
Sep 16, 2022, 4:54:00 AM9/16/22
to
Scriveva issdr venerdì, 16/09/2022:
forse non è sottinteso ma ho anche la versione generalizzata della
macro che data la posizione estrae gli elementi, quanti che siano, da
qualsiasi insieme long.
E' anche ovvio che se devo combinare tutte le stelle del firmamento
andrei incontro a qualcosa di inutile e pesantissimo (overflow)
perciò la mia macro presenta Dim as long per tutte le variabili, tranne
posizione e totale combinazioni che sono Variant.
hai ben detto che oltre certi limiti di un uso "giornaliero" la cosa
non serve.
quanto al file da te ricevuto via mail, mi sembrava che facesse il
lavoro contrario, cioè da combinazione a posizione.
anche qui ho una formula che adatto a mano al bisogno.
certo, avere una function generalizzata per me sarebbe comodo, ma pare
che sia un segreto militare, vuol dire che me la costruirò quando
servirà
la tua UDF funziona, ma per qualche motivo, forse anche la tastiera,
spesso si inceppa, ma credo di averla setta bene
LEO

issdr

unread,
Sep 16, 2022, 6:20:04 AM9/16/22
to
Zipper wrote:

> E' anche ovvio che se devo combinare tutte le stelle del firmamento
> andrei incontro a qualcosa di inutile e pesantissimo (overflow)
> perciò la mia macro presenta Dim as long per tutte le variabili,
> tranne posizione e totale combinazioni che sono Variant.

no, la mia idea grezza è di utilizzare il tuo codice cinquina, inibendo
i cicli non necessari, quindi stesse risorse per le 5-tuple, meno a
scendere.

> la tua UDF funziona, ma per qualche motivo, forse anche la tastiera,
> spesso si inceppa, ma credo di averla setta bene

da me risultati in frazioni di secondo, ho anche trascinato il range per
inserire altre pos, incollo una serie di interi grandicelli, va.

unica cosa, prova a dichiarare le variabili da "a" a "d" come integer
(nella tua sub come byte), è l'errore fatto notare da casanmaner, sono
variant (spazio allocato per nulla)

Bruno Campanini

unread,
Sep 16, 2022, 7:21:27 AM9/16/22
to
Zipper was thinking very hard :
> Scriveva issdr venerdì, 16/09/2022:
>> Bruno Campanini wrote:
>
>>> Ripensandoci, ho esaminato la versione di Zipper: è semplicissima
>>> e facilissima da riscrivere.
>>> Ma vale solo per le combinazioni 90C5.
>>> Se hai 300C100... ti diverti a riscriverla!
>
>> non penso gli serva. invece sto pensando che parametrizzandola si riesce
>> a generalizzarla per le altre combinazioni vincenti. next pc time
>
> forse non è sottinteso ma ho anche la versione generalizzata della macro che
> data la posizione estrae gli elementi, quanti che siano, da qualsiasi insieme
> long.
> E' anche ovvio che se devo combinare tutte le stelle del firmamento andrei
> incontro a qualcosa di inutile e pesantissimo (overflow)
> perciò la mia macro presenta Dim as long per tutte le variabili, tranne
> posizione e totale combinazioni che sono Variant.
> hai ben detto che oltre certi limiti di un uso "giornaliero" la cosa non
> serve.
> quanto al file da te ricevuto via mail, mi sembrava che facesse il lavoro
> contrario, cioè da combinazione a posizione.
> anche qui ho una formula che adatto a mano al bisogno.
> certo, avere una function generalizzata per me sarebbe comodo, ma pare che
> sia un segreto militare

Nessun segreto militare:

https://1drv.ms/x/s!AvTaMfd5-b2o2xRSjOZr4lg7vEQ9

chiedo solo rispetto per la produzione non mia.
La quale deriva tutta da quelle 11 righe...

Bruno

Zipper

unread,
Sep 16, 2022, 7:49:27 AM9/16/22
to
Bruno Campanini ha detto questo venerdì :

> Nessun segreto militare:
grazie, ad una prima scorsa ho trovato l'algo dell'impareggiabile El
Filibustero, che lui stesso mi diede anni fa sul quel NG, poi guarderò
meglio ma è materia che già conosco in varie salse
oltretutto da lui ho avuto conferma del fatto che non ha senso
sviluppare e scrivere l'integrale di ogni cosa, è necessario,
sufficiente ed elegante sviluppare ed esporre solo il range di
interesse, sia di combinazioni, o permutazioni o altro

> chiedo solo rispetto per la produzione non mia.
> La quale deriva tutta da quelle 11 righe...
che vuol dire ?
io ho sempre rispetto per tutto e tutti

LEO

Zipper

unread,
Sep 16, 2022, 7:53:58 AM9/16/22
to
Dopo dura riflessione, Zipper ha scritto :
> oltretutto da lui ho avuto conferma del fatto che non ha senso sviluppare e
> scrivere l'integrale di ogni cosa, è necessario, sufficiente ed elegante
> sviluppare ed esporre solo il range di interesse, sia di combinazioni, o
> permutazioni o altro

e quindi per questo motivo la macro elementare che ho scritto non mi
soddisfa piu delminimo perchè per rispondermi deve conteggiare
l'integrale
e cioè per questo cerco da sempre l'ipotetica possibilità di una
formula che applicata ad un numero posizionale restituisca di colpo gli
elementi dell'insieme

LEO

issdr

unread,
Sep 16, 2022, 8:53:38 AM9/16/22
to
Zipper wrote:

> e cioè per questo cerco da sempre l'ipotetica possibilità di una
> formula che applicata ad un numero posizionale restituisca di colpo
> gli elementi dell'insieme

inizialmente ragionavo in questi termini, ad intuito mi sembra difficile
da fare. credo c'entrino i grafi, ma li ho visti solo superficialmente
quando ho studiato teoria delle funzioni ricorsive (decenni fa). di
base, in un albero si può avere una certa complessità computazionale
nello "scendere" lungo i nodi, ed averne un'altra a "salire" (che
talvolta rasenta l'incomputabilità, es. della fattorizzazione dei primi)

Zipper

unread,
Sep 16, 2022, 9:37:44 AM9/16/22
to
Sembra che issdr abbia detto :
a questo punto morto devo sconvolgerti
EXCEL: lotto 90 numeri, 4005 ambi

in A1 scrivi un qualsiasi numero fra 1 e 4005

in A2 metti
=(89+1)-ARROTONDA.ECCESSO((RADQ(8*(4005-A1+1)+1)-1)/2;1)

in A3 metti
=A1+B1-(2*89*(B1-1)-(B1-1)^2-(B1-1))/2-(B1-1)

ora vedrai che qualsiasi numero tra 1 e 4005 tu metta in A1 avrai in A2
e A3 i 2 elementi dell'ambo

sono giusti ? siiiiiiiiii
sono formule ? sìììììììììì
ho usato il VBA ? noooooooo

e allora, se esiste questo giochetto per l'ambo
perchè non potrebbe esistere per il terno,la quaterna, la cinquina ecc
?
Qui sta la mia cocciutaggine, ma non ho tempo, calma e concentrazione,
e neppure un vero bagaglio matematico

Ragionateci sopra, come dice Zaia
LEO

Zipper

unread,
Sep 16, 2022, 9:54:05 AM9/16/22
to
Dopo dura riflessione, Zipper ha scritto :

> in A1 scrivi un qualsiasi numero fra 1 e 4005

> in A2 metti
> =(89+1)-ARROTONDA.ECCESSO((RADQ(8*(4005-A1+1)+1)-1)/2;1)

> in A3 metti
> =A1+B1-(2*89*(B1-1)-(B1-1)^2-(B1-1))/2-(B1-1)

> LEO

PARDON: A1;B1;C1

Zipper

unread,
Sep 16, 2022, 10:17:03 AM9/16/22
to
Scriveva Zipper nel messaggio <tg1v5q$s76$1...@gioia.aioe.org>

> PARDON: A1;B1;C1

CHE CASINO, RISCRIVO TUTTO
in A1 scrivi un qualsiasi numero fra 1 e 4005

in B1 metti
=(89+1)-ARROTONDA.ECCESSO((RADQ(8*(4005-A1+1)+1)-1)/2;1)

in C1 metti
=A1+B1-(2*89*(B1-1)-(B1-1)^2-(B1-1))/2-(B1-1)

ora vedrai che qualsiasi numero tra 1 e 4005 tu metta in A1 avrai in B1
e C1 i 2 elementi dell'ambo

issdr

unread,
Sep 16, 2022, 10:17:48 AM9/16/22
to
Zipper wrote:

> e allora, se esiste questo giochetto per l'ambo perchè non potrebbe
> esistere per il terno,la quaterna, la cinquina ecc

non escludo possa esistere, ho solo la sensazione che l'aumento di
complessità non sia lineare per le altre vincenti

Zipper

unread,
Sep 16, 2022, 10:20:57 AM9/16/22
to
issdr scriveva il 16/09/2022 :
> complessità non sia lineare per le altre vincentI

lo penso anche io, ma potrebbe trattarsi anche solo di allungare le
formule con non molte sigle, problema di pazienza ma soprattutto di
preparazione e inventiva (e BEGGround)

issdr

unread,
Sep 16, 2022, 3:50:05 PM9/16/22
to
ok, trovato teoria, pseudo e codice in rete: sono ancora più scettico
sull'implementazione tramite formule standard.

ho trovato un'UDF, ma fa riferimento alla tabella colessicografica;
forse ci tornerò su.

simpatico questo widget, che però è zero based:

https://planetcalc.com/8594/#fn:1

anche l'ideatore dell'algoritmo ha questo approccio, ma è sufficiente
sommare 1 alla tupla (n - 1)ª per ottenere l'nª (in soldoni, avendo
un'UDF chiamata unRank, si scriverà:

=unRank(n;k;pos)+1

). il paper citato nel widget, l'autore è colui che ha coniato il
termine "combinadic":

https://www.redperegrine.net/2021/04/10/software-algorithms-for-k-combinations/Generating-the-mth-Lexicographical-Element-of-a-Mathematical-Combination-Dr-James-McCaffrey.pdf

non in VBA, ma la spiega di questa persona è molto chiara, tra l'altro
ribasata su 1:

https://www.redperegrine.net/2021/04/10/software-algorithms-for-k-combinations/

un'UDF:

https://www.mrexcel.com/board/threads/lexicographic-index-numbers-combination-sequence-numbers.726642/post-3575701

0 based, colessicografica; abbastanza efficiente con i numeri che ho
provato

Zipper

unread,
Sep 16, 2022, 4:24:56 PM9/16/22
to
issdr ha pensato forte :
caspita, ma prima che io vada a leggere questo argomento ghiotto, cosa
è colessicografico ? conosco sololessocgrafico
e zero based ? contare da zeroinvece che da 1 ?
combinadic ? bellissimo, è uno dei miei argomenti preferiti, insieme a
factoradic

Zipper

unread,
Sep 16, 2022, 4:31:27 PM9/16/22
to
Il 16/09/2022, Zipper ha detto :

> caspita, ma prima che io vada a leggere questo argomento ghiotto, cosa è
> colessicografico ? conosco sololessocgrafico
> e zero based ? contare da zeroinvece che da 1 ?
> combinadic ? bellissimo, è uno dei miei argomenti preferiti, insieme a
> factoradic

peccato, già conosco quelle pagine meno quella della UDF
PLANET ce l'ho da tempo nei preferiti

Zipper

unread,
Sep 16, 2022, 4:36:31 PM9/16/22
to
Nel messaggio <tg2met$1qn3$1...@gioia.aioe.org> , Zipper ha detto:
comunque grazie per l'attenzione a questo interessante argomento che da
sempre mi affascina, le pagine combinatorie penso di averle girate
quasi tutte

issdr

unread,
Sep 16, 2022, 5:28:10 PM9/16/22
to
Zipper wrote:

> caspita, ma prima che io vada a leggere questo argomento ghiotto, cosa
> è colessicografico ? conosco sololessocgrafico

https://user.fm/files/v2-ec4c1e79a9da4bdae36b98f3e545f036/Appunti08.png

> e zero based ? contare da zeroinvece che da 1 ?

0-89 vs. 1-90

> combinadic ? bellissimo, è uno dei miei argomenti preferiti, insieme a
> factoradic

ha ideato una numerazione su base binomiale. su stackoverflow ho
incrociato chi suggeriva la "fattorializzazione", ma gli è stato detto
che è sconsigliata per queste specifiche applicazioni

Zipper

unread,
Sep 16, 2022, 5:43:34 PM9/16/22
to
Scriveva issdr nel messaggio
<87bkrf1...@ID-313311.news.uni-berlin.de>
> Zipper wrote:

>> caspita, ma prima che io vada a leggere questo argomento ghiotto, cosa
>> è colessicografico ? conosco sololessocgrafico

> https://user.fm/files/v2-ec4c1e79a9da4bdae36b98f3e545f036/Appunti08.png
ok ma non capiscolo stesso scopo eapplicazioni

>> combinadic ? bellissimo, è uno dei miei argomenti preferiti, insieme a
>> factoradic

> ha ideato una numerazione su base binomiale. su stackoverflow ho
> incrociato chi suggeriva la "fattorializzazione", ma gli è stato detto
> che è sconsigliata per queste specifiche applicazioni

domani se ci riesco ti faccio vedere altra cosa

issdr

unread,
Sep 17, 2022, 4:15:33 AM9/17/22
to
Zipper wrote:

>>> caspita, ma prima che io vada a leggere questo argomento ghiotto, cosa
>>> è colessicografico ? conosco sololessocgrafico
>
>> https://user.fm/files/v2-ec4c1e79a9da4bdae36b98f3e545f036/Appunti08.png
> ok ma non capiscolo stesso scopo eapplicazioni

,----[ https://en.wikipedia.org/wiki/Lexicographic_order#Colexicographic_order ]
| In general, the difference between the colexicographical order and the
| lexicographical order is not very significant. However, when considering
| increasing sequences, typically for coding subsets, the two orders
| differ significantly.
|
| For example, for ordering the increasing sequences (or the sets) of two
| natural integers, the lexicographical order begins by
|
| 12 < 13 < 14 < 15 < ... < 23 < 24 < 25 < ... < 34 < 35 < ... < 45 < ...,
|
| and the colexicographic order begins by
|
| 12 < 13 < 23 < 14 < 24 < 34 < 15 < 25 < 35 < 45 < ....
|
| The main property of the colexicographical order for increasing
| sequences of a given length is that every initial segment is finite. In
| other words, the colexicographical order for increasing sequences of a
| given length induces an order isomorphism with the natural numbers, and
| allows enumerating these sequences. This is frequently used in
| combinatorics, for example in the proof of the Kruskal–Katona theorem.
`----

non so se nell'UDF è stata una scelta o un ripiego (perché in effetti
l'algoritmo è più semplice)

Zipper

unread,
Sep 17, 2022, 6:22:42 AM9/17/22
to
Sembra che issdr abbia detto :
>> The main property of the colexicographical order for increasing
>> sequences of a given length is that every initial segment is finite. In
>> other words, the colexicographical order for increasing sequences of a
>> given length induces an order isomorphism with the natural numbers, and
>> allows enumerating these sequences. This is frequently used in
>> combinatorics, for example in the proof of the Kruskal–Katona theorem.
> `----

> non so se nell'UDF è stata una scelta o un ripiego (perché in effetti
> l'algoritmo è più semplice)

certo, argomento degno di nota ma non ne conosco i dettagli.
invece, se ci riesco, vorrei farti una piccola esposizione algoritmica
del metodo che già escogitai molti anni fa, ampiamente implementato nel
mio PwerBasic, e solo recentemente trasposto in Excel.
Tale algoritmo, oltre ad essere generalizzato riesce ad essere
istantaneo, cioè non soffre del ritardo che in quella che tu chiami UDF
si genera se viene richiesta una posizione fra le ultime.
Nella fattispecie, se io cerco una posizione fra le 44milioni del
lotto, dovrò esaminare tutte le combinazioni, controllando
costantemente le stesse con un IF, e se cerco l'ultima ? si tratta di 2
o 3 secondi,ma per me che bado anche alla velocità è troppo.
Quindi dato che bisogna usare una macro tanto vale inserire una fuzione
che calcoli (in RAM) una tabella che contiene solo 450 dati, nel caso
del lotto le combinazioni di 90 numeri X i 5 della cinquina, e in tale
tabella virtuale (di 450 dati anzichè 44milioni) risulta istantaneo
trovare la combinazione, quale che essa sia.
Con tale situazione, che immagino tu recepisca, si scopre anche che un
numero di posizione, essendo unico e univoco rispetto alla combinazione
corrispondente, è la somma di 5 addendi di tipo combinadic.
cioè un numero (di posizione, alla condizione di sapere a quale insieme
N appartiene, e di quanti K elementi è costituito) potrà essere
scomposto in UN SOLO e UNICO modo( che mi porta anc'esso a ipotizzare
formule....)
credevi che io avessi finito qui ? macchè, manca l'esposizione
dell'algoritmo

issdr

unread,
Sep 17, 2022, 7:13:03 AM9/17/22
to
Zipper wrote:

> si tratta di 2 o 3 secondi,ma per me che bado anche alla velocità è
> troppo.

con certe potenze di calcolo, già il tuo loop è soddisfacente secondo
me: frazioni di secondo, che crescono fino a diventare secondi se si
esagera:

https://user.fm/files/v2-ea567467c753f20ee45001eb99a5488f/Excel_nCr_iter.mp4

la musica si sente male per la compressione, ma è in DSD256, altra
fatica per il sistema.

ovviamente sia la mentalità del risparmio che la soddisfazione di
imparare/fare hanno valore, ognuno fa le sue scelte.

se hai provato l'UDF "colex" vedi che è ancora più veloce

Zipper

unread,
Sep 17, 2022, 7:17:57 AM9/17/22
to
issdr ha pensato forte :

mi riscrivi il link esatto di questa colex ?

issdr

unread,
Sep 17, 2022, 7:42:22 AM9/17/22
to
Zipper wrote:

> issdr ha pensato forte :
>
> mi riscrivi il link esatto di questa colex ?

c'hai mesnews, risali di poco il 3ad, ultimo link del post, la UDF che
fa cicciare la pos della tavola colessicografica. se ti confonde
l'ordine dell'output, scrivi ai(i) = n al posto dell'assegnazione
originale

se metti la pos in A1, la chiami così:

=nomeudf(90;5;A1-1)+1

(sistemi discorso 0-based)

issdr

unread,
Sep 17, 2022, 7:57:38 PM9/17/22
to
Zipper wrote:

> Nella fattispecie, se io cerco una posizione fra le 44milioni del
> lotto, dovrò esaminare tutte le combinazioni, controllando
> costantemente le stesse con un IF, e se cerco l'ultima ? si tratta di
> 2 o 3 secondi,ma per me che bado anche alla velocità è troppo.

il padrino del combinadic ha un blog, c'è del codice ben leggibile, che
estrae le tuple ordinate lessicograficamente. l'ho portato in vba, si
comporta così:

https://user.fm/files/v2-193a86b36ccae992d38856ea3df2a296/

--8<---------------cut here---------------start------------->8---
Function unRank(n As Integer, k As Integer, pos As Long)
'Algoritmo di James D. McCaffrey.
'https://jamesmccaffrey.wordpress.com/2022/06/28/generating-the-mth-lexicographical-element-of-a-combination-using-the-combinadic/

Dim maxPos As Long
Dim ris() As Integer
ReDim ris(0 To k - 1)

maxPos = combR(n, k) - 1
If pos > maxPos Then Exit Function

a = n
b = k
x = maxPos - pos 'x è il "dual" di pos

For i = 0 To k - 1
ris(i) = piugrV(a, b, x) 'Funzione ausiliaria, vd. giù
x = x - combR(ris(i), b)
a = ris(i)
b = b - 1
Next

For i = 0 To k - 1
ris(i) = (n - 1) - ris(i)
Next

unRank = ris

End Function

Function piugrV(ByVal a As Integer, ByVal b As Integer, ByVal x As Long)
v = a - 1
While combR(v, b) > x
v = v - 1
Wend
piugrV = v
End Function

Function combR(ByVal n As Integer, ByVal k As Integer)
'La binomiale. McCaffrey usa una funzione iterativa (Choose),più
'prudente di questa.
If n >= 0 And n >= k Then combR = fattR(n) / (fattR(k) * fattR(n - k))
End Function

Function fattR(ByVal n As Integer)
If n > 0 Then fattR = n * fattR(n - 1)
If n = 0 Then fattR = 1
End Function
--8<---------------cut here---------------end--------------->8---

con i tipi che ho scelto e forse a causa della ricorsività del
fattoriale, per il lotto è giusto giusto (non va oltre la sestina)

Zipper

unread,
Sep 18, 2022, 3:38:18 AM9/18/22
to
Il 18/09/2022, issdr ha detto :

> https://user.fm/files/v2-193a86b36ccae992d38856ea3df2a296/

> con i tipi che ho scelto e forse a causa della ricorsività del
> fattoriale, per il lotto è giusto giusto (non va oltre la sestina)

Grazie dei tuoi contributi, forse questa materia piace anche a te
il mio interesse a Excel è abbastanza recente, per cui non sempre
riesco a posizionare e lanciare le function.
il mio interesse alle combinazioni risale ad almeno 25 anni fa, e un
giorno sforzandomi da solo ho concepito un algo che ho implementato in
PowerBasic, recentemente trasposto in Excel, che mi sembra più che
efficiente ed immediato.
C'è qualche sbavatura ma funziona egregiamente in quasi ogni condizione

---------------
Sub prova()
Dim N As Long, nn As Long, K As Long
Dim Posizione, r, cella

Posizione = Range("A1").Value: K = Range("A2").Value: N =
Range("A3").Value
Cells(4, 1) = cb(N, K)
Range("B1:R1").ClearContents
nn = 0: r = cb(N, K) - Posizione

For cella = 0 To K - 1
While r < cb(N - nn, K - cella): nn = nn + 1: Wend

'di questo semplice algoritmo la riga qui sopra è quella che in teoria
'dovrebbe far parte della famosa formula che cerco in sostituzione di
'macro e function

Cells(1, cella + 2) = nn
r = r - cb(N - nn, K - cella)
Next
Range("A1").Select
End Sub

Function cb(N As Long, K As Long) As Variant
Dim a As Long, comb As Variant
comb = 1: For a = 1 To K: comb = comb / a * (N - a + 1): Next: cb =
comb
End Function
-----------------
LEO

issdr

unread,
Sep 18, 2022, 8:37:40 AM9/18/22
to
Zipper wrote:

> il mio interesse alle combinazioni risale ad almeno 25 anni fa, e un
> giorno sforzandomi da solo ho concepito un algo che ho implementato in
> PowerBasic, recentemente trasposto in Excel, che mi sembra più che
> efficiente ed immediato.

vero, molto efficiente, bravo.

sulla base di quest'ultima tua sub, ti sto preparando un'UDF centrata
sul lotto. ho trovato un trucco che permette di accedere alle celle
diverse da quella in cui si piazza la formula, in modo da simulare lo
spillover (che è na roba utile, non da anziane signore) anche sulle
versioni storiche di excel. a breve ti passo il file; sulla riga singola
l'esecuzione è immediata, nonostante la mia "interfaccia" abbia un
overhead; mi farai sapere come va con i3/w7/2007

invece per il codice che ho portato in vba, metto qui la patch che lo
rende 1-based:

7c7
< ReDim ris(0 To k - 1)
---
> ReDim ris(1 To k)
9,10c9,13
< maxPos = combR(n, k) - 1
< If pos > maxPos Then Exit Function
---
> maxPos = combR(n, k)
> If pos > maxPos Or pos < 1 Then
> unRank = ""
> Exit Function
> End If
16c19
< For i = 0 To k - 1
---
> For i = 1 To k
23,24c26,27
< For i = 0 To k - 1
< ris(i) = (n - 1) - ris(i)
---
> For i = 1 To k
> ris(i) = n - ris(i)

issdr

unread,
Sep 18, 2022, 9:21:40 AM9/18/22
to
Zipper wrote:

> While r < cb(N - nn, K - cella): nn = nn + 1: Wend
>
> 'di questo semplice algoritmo la riga qui sopra è quella che in teoria
> 'dovrebbe far parte della famosa formula che cerco in sostituzione di
> 'macro e function

loop che chiama un loop. ho curiosato in vari angoli di excel, ma mi
sono sempre tenuto lontano dalle iterazioni (che per i fogli sono
bloccate di default)

qui c'è il tuo algoritmo utilizzabile come formula:

https://user.fm/files/v2-1e6bff2e9e69eb9b623a3bab6211e746/

Zipper

unread,
Sep 18, 2022, 10:21:46 AM9/18/22
to
issdr scriveva il 18/09/2022 :
sei molto bravo con i tuoi equiibrismi, non riesco a starti dietro, io
quando vedo che una cosa funziona lascio perdere,al massimo penso alla
velocità e alla semplicità, poi non ho tutti i tuoi strumenti, e perciò
mi limito a cercare...cercare in letteratura.
per esempio non ho capito gli snippets del tuo primo messaggio, e lo
scopo del mio algo utilizzabile come formula, cmq ripeto che sei ben al
di sopra di me

issdr

unread,
Sep 18, 2022, 11:24:00 AM9/18/22
to
Zipper wrote:

> sei molto bravo con i tuoi equiibrismi, non riesco a starti dietro, io
> quando vedo che una cosa funziona lascio perdere,al massimo penso alla
> velocità e alla semplicità

puoi utilizzare il tuo codice nelle formule, ecco l'obiettivo; credo sia
il miglior compromesso, ma magari verrò smentito anche su questo.

rispetto a dover chiamare una macro, si guadagna in flessibilità,
esempio (il vba è sempre quello):

https://user.fm/files/v2-d8f58558ddf8af6c6d41e6e8fb80e3e4/

lavori sul foglio, non devi non devi tornare sul codice per variare
qualcosa








Bruno Campanini

unread,
Sep 18, 2022, 2:10:43 PM9/18/22
to
issdr formulated on Sunday :
Anzi, qualunque cosa si scriva nel foglio Lex, come in un
qualunque altro si voglia creare, cambia tutti i parametri
e risultati di Lex.
Ed anche, diversi vengono riportati sul nuovo foglio.

Bellissimo, sembrano i "Bells and Whistles" dell'albero di Natale.

Bruno

Zipper

unread,
Sep 18, 2022, 3:01:06 PM9/18/22
to
Scriveva issdr nel messaggio
<87h714d...@ID-313311.news.uni-berlin.de>
indubbiamente interessante, grazie

issdr

unread,
Sep 18, 2022, 3:13:28 PM9/18/22
to
Bruno Campanini wrote:

> Anzi, qualunque cosa si scriva nel foglio Lex, come in un
> qualunque altro si voglia creare, cambia tutti i parametri
> e risultati di Lex.

quelle sono le formule rnd, nella prima colonna, per vedere l'effetto
che fa.

> Ed anche, diversi vengono riportati sul nuovo foglio.

non ti seguo, puoi spiegarmi?

l'escamotage dell'evaluate so che può dare qualche effetto indesiderato,
ma ho fatto vari test.

Bruno Campanini

unread,
Sep 18, 2022, 3:52:31 PM9/18/22
to
issdr explained :
Beh, fa' tu le prove.
Apri un nuovo foglio, scrivici qualcosa e guarda quel che succede
su Lex.
Chiudi il file, senza salvare; quando lo riapri sono cambiati
in Lex dati e risultati.
Non dovrebbe essere un virus... non ne ho mai visti né sentiti
di tal fatta.
Volevo in Lex, a fianco della tua tabella, riportarne altra
che ottenesse le combinazioni dati gli indici.
Appena scrivo una cella cambia tutto sulla tua tabella.

Bruno

issdr

unread,
Sep 18, 2022, 4:38:10 PM9/18/22
to
Bruno Campanini wrote:

> Apri un nuovo foglio, scrivici qualcosa e guarda quel che succede
> su Lex.
> Chiudi il file, senza salvare; quando lo riapri sono cambiati
> in Lex dati e risultati.
> Non dovrebbe essere un virus... non ne ho mai visti né sentiti
> di tal fatta.
> Volevo in Lex, a fianco della tua tabella, riportarne altra
> che ottenesse le combinazioni dati gli indici.
> Appena scrivo una cella cambia tutto sulla tua tabella.

ok, grazie per la segnalazione. quelli che descrivi sono gli effetti dei
numeri casuali generati dall'autoupdate del foglio, strana idiosincrasia
con il sistema utilizzato dalla UDF nella seconda colonna per scrivere
le altre; per ora non approfondisco. rimosse le formule random,
con numeri o formule d'altro tipo sembrerebbe ok

tolta anche la tabella utilizzata per avere le righe alternate,
sostituita da formattazione condizionale

https://user.fm/files/v2-f9cdfe55b5d4cfd6b0943e70f2c854c5/

Zipper

unread,
Sep 18, 2022, 4:46:12 PM9/18/22
to

issdr

unread,
Sep 18, 2022, 4:47:22 PM9/18/22
to

Zipper

unread,
Sep 18, 2022, 4:49:18 PM9/18/22
to
Scriveva issdr nel messaggio

Zipper

unread,
Sep 18, 2022, 4:49:58 PM9/18/22
to

Zipper

unread,
Sep 18, 2022, 5:00:28 PM9/18/22
to
Scriveva issdr nel messaggio
<87tu54b...@ID-313311.news.uni-berlin.de>
se cambio da 5 a 6 il K, spariscono i dati in 5 colonne e poi pare non
funzionare, magari dipende da me

issdr

unread,
Sep 18, 2022, 6:08:18 PM9/18/22
to
Zipper wrote:

> se cambio da 5 a 6 il K, spariscono i dati in 5 colonne e poi pare non
> funzionare, magari dipende da me

la funzione si chiama lotto, ho reso il 90 una costante e limitato le
colonne, valgono gli interi da 2 a 5 per il k, al di fuori di questo
intervallo la funzione non restituisce valori. faccio anche un controllo
sulla posizione richiesta, deve essere maggiore di zero e inferiore o
uguale a 90Ck, quindi se nella prima colonna lasci valori maggiori di
4005, passando agli ambi in quelle righe si crea il vuoto

Zipper

unread,
Sep 19, 2022, 3:06:43 AM9/19/22
to
issdr scriveva il 19/09/2022 :
hai ragione, ho letto della costante 90, ma visto che 5 dava 44milioni
e 6 dava 622milioni mi è scappato di pensare che potesse operare.
Bello

Ammammata

unread,
Sep 19, 2022, 3:13:21 AM9/19/22
to
Il giorno Fri 16 Sep 2022 07:42:50a, *Bruno Campanini* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tg12cq$429$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> Ne ho quasi 87 (1936).
>

mi fa sempre impressione trovare una mente così lucida alla tua età

è vero che ci sono letterati e scienziati illustri anche più vecchi ma
ancora attivi (vedi la capacità comunicativa di Piero Angela recentemente
scomparso)

poi penso a mio padre, quasi tuo coetaneo, che passati gli ottanta ancora
si dilettava a mettere mano (con successo) negli
elettrodomestici/apparecchi radio-tv/impianti elettrici alla ricerca di
guasti e altro, pur avendo studiato e lavorato come ragioniere

complementi ancora, continua a stupirci

Bruno Campanini

unread,
Sep 19, 2022, 5:15:35 AM9/19/22
to
Ammammata expressed precisely :
Che sia il diploma da Ragioniere...?
Grazie, grazie delle belle parole!

Bruno

issdr

unread,
Sep 19, 2022, 6:14:39 AM9/19/22
to
Bruno Campanini wrote:

>> poi penso a mio padre, quasi tuo coetaneo, che passati gli ottanta
>> ancora si dilettava a mettere mano (con successo) negli
>> elettrodomestici/apparecchi radio-tv/impianti elettrici alla ricerca
>> di guasti e altro, pur avendo studiato e lavorato come ragioniere
>>
>> complementi ancora, continua a stupirci
>
> Che sia il diploma da Ragioniere...?

lecito pensarlo, ce l'hanno le persone migliori che ho incrociato (e da
liceale mi scoccia un po' fare la constatazione)

issdr

unread,
Sep 19, 2022, 6:14:39 AM9/19/22
to
Zipper wrote:

> hai ragione, ho letto della costante 90, ma visto che 5 dava 44milioni
> e 6 dava 622milioni mi è scappato di pensare che potesse operare.

in quella cella c'è la predefinita COMBINAZIONE, è indipendente dalla
UDF e non ho messo una condizione legata a k in cella. avrei potuto
farti un tributo utilizzando cb al suo posto, non ci ho pensato



Bruno Campanini

unread,
Sep 19, 2022, 6:51:08 AM9/19/22
to
issdr has brought this to us :
Era una battuta...
Ma già che ci siamo, diciamocela tutta:
dopo Ragioneria ho fatto EC a Bologna.
Tu, dopo il liceo?

Bruno

issdr

unread,
Sep 19, 2022, 7:14:29 AM9/19/22
to
Bruno Campanini wrote:

> dopo Ragioneria ho fatto EC a Bologna.
> Tu, dopo il liceo?

economia politica, dove ho conosciuto molti ragionieri. matematica a
bizzeffe, pensavo di avere margine su di loro, invece alcuni hanno
colmato subito le lacune, pur non arrivando da corsi programmatori

casanmaner

unread,
Sep 19, 2022, 8:11:23 AM9/19/22
to
Il giorno giovedì 15 settembre 2022 alle 20:33:11 UTC+2 Bruno Campanini ha scritto:

>
> Come ti va vecchio volpone?

Insomma, molto di recente, è morto mio papà.
88 anni, assolutamente lucido, ma un tumore "fulminante" (a dicembre 2021 da precedenti lastre non si vedeva nulla e fine giugno invece era presente una massa importante che è andata aumentando ulteriormente fino a fine mese) me lo ha portato via.
A 55 anni suonati vivo la sensazione di essere orfano. Tale mi sento.

issdr

unread,
Sep 19, 2022, 9:00:38 AM9/19/22
to
casanmaner wrote:

> A 55 anni suonati vivo la sensazione di essere orfano. Tale mi sento.

credo non si sia mai veramente pronti... questa generazione poi è stata
la colonna per noi che siamo venuti dopo
It is loading more messages.
0 new messages