queste sono le regole essenziali, il resto serve solo a gestire i casi
particolari e potete leggerlo con comodo qui:
https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
QUESITO 10
Faccio uno strappo al Regolamento ...
Verranno assegnati 5+3 punti (non cumulabili) in più anche per la
soluzione VBA (serve a me e Mauro :-)
Si gioca a Freccette!
da A1 a A20 inseriamo la formula
=CASUALE()
in B1:
=RANGO(A1:A10;A1:A10)
selezionare poi B1:B20 e confermare con Ctrl+Maiusc+Invio
otterremo la sequenza mischiata dei numeri da 1 a 20
in C1 sia un numero da 2 a 19 (a me interessa il 3)
Quesito:
in C2 voglio una formula che ottenga la somma dei quadrati di tutti i
k (valore in C1) elementi consecutivi
in altri termini ad esempio prendiamo questa serie casuale:
20 1 18 4 13 6 10 15 2 17 3 19 7 16 8 11 14 9 12
5
che poi è la serie del bersaglio delle freccette
si vuole ottenere (ad esempio per k=3):
(20+1+18)^2 + (1+18+4)^2 + (18+4+13)^ + ... + (5+20+1)^2 = 20478
non ci ho provato ... eventualmente è consentito usare colonne o celle
di appoggio (in questo caso per la breve sarà la somma delle formule
usate) ... ma se qualcuno propone una soluzione in singola cella
quella soluzione sarà comunque vincitrice ...
In VBA ovviamente una funzione che passandogli un numero intero di
elementi (20 nell'esempio) e k (3) restituisca una matrice con:
il totale calcolato come elemento (0)
la serie che l'ha generato negli altri posti liberi
tornando al bersaglio ...
v(0)=20478
v(1)=20
v(2)=1
v(3)=18
...
...
v(20)=5
Questa la funzione da integrare:
Function Quizzone_10(N_oggetti As Long, k As Long) As Long()
Dim res() As Long
ReDim res(N_oggetti)
'....
Quizzone_10 = res
End Function
in questo caso per i 3 punti verrà premiata la funzione più veloce
In bocca al lupo!
r
> da A1 a A20 inseriamo la formula
> =CASUALE()
> in B1:
> =RANGO(A1:A10;A1:A10)
è:
=RANGO(A1:A20;A1:A20)
per i punti specifico meglio ...
5 e 3 per formula excel come da regolamento
5 a chi posta la prima soluzione VBA funzionante e 3 a chi la fa più
veloce (per i test ci pensiamo)
non sono cumulabili i punteggi 5 e 5 ... e ... 3 e 3 ... quindi al
massimo uno può fare 8 ... per il resto tutto è valido
saluti
r
p.s. 2
qui le curiosità:
http://www.mathpages.com/home/kmath025.htm
... ci sono arrivato partendo da qui:
http://oeis.org/
digitando nella casella di ricerca:
20,1,18,4
oeis è molto interessante e ci sono arrivato da qui:
http://swtch.com/~rsc/
Russ Cox ...
a lui sono arrivato ... da ...
:-) va beh si fa troppo lunga ...
saluti
r
> per i punti specifico meglio ...
>
> 5 e 3 per formula excel come da regolamento
>
> 5 a chi posta la prima soluzione VBA funzionante e 3 a chi la fa più
> veloce (per i test ci pensiamo)
>
> non sono cumulabili i punteggi 5 e 5 ... e ... 3 e 3 ... quindi al
> massimo uno può fare 8 ... per il resto tutto è valido
> saluti
> r
acc... non ci avevo pensato ... 2 Vincitori ... 2 Nuovi quesiti? ...
:-)
r
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
QUESITO 10
Si gioca a Freccette!
ReDim res(N_oggetti)
'....
***************************
La serie è sempre di 20 numeri posti in B1:B20 e devono essere sommati a
gruppi di k, per poi elevarne al quadrato la somma.
Par di capire che quando si esauriscono i numeri si riutilizzano i primi
della serie (insomma come se fosse una serie circolare, giusto?)
Quindi i quadrati da sommare sono sempre 20, qualunque sia k.
E allora alla funzione basta passare k, invece passi anche un "N_Oggetti",
che è un long... e che è??
Mica è chiaro quello che chiedi...
Spiega spiega ...
E.
Inutile strizzarsi le meningi se non si ha chiaro cosa fare
Ci sentiamo stasera con calma, roby!
E. ;-)
Così aspettiamo anche noi chiarimenti e intanto tu mumble...mumble
elabori, smonti, assembli e prepari la risposta, ma chi credi di
fregare .... :-)))
Bye!
scossa
Cosě aspettiamo anche noi chiarimenti e intanto tu mumble...mumble
elabori, smonti, assembli e prepari la risposta, ma chi credi di
fregare .... :-)))
Bye!
scossa
************************
Acc... mi hai sgamato! :-|
E io che mi credevo furbo! :-)))
Va be' ci penseremo domani con calma...
Ciao,
E. ;-)
> La serie è sempre di 20 numeri posti in B1:B20 e devono essere sommati a
> gruppi di k, per poi elevarne al quadrato la somma.
> Par di capire che quando si esauriscono i numeri si riutilizzano i primi
> della serie (insomma come se fosse una serie circolare, giusto?)
si esatto ... dall'esempio mi pareva semplice da capire ... bastava
guardare l'ultima somma ... (5+20+1)^2 dove 5 è l'ultimo elemento e
20 1 sono i primi due
> Quindi i quadrati da sommare sono sempre 20, qualunque sia k.
esatto ... ma nel caso di k=1 e k=20 si ha la somma di 20 valori
uguali da qui l'intervallo 2 e 19 ... però potremo anche limitare a
10 ... poco importa dai
> E allora alla funzione basta passare k, invece passi anche un "N_Oggetti",
> che è un long... e che è??
per VBA vorreri una funzione un po' più generica da qui il fatto
d'avere un numero variabile di oggetti ... quindi gli oggetti saranno
i numeri da 1 a N_Oggetti (1,2,3,4,5 se N_Oggetti è 5) ... adesso la
function li dovrà mischiare e poi svolgere il calcolo ... restituendo
una matrice con il totale nell'indice 0 e i numeri nell'ordine
mischiato che ha prodotto il totale ...
> Mica è chiaro quello che chiedi...
Mica ti sei sforzato!
> Spiega spiega ...
sono qui per ulteriori eventuali chiarimenti
> E.
p.s.
per la formula la vedo dura ... però con uno o più appoggi è
abbastanza semplice ... quindi consiglio di provare una strada
costruendo una tabella ... da li sarà anche evidente se esiste una
strada percorribile senza appoggio.
saluti
r
Mica ti sei sforzato!
> Spiega spiega ...
> E.
p.s.
saluti
r
****************************
Beh... adesso hai detto cose che non potevamo immaginare da soli eh!! :-)
E poi non contribuisce a fare chiarezza l'esempio che fai. A me questa
sequenza:
20 1 18 4 13 6 10 15 2 17 3 19 7 16 8 11 14 9 12 5
con k = 3, da come risultato 21269 (e non 20478).
Se è giusto 20478, c'è qualcosa che non ho capito.
Ciao,
E.
> E poi non contribuisce a fare chiarezza l'esempio che fai. A me questa
> sequenza:
> 20 1 18 4 13 6 10 15 2 17 3 19 7 16 8 11 14 9 12 5
> con k = 3, da come risultato 21269 (e non 20478).
> Se è giusto 20478, c'è qualcosa che non ho capito.
> Ciao,
> E.
>
>
>
Chiedo venia. Ho controllato e sbagliavo io: è giusto 20478 :-((
Ok domani ci pensiamo!
'notte
E. ;-)
ma no figurati ... ora puoi venire via dai ceci :-)
> Ok domani ci pensiamo!
> 'notte
> E. ;-)
soluzione con due appoggi è semplicissima ...
la soluzione con una sola colonna di appoggio si fa ... per quella
senza appoggio la vedo dura ... però ora ci penso meglio.
ciao
r
questa serie è già meglio del bersaglio:
14
3
15
7
12
8
17
20
2
9
18
5
13
11
16
4
6
19
1
10
con 20420
:-) ... forte
aspetto la soluzione vba ... anzi intanto la scrivo ... per battere la
vostra più veloce :-) ... a tra due giorni ...
ciao
r
con la soluzione vba ho trovato questa:
20164
16
10
7
13
12
11
3
19
15
1
17
8
2
20
9
4
18
5
6
14
adesso la faccio girare tutta notte e domani mattina vediamo la
migliore che trovo ... aggiungiamo 3 punti alla soluzione con somma
più bassa per 20 elementi e k = 3 ... poi lasciamo aperta per sempre
la gara come per la formula più corta?
fate sapere ...
ciao e buona notte
r
fatto... ma quanti appoggi ....
sono tutto una stampella :-)
dati in B1:B20
lunghezza serie in C1
da D1 a W20 una tabella in cui:
D1=B1 D2=B2 .....D19=B19 D20=B20
E1=B2 E2=B3 .....E19=B20 E20=B1
ecc ecc fino a:
W=V2 W2=V3 .....W19=V20 W20=V1
a questo punto in D21:
=SOMMA(SCARTO(D1;;;$C$1))^2
e trascinare fino a W21
quindi in W22:
=SOMMA(D21:W21)
risultato 20478
ciao
volendo unire il tutto in un'unica formula:
=SOMMA(SCARTO(D1;;;$C$1))^2+SOMMA(SCARTO(E1;;;$C
$1))^2+SOMMA(SCARTO(F1;;;$C$1))^2+SOMMA(SCARTO(G1;;;$C
$1))^2+SOMMA(SCARTO(H1;;;$C$1))^2+SOMMA(SCARTO(I1;;;$C
$1))^2+SOMMA(SCARTO(J1;;;$C$1))^2+SOMMA(SCARTO(K1;;;$C
$1))^2+SOMMA(SCARTO(L1;;;$C$1))^2+SOMMA(SCARTO(M1;;;$C
$1))^2+SOMMA(SCARTO(N1;;;$C$1))^2+SOMMA(SCARTO(O1;;;$C
$1))^2+SOMMA(SCARTO(P1;;;$C$1))^2+SOMMA(SCARTO(Q1;;;$C
$1))^2+SOMMA(SCARTO(R1;;;$C$1))^2+SOMMA(SCARTO(S1;;;$C
$1))^2+SOMMA(SCARTO(T1;;;$C$1))^2+SOMMA(SCARTO(U1;;;$C
$1))^2+SOMMA(SCARTO(V1;;;$C$1))^2+SOMMA(SCARTO(W1;;;$C$1))^2
..... mah
decisamente meglio...
senza tabella ma solo usando l'elenco in B1:B20
in B21: =B1
in B22: =B2
=SOMMA(SCARTO(B1;;;$C$1))^2+SOMMA(SCARTO(B2;;;$C
$1))^2+SOMMA(SCARTO(B3;;;$C$1))^2+SOMMA(SCARTO(B4;;;$C
$1))^2+SOMMA(SCARTO(B5;;;$C$1))^2+SOMMA(SCARTO(B6;;;$C
$1))^2+SOMMA(SCARTO(B7;;;$C$1))^2+SOMMA(SCARTO(B8;;;$C
$1))^2+SOMMA(SCARTO(B9;;;$C$1))^2+SOMMA(SCARTO(B10;;;$C
$1))^2+SOMMA(SCARTO(B11;;;$C$1))^2+SOMMA(SCARTO(B12;;;$C
$1))^2+SOMMA(SCARTO(B13;;;$C$1))^2+SOMMA(SCARTO(B14;;;$C
$1))^2+SOMMA(SCARTO(B15;;;$C$1))^2+SOMMA(SCARTO(B16;;;$C
$1))^2+SOMMA(SCARTO(B17;;;$C$1))^2+SOMMA(SCARTO(B18;;;$C
$1))^2+SOMMA(SCARTO(B19;;;$C$1))^2+SOMMA(SCARTO(B20;;;$C$1))^2
ancora....
dati in B1:B20
lunghezza serie in C1
iterazioni numero massimo 20
in D1: =D1+1
in D2: =SOMMA(SCARTO(INDIRETTO("B"&D1);;;$C$1))^2 matriciale
in D3: =SE(VAL.ERRORE(D3);D2;D3+D2)
PS non trovo un modo più furbo di far cambiare il riferimento iniziale
dello scarto e sommare i 20 gruppi
il fatto che io non lo trovi non vuol dire che non c'è
chi mi dice come si fa?
buonanotte
Scritta in fretta ...
'---------------------------
Function Quizzone_10(N_oggetti As Long, k As Long) As Long()
Dim res() As Long
Dim arr()
Dim v As Long
Dim j As Long
Dim cum As Long
Dim n As Long
Dim n_1 As Long
Dim AnyChanges As Boolean
Dim BubbleSort As Long
Dim SwapFH As Variant
Dim SwapFH2 As Variant
n_1 = N_oggetti + 1
ReDim res(1 To n_1)
ReDim arr(1 To N_oggetti, 1 To 2)
For v = 1 To N_oggetti
arr(v, 1) = Rnd()
arr(v, 2) = v
Next
Do
AnyChanges = False
For BubbleSort = LBound(arr) To UBound(arr) - 1
If (arr(BubbleSort, 1) > arr(BubbleSort + 1, 1)) Then
SwapFH = arr(BubbleSort, 1)
SwapFH2 = arr(BubbleSort, 2)
arr(BubbleSort, 1) = arr(BubbleSort + 1, 1)
arr(BubbleSort, 2) = arr(BubbleSort + 1, 2)
arr(BubbleSort + 1, 1) = SwapFH
arr(BubbleSort + 1, 2) = SwapFH2
AnyChanges = True
End If
Next BubbleSort
Loop Until Not AnyChanges
For v = 2 To n_1
res(v) = arr(v - 1, 2)
Next
ReDim Preserve res(1 To N_oggetti + k)
For n = 1 To k - 1
res(n_1 + n) = res(n + 1)
Next
For v = 2 To n_1
j = 0
For n = 0 To k - 1
j = j + res(v + n)
Next
cum = cum + (j ^ 2)
Next
res(1) = cum
Quizzone_10 = res
End Function
'------------------------
Selezionare 21 colonne (D1:X1) 3 digitare =Quizzone_10(20;3) da
confermare con ctrl+maiusc+invio
Bye!
scossa
Ecco le mie roposte:
1. VBA:
----------------------
Function Quizzone_10(Nog As Long, k As Long) As Long()
Application.Volatile
Dim res() As Long, lav() As Long
Dim i As Long, j As Long, p As Long
Dim T As Long, TT As Long
ReDim res(0 To Nog), lav(1 To Nog * 2)
For i = 1 To Nog: res(i) = i: Next
For i = 1 To Nog
j = Int(Rnd * Nog) + 1
p = res(j): res(j) = res(i): res(i) = p
Next
For i = 1 To Nog
lav(i) = res(i)
lav(i + Nog) = res(i)
Next
For i = 1 To Nog
For j = 1 To k
T = T + lav(i + j - 1)
Next
TT = TT + T ^ 2
T = 0
Next
res(0) = TT
Quizzone_10 = res
End Function
----------------------
2. Excel
----------------------
In B21:: =B1 da trascinare sino a B40 (o anche solo B39)
In D1:: =SOMMA(SCARTO(B1;;;$C$1))^2 da trascinare sino a D20
In C2:: =SOMMA(D1:D20)
----------------------
Ho fatto girare la funzione VBA per cercare una combinazione che minimizzi
il totale ed ho trovato questa che scende al di sotto di 20000:
8
20
5
7
19
3
11
15
6
13
9
12
16
2
10
17
1
14
18
4
19976
Ciao,
E. :-)
On 10 Mag, 17:34, r <robb....@gmail.com> wrote:
errata corrige:
> da A1 a A20 inseriamo la formula
> =CASUALE()
> in B1:
> =RANGO(A1:A10;A1:A10)
č:
=RANGO(A1:A20;A1:A20)
per i punti specifico meglio ...
5 e 3 per formula excel come da regolamento
5 a chi posta la prima soluzione VBA funzionante e 3 a chi la fa piů
veloce (per i test ci pensiamo)
non sono cumulabili i punteggi 5 e 5 ... e ... 3 e 3 ... quindi al
massimo uno puň fare 8 ... per il resto tutto č valido
saluti
r
-------------------------------------------------------------------------------------------
No, senza un appoggio non mi viene.
Allora:
in C2:
=SE(RIF.RIGA()>$C$1+20;"";SOMMA(SCARTO($B$1;RESTO(RIF.RIGA(A1)-1;20);;$C$1))^2)
da copiare in basso fino alla riga 30 (in funzione del valore in C1)
in C31: =somma(C2:C30)
ciao paoloard
http://www.riolab.org
poi rispondo a tutti ...
per excel mi sembra che la stessa soluzione sia stata proposta da
Andrea.
E' anche la soluzione che subito avevo pensato io e credo sia la più
efficiente.
una soluzione senza trascinare da b21 è fattibile (Andrea ci sta
provando ora vado a dargli un suggerimento) ...
per la function ... ora studio la tua e quella di scossa ...
pensavo ... seguitemi:
voglio trovare la disposizione che minimizzi la somma dei quadrati ok?
bene quante sono le disposizioni? se non sbaglio
2.432.902.008.176.640.000 ... quindi provarle tutte credo sia
un'impresa titanica ... anche se sarebbe carino avere tutti i file con
tutte le possibili disposizioni ...
quindi una routine che partendo da una serie mischia in modo casuale
le *carte* ... per renderla più veloce pensavo di ciclare una sola
modifica (random) e il calcolo in altri termini prendo una carta delle
vendi scelta casualmente tra la prima e la diciannovesima e la scambio
con la carta in posizione 20 ... e calcolo solo la parte delle due
somme che sono interessate ... cosa ne penssate?
chiudo con ... la serie migliore ...
complimenti plinius! io questa notte ho fatto girare una routine e
questa mattina avevo ottenuto solo un 20030
quindi cosa facciamo i 3 punti li lasciamo aperti su questa strada?
ciao
r
ciao paoloard
http://www.riolab.org
----------------------------------------------------------------
dimenticavo, piů in generale per un numero di righe imprecisate:
in C2:
=SE(RIF.RIGA()>CONTA.SE($A:$A;">0")+$C$1;"";SOMMA(SCARTO($B$1;RESTO(RIF.RIGA(A1)-1;CONTA.SE($A:$A;">0"));;$C$1))^2)
in D1: =somma($C:$C)-C1
ciao paoloard
http://www.riolab.org
mi sa che non hai capito ...
ciao
r
allora ... un consiglio ... la prima formula quella che usa i valori
che vengono trascinati in basso ...
=SOMMA(SCARTO(D1;;;$C$1))^2
togli l'elevamento a potenza ...
va bene ... ora tieni solo i valori in b1:b20 e cancella le formule
aggiunte sotto
trascinando quella formula (facciamo il caso che k=3) avrai i primi 18
risultati buoni ... poi il risultato in riga 19 avrà 2 dei 3 valori e
il risultato in riga 20 avrà uno dei tre valori ... in altra colonna
scrivi una formula che restituisca 0 per le prime 18 righe e per le
ultime due restituisca il primo e i primi due valori (B1 e B2) ... ora
in una terza colonna fai la somma delle due colonne e elevi al
quadrato ogni somma ...
fatto questo sarà facile unire tutto in una sola colonna di
appoggio ...
la soluzione senza appoggio ... ci ho pensato ... forse ... forse ...
bah ... devo provare a scrivere ...
saluti
r
p.s.
dai per la vittoria serve solo un passettino in più!
ciao
r
********************************
In effetti pensavo anch'io ad una strategia per arrivare più rapidamente a
valori migliori e ero "quasi" sulla tua stessa linea, ma un po' diversa.
Ora ci studio un po' e poi riferisco! :-)
Ciao,
E.
ripeto ... mi sa che non hai capito ... la serie è circolare ....
leggi tutte le risposte ... oppure guarda l'esempio che ho postato
all'inizio:
20 1 18 4 13 6 10 15 2 17 3 19 7 16 8 11 14 9 12
5
che poi è la serie del bersaglio delle freccette
si vuole ottenere (ad esempio per k=3):
(20+1+18)^2 + (1+18+4)^2 + (18+4+13)^ + ... + (5+20+1)^2 = 20478
vedi quel (5+20+1)^2 è l'ultima somma
la penultima è:
(12+5+20)^2
ora è chiaro?
ciao
r
On 11 Mag, 11:05, "paoloard" <xxp...@alice.it> wrote:
> "paoloard" ha scritto nel messaggionews:iqdivn$cpq$1...@dont-email.me...
>
> "r" ha scritto nel
> messaggionews:1bd90148-249a-4e95...@l14g2000pro.googlegroups.com...
>
> On 10 Mag, 17:34, r <robb....@gmail.com> wrote:
> errata corrige:
>
> > da A1 a A20 inseriamo la formula
> > =CASUALE()
> > in B1:
> > =RANGO(A1:A10;A1:A10)
>
> č:
> =RANGO(A1:A20;A1:A20)
>
> per i punti specifico meglio ...
>
> 5 e 3 per formula excel come da regolamento
>
> 5 a chi posta la prima soluzione VBA funzionante e 3 a chi la fa piů
> veloce (per i test ci pensiamo)
>
> non sono cumulabili i punteggi 5 e 5 ... e ... 3 e 3 ... quindi al
> massimo uno puň fare 8 ... per il resto tutto č valido
> saluti
> r
> -------------------------------------------------------------------------------------------
>
> No, senza un appoggio non mi viene.
> Allora:
> in C2:
> =SE(RIF.RIGA()>$C$1+20;"";SOMMA(SCARTO($B$1;RESTO(RIF.RIGA(A1)-1;20);;$C$1))^2)
> da copiare in basso fino alla riga 30 (in funzione del valore in C1)
> in C31: =somma(C2:C30)
>
> ciao paoloardhttp://www.riolab.org
> ----------------------------------------------------------------
>
> dimenticavo, piů in generale per un numero di righe imprecisate:
> in C2:
> =SE(RIF.RIGA()>CONTA.SE($A:$A;">0")+$C$1;"";SOMMA(SCARTO($B$1;RESTO(RIF.RIGA(A1)-1;CONTA.SE($A:$A;">0"));;$C$1))^2)
>
> in D1: =somma($C:$C)-C1
>
> ciao paoloardhttp://www.riolab.org
ripeto ... mi sa che non hai capito ... la serie č circolare ....
leggi tutte le risposte ... oppure guarda l'esempio che ho postato
all'inizio:
20 1 18 4 13 6 10 15 2 17 3 19 7 16 8 11 14 9 12
5
che poi č la serie del bersaglio delle freccette
si vuole ottenere (ad esempio per k=3):
(20+1+18)^2 + (1+18+4)^2 + (18+4+13)^ + ... + (5+20+1)^2 = 20478
vedi quel (5+20+1)^2 č l'ultima somma
la penultima č:
(12+5+20)^2
ora č chiaro?
ciao
r
-------------------------------------------------
Ok la serie č circolare. Io l'ho ricreata aggiungendo delle righe che
replicano i primi n valori 1 o 2 o 3 ecc a seconda del valore di C1.
Perché non la provi prima di buttarmi via :-)
ciao paoloard
http://www.riolab.org
Ok ... 5 punti sono tuoi!!!! appena riesco inizio ad aggiornare la
classifica ... tu sei escluso dalla soluzione per i 5 punti di
excel ... potrai partecipare invece per entrambi i 3 punti ...
però ragazzi dovete rispondermi alla domanda ...
2 vincitori -> 2 nuovi quesiti?
ciao
r
la soluzione con righe in più da B21 in poi è già stata data da
Andrea ... e poi da Plinius ...
la tua non va ... anche prolungando da B21 ... forse non capisco
io ... boh
Aggiungo la formula di cella D1 che non poresuppone la replica dei dati da
B21 in giù:
=SOMMA(SCARTO(B1;;;$C$1);SE(RIF.RIGA()+$C$1>21;SCARTO($B$1;;;RIF.RIGA()+$C$1-21)))^2
Ciao,
E.
potrebbe esserci un algoritmo più efficiente ... consideriamo il
valore medio delle triplette partendo dalla soluzione migliore
ottenuta ... e cerchiamo di migliorarlo modificando (random) la
tripletta che ha una media più bassa ... che dici? ... devo prendere
carta e penna!
bene!
accorcia!
per ora sei il vincitore della parte 2 ... che ne dici ora di una
soluzione senza appoggio ... per te si può?
servirebbe un matrice prodotto molto fantasioso ... forse con un
nome ...
Per un $ in meno... ;-)
=SOMMA(SCARTO(B1;;;$C$1);SE(RIF.RIGA()+$C$1>21;SCARTO(B$1;;;RIF.RIGA()+$C$1-21)))^2
*****************************
Avevo invece in mente...
da una qualunqua combinazione si può arrivare a qualunque altra combinazione
attraverso passi successivi che consistano in un solo scambio.
Partendo da una serie completa di 20 elementi (ottenuta random) gli scambi
possibili sono solo 190.
Strategia: provarli tutti e 190 e selezionare la nuova combinazione col
totale minore.
Ripartire da questa con una identica operazione.
Penso sia una buona metodica...
dai non fare il tirchio ... via quei dollari di troppo!
> Ripartire da questa con una identica operazione.
ma così non ottieni le 190 di prima?
> Ripartire da questa con una identica operazione.
ma cosě non ottieni le 190 di prima?
**************************
No, no. Se la prima volta scambio la 1 con la 2 e nella seconda tornata
scambio la 3 con la 4, ottengo una combinazione che da quella iniziale (con
un solo scambio) non avrei potuto avere.
Insomma scambio dopo scambio, sicuramente posso arrivare a una qualunque
combinazione tra quelle esistenti. Solo che io mi sposto dall'una all'altra
solo se č conveniente e, cosě, riduco enormemente il numero di ipotesi da
analizzare.
Voglio provare...
sarò opportunista:
=SOMMA(SCARTO(B1;;;C$1);SE(RIF.RIGA()+C$1>21;SCARTO(B$1;;;RIF.RIGA()+C
$1-21)))^2
ecco, bravo! benvenuto nel club! :-)
come diceva plinius un po' di post fa in altro 3d ...
Curioso come a volte le vie siano del tutto obbligate.
La tua formula coincide perfettamente con la mia, carattere per
carattere!!
:-)
Per ora a te i 3 punti!
saluti
r
On 11 Mag, 11:24, "paoloard" <xxp...@alice.it> wrote:
cut
>
> Ok la serie è circolare. Io l'ho ricreata aggiungendo delle righe che
> replicano i primi n valori 1 o 2 o 3 ecc a seconda del valore di C1.
> Perché non la provi prima di buttarmi via :-)
>
> ciao paoloardhttp://www.riolab.org
la soluzione con righe in più da B21 in poi è già stata data da
Andrea ... e poi da Plinius ...
la tua non va ... anche prolungando da B21 ... forse non capisco
io ... boh
--------------------------------------------------------
no no, non va, hai ragione tu. Sorry.
ciao paoloard
http://www.riolab.org
sarò opportunista:
=SOMMA(SCARTO(B1;;;C$1);SE(RIF.RIGA()+C$1>21;SCARTO(B$1;;;RIF.RIGA()+C
$1-21)))^2
**********************************
Non sei opportunista, è così che si gioca!
Hai fatto bene a punirmi! Bravo Andrea!
Così starò più attento... forse... :-))
Ciao,
Enrico
Dunque, riferisco!
Il sistema funziona abbastanza bene e in una frazione di secondo arriva al
risultato migliore ottenibile da una determinata di partenza creata random.
Ho provato un numero abbastanza elevato di volte e finora il miglior
risultato ottenuto č... guarda caso... 19874 con questa sequenza:
8
7
18
5
9
19
2
10
20
1
12
17
3
13
14
4
15
11
6
16
Che sia davvero il minimo possibile? Presumo (non ne sono affatto certo) di
sě!!
Sarebbe da far girare per un po' la sub, ma dubito davvero che si possa fare
di meglio.
Questa č la sub, per chi volesse provare:
-----------------------------------
Sub SelBest()
Dim f As Worksheet
Dim res() As Long, resT() As Long
Dim i As Long, j As Long, p As Long, x As Long, y As Long, n As Long
Dim Nog As Long, k As Long
Dim T As Long, TT As Long
Nog = 20: k = 3
ReDim res(0 To Nog), resT(1 To (Nog / 2 * (Nog - 1)), 0 To Nog)
Set f = ThisWorkbook.Worksheets("Foglio1")
f.Range("H1:H30").Clear
For i = 1 To Nog: res(i) = i: Next
For i = 1 To Nog
j = Int(Rnd * Nog) + 1
p = res(j): res(j) = res(i): res(i) = p
Next
For x = 1 To Nog
For y = 0 To k - 1
T = T + res(IIf(x + y > Nog, x + y - Nog, x + y))
Next
TT = TT + T ^ 2
T = 0
Next
res(0) = TT
TT = 0
Do
For i = 1 To Nog - 1
For j = i + 1 To Nog
n = n + 1
For x = 0 To Nog
resT(n, x) = res(x)
Next
p = resT(n, j): resT(n, j) = resT(n, i): resT(n, i) = p
For x = 1 To Nog
For y = 0 To k - 1
T = T + resT(n, IIf(x + y > Nog, x + y - Nog, x + y))
Next
TT = TT + T ^ 2
T = 0
Next
resT(n, 0) = TT: TT = 0
Next
Next
n = 0: p = 1
For x = 2 To Nog / 2 * (Nog - 1)
If resT(x, 0) < resT(p, 0) Then p = x
Next
If resT(p, 0) >= res(0) Then Exit Do
For x = 1 To 20
f.Cells(x, 8) = resT(p, x)
Next
f.Cells(28, 8) = resT(p, 0)
For x = 0 To Nog
res(x) = resT(p, x)
Next
Loop
f.Cells(22, 8) = "Ricerca terminata"
End Sub
--------------------------------------------
Ciao,
E.
ho una matriciale in singola cella!!!!!!!!!!!!!
la posso postare :-)
r
questa notte girerà a casa mia :-)
r
L'ho lanciata a tempo indeterminato.
Ho scritto in N28 18874 e l'ho lanciata con questa!
------------------
Sub prova()
Dim fa As Range, fo As Range
Set fa = ThisWorkbook.Worksheets("Foglio1").Range("h28")
Set fo = ThisWorkbook.Worksheets("Foglio1").Range("n28")
Do
SelBest
Loop Until fa.Value < fo.Value
End Sub
-------------------
Finora (e penso anche dopo) nulla! :-)
Ciao,
E.
e non è nemmeno da confermare con ctrl+maiusc+invio :-)
è bella davvero!
:-)
che figata ottenerla!
r
Che intendi? Quello che chiedeva Paolo altrove e per la qual cosa suggerivo
l'espediente (tuo) delle iterazioni?
E sei riuscito a farlo senza iterare?
Spiega... e posta!! :-)
pulita pulita!
posso?
dai ditemi di si anche se non sono passati 2 giorni :-)
L'avevo lanciato con <= 18874 e ne ha trovato un altro... ma meno nisba!!
Già detto di postare!! :-))
Ma che 2 giorni dici? Non ti sarai ubriacato di regolamenti?
un'altro divero?
posta la serie dai
r
eccola:
=SOMMA(MATR.PRODOTTO((RIF.COLONNA(A:AL)<RIF.RIGA(1:20)+C1)*(RIF.COLONNA(A:AL)>=RIF.RIGA(1:20));MATR.PRODOTTO(--
(RIF.COLONNA(A:T)=(RESTO(RIF.RIGA(1:38)-1;20))+1);B1:B20))^2)
che dici? bella o no?
:-)
*************************
diverso solo apparentemente.
Se lo consideri circolare è lo stesso.
ah ok :-)
ora bisogna accorciarla ...
facile che si possa ... io non ci ho ancora provato o la testa troppo
aggrovigliata :-)
r
L'ho piantata in una cella qualunque e mi dà #VALORE!
Ma cosa hai in C1??
in C1 c'è k
e in B1:B20 i 20 numeri disposti casualmente casualmente ...
che c'è che non va?
provata su excel 2003 e 2007 ... funziona ...
*********************************
È solo che non avevo capito una mazza di ciò di cui parlavi.
Pensavo tutt'altra cosa (mi riallacciavo ad una domanda che faceva Paolo
qualche giorno fa...).
Verissimo funziona!!
Fammi studiare ora... :-)
mi hai fatto prendere un colpo!
:-)
****************************
Il colpo viene a me per cercare di capirla... che mostro che sei!! :-)
difficile capire così ... devi farti delle tabelle ... se vuoi questa
sera ti mando un file che chiarisce ...
comunque da tutta sta storia ci tiro fuori un articolo ... :-)
è una formula che mi sta elettrizzando!
la seconda matrice non mi veniva ... ma è fantastica nella sua
semplicità e tira fuori da b1:b20 la serie di 38 valori proprio come
li vogliamo con =B1 messo in B21 e trascinato ...
vado a questa sera ... che tiriamo le somme anche sui prossimi quiz!
ciao!
r
*******************
Ho intuito la logica, ma effettivamente stargli dietro senza crearsi le
tabelle delle matrici è arduo.
Ora devo andare anch'io, ma il file stasera mandamelo, così non impazzisco!
Ciao,
E :-)
veramente inavvicinabile
:-)
Non saprei, io comunque avrei pronto il Quiz n. 11 :-)
Bye!
Scossa
Già l'ho detto: voi due non siete mica "normali" :-))
Bye!
scossa
> > Il colpo viene a me per cercare di capirla... che mostro che sei!! :-)
>
> Già l'ho detto: voi due non siete mica "normali" :-))
l'hai detta giusta ... perchè io sarò anche un mostro ... ma
quell'altro è mica più bello di me :-)
saluti
r
accipicchia! bene ... però aspetta un attimo perchè io mi devo ancora
riprendere ... devo aggiornare la classifica, e i file ... poi rimane
da stabilire ... si insomma ho vilato l'art.3 :-) ...
in verità Scossa ... fai pure! ... magari sulla scorta di quanto fatto
da plinius puoi specificare quando lo posterai ... io in quest'ultimo
non l'ho fatto perchè ho agito d'impulso ... l'ho fatto per Mauro che
deve bruciare un paio di macchine e non sapeva come fare :-)
insomma .... viva il Quizzone libero ... fai quel che vuoiiiiii :-)
ho messo i file rnd_1.xls e rnd_1.xlsx alla pagina:
https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel/quesiti
magari interessa anche ad altri ...
ciao
r
p.s.
risulta credo semplice rendere variabile anche l'intervallo dei
numeri ... che potremo definire con un nome ... si domani lo faccio
Ok, allora lo pubblico dopo le 17:00 di oggi.
Intanto lubrificate le celle di excel :-)
Bye!
scossa
avrei una riunione ... ma ... alle 17.30 :-)
>
> Intanto lubrificate le celle di excel :-)
cacchio! ho messo l'olio e si è fulminato tutto! SCOSSA!
>
> Bye!
> scossa
ciao e a dopo
r
****************************
È affascinante questa formula, non avevo mai pensato a seguire quel tipo di
percorso.
Confermo: sei un mostro!
Ho scaricato il file ma già ieri sera avevo iniziato a ragionarci sopra e
penso che ci sia spazio per accorciare un po'.
Hai fatto girare la ricerca della combinazione stanotte? Se sì sono certo
che il muro sia quello, me lo confermi?
Al quizzone di oggi sarò fuori e tornerò verso le 19, Vuol dire che giocherò
al gioco del taglione, se mi lasciate qualcosa da rosicchiare eh eh.
Ciao,
E.
è affascinante, si!
io ieri non ci stavo più nella pelle ...
la cosa che fa più piacere e condividere queste stupidate con chi sei
sicuro saprà apprezzarle :-)
> Ho scaricato il file ma già ieri sera avevo iniziato a ragionarci sopra e
> penso che ci sia spazio per accorciare un po'.
avanti allora! io l'ho detto ieri, ho ancora la testa
aggrovigliata :-)
>
> Hai fatto girare la ricerca della combinazione stanotte? Se sì sono certo
> che il muro sia quello, me lo confermi?
no, provo ... questa sera ... poi riferisco ...
non ho ancora avuto tempo nemmeno di leggere attentamente la macro ...
ma stai certo che lo faccio!
>
> Al quizzone di oggi sarò fuori e tornerò verso le 19,
peggio per te :-)
> Vuol dire che giocherò
> al gioco del taglione, se mi lasciate qualcosa da rosicchiare eh eh.
qualcosa da rosicchiare c'è ... quasi sempre :-)
>
> Ciao,
> E.
ciao
r
questa la formula generalizzata con un nome rng che definisce la serie
circolare (anche dinamicamente) e k che indica di quanti elementi
consecutivi deve essere la somma quadrata ...
=SOMMA(MATR.PRODOTTO((RIF.COLONNA(SCARTO($A
$1;;;;RIGHE(rng)*2))<RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)))
+k)*(RIF.COLONNA(SCARTO($A$1;;;;RIGHE(rng)*2))>=RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng))));MATR.PRODOTTO(--(RIF.COLONNA(SCARTO($A
$1;;;;RIGHE(rng)))=(RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2))-1;RIGHE(rng)))+1);rng))^2)
saluti
r
> Hai fatto girare la ricerca della combinazione stanotte? Se sì sono certo
> che il muro sia quello, me lo confermi?
cavoli!
la sto facendo girare ora e si assesta subito su valori sotto
20000 ... nel giro di pochi minuti ha trovato 19874 fantastico!
ancora di più considerando che perde un sacco di tempo per
scrivere ... vuol dire che è l'algoritmo giusto!
per scrupolo provo questa notte a lanciarlo ... magari tolgo la
scrittura nel foglio giusto per farla viaggiare un po' di più ...
poi riferisco
Ciao
r
difficile capire cosě ... devi farti delle tabelle ... se vuoi questa
sera ti mando un file che chiarisce ...
comunque da tutta sta storia ci tiro fuori un articolo ... :-)
-----------------------------------------------------------
hey vulcano! che ne dici se duplichiamo l'articolo su RIO? ovviamente alle
solite condizioni.
-- fai sapere
ciao paoloard
http://www.riolab.org
questa la formula generalizzata con un nome rng che definisce la serie
circolare (anche dinamicamente) e k che indica di quanti elementi
consecutivi deve essere la somma quadrata ...
=SOMMA(MATR.PRODOTTO((RIF.COLONNA(SCARTO($A
$1;;;;RIGHE(rng)*2))<RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)))
+k)*(RIF.COLONNA(SCARTO($A$1;;;;RIGHE(rng)*2))>=RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng))));MATR.PRODOTTO(--(RIF.COLONNA(SCARTO($A
$1;;;;RIGHE(rng)))=(RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2))-1;RIGHE(rng)))+1);rng))^2)
saluti
r
****************************************
Pensando ad usare una matrice quadrata 20x20, sono a questo punto.
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1. metodo: riempio di 1 la metą destra alta del quadrato tagliato sulla
diagonale, poi azzero l'angolo bianco alto destro, infine aggiungo (somma di
matrice) l'angolino sinistro basso di 1 degli sforamenti.
=SOMMA(MATR.PRODOTTO((RIF.RIGA(1:20)<=RIF.COLONNA(A:T))*(RIF.RIGA(1:20)>RIF.COLONNA(A:T)-C1)+(RIF.RIGA(1:20)>20+RIF.COLONNA(A:T)-C1);B1:B20)^2)
(143 caratteri)
2. metodo: definisco come 1 la zona di zeri compresa tra la parte normale e
quella degli sforamenti, quindi la sottraggo a 1 per invertirla.
ora non resta che azzerare l'angolo bianco in alto a destra
=SOMMA(MATR.PRODOTTO((1-(RIF.RIGA(1:20)>RIF.COLONNA(A:T))*(RIF.RIGA(1:20)<=20+RIF.COLONNA(A:T)-C1))*(RIF.RIGA(1:20)>RIF.COLONNA(A:T)-C1);B1:B20)^2)
(147 caratteri)
E questa č la formula generalizzata con nomi "rng" e "k" in C1:
=SOMMA(MATR.PRODOTTO((RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)))<=RIF.COLONNA(SCARTO($A$1;;;;RIGHE(rng))))*(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)))>RIF.COLONNA(SCARTO($A$1;;;;RIGHE(rng)))-k)+(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)))>RIGHE(rng)+RIF.COLONNA(SCARTO($A$1;;;;RIGHE(rng)))-k);rng)^
(278 caratteri)
Ora devo correre alla Peugeot... ciao!! :-))
E.
così si risparmia tutti i *ridimensionamenti* ...
in un quadrato ci sta tutto!
non consumi il doppio delle righe!
Ma certo!
... e sei un grande!
:-)
rimane interessante anche l'ampliamento della matrice che tanto mi ha
entusiasmato ...
tutto è estremamente interessante ... matrice prodotto si conferma una
funzione tra le più potenti
GRAZIE!
saluti
r
la tua da 143 caratteri è secondo me perfetta e non è tagliabile ne
migliorabile ...
però quella generalizzata la preferisco così:
=SOMMA(MATR.PRODOTTO((RIF.RIGA(rng)<=MATR.TRASPOSTA(RIF.RIGA(rng)))*(RIF.RIGA(rng)>MATR.TRASPOSTA(RIF.RIGA(rng))-
k)+(RIF.RIGA(rng)>RIGHE(rng)+MATR.TRASPOSTA(RIF.RIGA(rng))-k);rng)^2)
non capisco perchè ... ma da confermare con ctrl+maiusc+invio
però non è un problema dovrebbe essere anche più efficiente visto che
evita tutti gli scarti ...
saluti
r
ora faccio il punto ...