Quadrato Magico S&P

Il forum di Base5, dove è possibile postare problemi, quiz, indovinelli, rompicapo, enigmi e quant'altro riguardi la matematica ricreativa e oltre.

Moderatori: Gianfranco, Bruno

Lucignolo
Livello 4
Livello 4
Messaggi: 169
Iscritto il: mar apr 14, 2020 8:47 am

Re: Quadrato Magico S&P

Messaggio da Lucignolo »

per mischiare qualsiasi quantità suggerisco un metodo molto veloce e affidabile
metto un esempio per mischiare 52 carte e lo confronto con quello che hai usato

Dim c
Dim x
Dim Numero(52)
Dim b(52)
Dim Memo

'MISCHIARE IL CLASSICO MAZZO DI CARTE DA 52
Randomize
For c = 1 To 52
Numero(c) = c
Next

'MISCHIO CON METODO CLASSICO
conto1 = 0 'Conto operazioni necessarie
For M = 1 To 52
10: x = 1 + Int(Rnd * 52)
b(M) = Numero(x)
conto1 = conto1 + 2
For N = 1 To M - 1
conto1 = conto1 + 1
If b(M) = b(N) Then GoTo 10
Next N
Next M


'MISCHIO CON LO SWAP perfetto per grandi quantità
conto2 = 0
For c = 1 To 52
x = 1 + Int(Rnd * 52)
Memo = Numero(x)
Numero(x) = Numero(c)
Numero(c) = Memo
conto2 = conto2 + 4
Next

print conto1 ; " > " ; conto2

Pasquale
Livello 11
Livello 11
Messaggi: 2559
Iscritto il: mer mag 25, 2005 2:14 am

Re: Quadrato Magico S&P

Messaggio da Pasquale »

Ho preferito il random che mi sfornava combinazioni, spesso anche ripetute, ma in modo continuo e veloce. Mentre il pc lavorava, prelevavo una quantità x di combinazioni da esaminare a mano, trasferendola su altro supporto, tipo ad esempio word.
Terminato l'esame delle combinazioni da esaminare, ne prelevavo altre, scartando tutte quelle con risultato di somma maggiore o uguale al minimo del precedente esame, aggiustando quindi le condizioni imposte alla routine.
In pratica, le terzine le ho fatte a mano, ma abbastanza velocemente, anche perché il testo del quissss chiedeva di fare in tal senso anche di più. Riporto un esempio di procedimento con l'esame dei seguenti output derivanti dall'impostazione della routine:

8 2 14 21 5 20 7 10 18 - 35 840
8 10 5 20 3 27 2 12 24 - 37 720
10 18 20 2 14 21 5 8 7 - 35 840
7 10 14 18 5 15 6 12 21 - 36 1260
28 7 24 6 14 5 10 2 15 - 37 840
14 5 7 20 8 2 21 18 10 - 35 840
3 20 7 5 21 8 28 10 6 - 36 840


Mentre la routine continua a lavorare, intanto esamino una parte dei risultati casuali sfornati in pochi secondi (ogni riga contiene 9 papabili numeri non quadrati, oltre un terzo della loro somma e la radice cubica del loro prodotto (la routine tira fuori solo combinazioni di 9 numeri che possano consentire tali dati).

Esaminiamo la prima riga per verificare se veramente è possibile sistemare quei 9 numeri in modo che consentano quanto si vuole (le 3 somme uguali ed i tre prodotti uguali)
Qualunque sia una terzina, comunque deve esistere un valore pari ad esenpio a 35-20=15 (intanto scrivo 20) ed a questo punto gli altri 2 numeri devono essere tali che la loro somma sia pari a 15. Vediamo che fra i 9 numeri, tolto il 20 già acquisito, il 15 è dato dalla somma di 8+7, o anche 5+10. Dunque ho due possibili terzine contenenti il 20:

20 20
08 10
07 05

Una seconda terzina deve contenere per forza 35-21 = 14 e procedendo come sopra, noto che non esiste una coppia di numeri la cui somma sia pari a 14.
A questo punto non devo fare altro, deducendo che i 9 numeri di cui trattasi non producono una valida soluzione.

Passo quindi alla seconda novina (si dice così?), che guarda caso contiene 37 come terza parte della somma dei 9 numeri e 720 come radice cubica del prodotto dei 9 numeri :

dunque: 37-27=10(8+2 ) e dunque abbiamo la prima terzina:

27
08
02

Procedo con 37-24=13(8+5 e 10+3). La prima somma non è accettabile, perché contiene l'8 già utilizzato e dunque è d'obbligo la seconda che produce la terzina

24
10
03

Continuo con 37-20=17(12+5). Bene, ho trovato 3 terzine con la stessa somma 37 e con i 9 numeri tutti diversi:

27 - 24 - 20
08 - 10 - 12
02 - 03 - 05

Dobbiamo adesso vedere se è possibile trovare i 3 prodotti uguali a 720, che deve essere il prodotto di 3 terzine orizzontali (necessita comunque avere a disposizione una piccola calcolatrice con memoria e richiamo memoria, altrimenti i tempi si allungano):

Dunque: 720/27=26,66666..... (mi fermo subito qui, deducendo che i 9 numeri esaminati non sono utili al nostro scopo).

In sostanza, procedendo in tal modo, in quinta riga trovo:

28 7 24 6 14 5 10 2 15 - 37 840

37-28=9(7+2) - terzina 28-7-2
37-24=13((7+6 o 15+2) ...........nessuna delle 2 terzine è valida, perché contenengono il 7 ed il 2 già utilizzati

Nel frattempo la routine ha tirato fuori una caterva di altre "proposte" di soluzione, che non ho tutte esaminate, cercando nel mucchio prima quelle con primo più basso.

Sono quindi giunto in breve tempo alla combinazione:

6 5 10 28 20 21 2 12 7 - 37 840 e dunque:

37-28=9(7+2) terzina 28 7 2
37-21=16(10+6) terzina 21 10 6
37-20=17(10+7 o 12+5) terzine 20 10 7 oppure 20 12 5 (scarto la prima contenente il 10 già utilizzato nella seconda terzina). Dunque:

28 21 20
07 10 12
02 06 05

Cerchiamo i prodotti:

840/28=30(6x5) terzine contenenti 28 6 5 da sistemare però nell'ordine giusto, condiderate le terzine di somma già incasellate
840/21=40(20*2) terzine con 21 20 2
840/12=70(10*7) terzine con 12 10 7

Guardando alla prima incasellatura con le somme e tenendo conto delle terzine da prodotto, decido di scambiare nella seconda colonna il 21 con il 6 ed in terza colonna il 20 con il 5, ottenendo in tal modo una soluzione valida.

A questo punto non mi è restato che cercare altra soluzione con somma più bassa (31, 29, 23...), imponendo apposita condizione nella routine e diminuendo anche i numeri da esaminare. Infatti, se una terzina fosse composta appena da 2 e 3, se volessimo una somma 31, il terzo numero non potrebbe superare il 26.
Comunque, al fin della vicenda, altre valide soluzioni con somma minore del 37 il random non ha voluto sfornare.
_________________

\text {     }ciao Immagine ciao
E' la somma che fa il totale (Totò)

Rispondi