[RISOLTO] Quadrati magici: Procedimento logico-matematico

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
M_A_W_ 1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 856
Iscrizione: venerdì 15 febbraio 2013, 3:57
Desktop: KDE
Distribuzione: SuSE
Sesso: Maschile
Località: Un luogo geometrico
Contatti:

Re: Procedimento logico-matematico

Messaggio da M_A_W_ 1968 »

Che è successo all'ultima? Il solito intervento a tradimento dell'elfo dello smartphone? Errore di cut&paste?
Ah sì, vedo: il primo numero dell'ultima riga è 19, non solo 9. Le solite banalità, anzi è andata già benissimo che ci sia un unico refuso. :lol:

Comunque il procedimento è davvero elementare, ragazzi: sia quello costruttivo che, di conseguenza, quello risolutivo. Ormai dovete esserci arrivati da soli...
Sì, un blog ce l'ho perfino io: gli è che mi manca il tempo...

"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: Procedimento logico-matematico

Messaggio da gila75 »

Io ho risolto solo il secondo. Primo e terzo hanno doppioni (non so se è un'errore)

Codice: Seleziona tutto

19 14  0 12 24
11  0 25 18 15
 0 22 10 16 21
17 20 23  0  9
22 13 11 23 0
Somma righe e colonne 69. Ma non con il metodo che dici tu MAW.
Continuo a rileggere ma non capisco molto cosa intendi...pazienza.

Certo...che sei davvero stringato con le spiegazioni... :D non mastico quotidianamente queste cose...
Mi fai sentire un ritardato mentale ah ah ah !!! :D
Avatar utente
M_A_W_ 1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 856
Iscrizione: venerdì 15 febbraio 2013, 3:57
Desktop: KDE
Distribuzione: SuSE
Sesso: Maschile
Località: Un luogo geometrico
Contatti:

Re: Procedimento logico-matematico

Messaggio da M_A_W_ 1968 »

Animo ragassuoli, il tempo scarseggia e voglio costringervi ad aguzzare l'ingegno...

In ogni caso, ad usum delphini, ve lo squaderno qui.

1) Si parte da un quadrato magico (perché abbiamo sottomano un buon generatore, e poco tempo da perdere) di lato pari e quindi diabolicus, sapendo comunque che va benissimo anche un sottoprodotto ossia una qualsiasi permutazione di righe e colonne di un quadrato magico ortodosso. Per rendere meno noioso e banale il tutto, scegliamo possibilmente un quadrato non standard, cioè i cui ospiti non siano rigidamente vincolati alla sequenza di naturali [1, n^2] dove n è ovviamente il lato, ovvero un quadrato non a somma minima.
Si notino le somme di riga e colonna riportate a margine, tutte corrispondenti alla costante del quadrato o somma magica.

Codice: Seleziona tutto

16  8 19 14 -> 57
11 22  7 17 -> 57
 9 15 13 20 -> 57
21 12 18  6 -> 57
-----------
57 57 57 57
2) Scegliamo una configurazione di zeri per trasformare la matrice in una (n+1)*(n+1). Attenzione! Gli zeri devono occupare posizioni simmetriche rispetto alla diagonale principale. La banale dimostrazione è lasciata come barboso esercizio per il lettore.

Codice: Seleziona tutto

 0 .. .. .. ..
.. ..  0 .. ..
..  0 .. .. ..
.. .. ..  0 ..
.. .. .. ..  0
3) Riscriviamo banalmente la matrice inserendo gli zeri.

Codice: Seleziona tutto

00 16  8 19 14 -> 57
11 22 00  7 17 -> 57
 9 00 15 13 20 -> 57
21 12 18 00  6 -> 57
.. .. .. ..  0
--------------
41 50 41 39 57
4) Ovviamente manca una riga! I valori crescono col quadrato di n e noi, pur passando da una matrice 4x4 ad una 5x5, abbiamo aggiunto solo 5 valori dei 25 - 16 = 9 mancanti.
Si nota che abbiamo perturbato le somme di colonna (tranne l'ultima) inserendo gli zeri e spostando le altre locazioni. L'ultima riga si ricava quindi, in modo assolutamente ovvio, per differenze dalla somma magica. Ad esempio, per la prima colonna, A(5,1) = 57 - (11 + 9 + 21) = 16 e così via per tutti gli altri valori. Inutile aggiungere che la riga delle differenze potrebbe artatamente essere inserita per intero in qualsiasi altra posizione della matrice, per tentare di confondere ulteriormente le acque, purché si rispetti il vincolo di simmetria nella posizione della cella azzerata.

Codice: Seleziona tutto

00 16  8 19 14 -> 57
11 22 00  7 17 -> 57
 9 00 15 13 20 -> 57
21 12 18 00  6 -> 57
16  7 16 18 00 -> 57
--------------
57 57 57 57 57
5) Per terminare, si inseriscono dei valori totalmente arbitrari al posto degli zeri.

Codice: Seleziona tutto

26 16  8 19 14 -> 57 + 26 = 83 (d)
11 22 24  7 17 -> 57 + 24 = 81 (b)
 9 27 15 13 20 -> 57 + 27 = 84 (e)
21 12 18 23  6 -> 57 + 23 = 80 (a)
16  7 16 18 25 -> 57 + 25 = 82 (c)
--------------
83 84 81 80 82
 d  e  b  a  c
Potremmo e dovremmo fermarci qui (come in effetti fanno quasi tutti i testi di ludomatematica, combinatorica, matematica discreta nei quali questo è uno dei primi esercizi o una nota a margine delle spiegazioni sui magic squares) notando semplicemente il modo in cui vengono perturbate le somme: l'elemento estraneo inserito in A(i,j) modifica ovviamente di una pari quantità la somma della riga i e della colonna j, con i e j opportuni indici entro la matrice data. Il procedimento è banalmente reversibile, soprattutto negli schemi più semplici, nei quali i valori alieni sono volutamente tutti distinti.

Tale banale procedimento costruttivo spiega formalmente la semplice proprietà che rende possibile la veloce euristica trovata da OP e riportata un po' ovunque in letteratura, e dunque costituisce la soluzione preferenziale per l'intera famiglia di quesiti assimilabili a quello proposto. L'unico elemento minimamente degno di nota, alla fine dei conti, è la simmetria della configurazione perturbante, che altera "ma non troppo" i 36 pattern magici di somma del quadrato dato (se si parte da un vero magic square) e comunque le due direttrici fondamentali di propagazione della costante magica.

Visto l'andamento del thread, direi però di analizzare per passi anche la soluzione scolastica più pedissequa proponendo l'algoritmo più ottuso disponibile per la risoluzione.

1) Si calcolano i totali di riga (e colonna, già che ci siamo) e si individua il valor minimo, qui evidenziato tra [].
Nel caso non fosse sufficientemente ovvio, è d'uopo rimarcare che la scelta di operare sulla somma di riga minima è del tutto arbitraria ed esemplificativa, per fissare le idee. Si può tranquillamente applicare il medesimo procedimento a qualsiasi altra somma di riga (o colonna).

Codice: Seleziona tutto

26 16  8 19 14 -> 83
11 22 24  7 17 -> 81
 9 27 15 13 20 -> 84
21 12 18 23  6 -> [80]
16  7 16 18 25 -> 82
--------------
83 84 81 80 82
2) Si sottraggono ordinatamente a tale somma minima tutti i valori presenti nella corrispondente riga.

Codice: Seleziona tutto

80 - 21 = 59
80 - 12 = 68
80 - 18 = 62
80 - 23 = 57
80 -  6 = 74
3) Si procede per tentativi sottraendo ordinatamente ognuno dei valori differenza appena calcolati dagli altri totali di riga e ricercando nella riga corrispondente al totale considerato il valore del nuovo delta. Se mai questo forum implementasse finalmente il supporto a Latex, non sarei costretto a questi assurdi giri perifrastici, quando basta una formuletta con cinque simboli a spiegare tutto in modo perfetto e non ambiguo. :muro:
Iniziamo dal totale della prima riga, 83:

Codice: Seleziona tutto

83 - 59 = 24 -> non presente nella riga (26 16 8 19 14)
83 - 68 = 15 -> non presente nella riga (26 16 8 19 14)
83 - 62 = 21 -> non presente nella riga (26 16 8 19 14)
83 - 57 = 26 -> presente nella riga alla posizione (1,1)
80 - 57 = 23 alla posizione (4,4)
4) Avendo trovato un valore effettivamente esistente nella riga data, e quindi anche il potenziale intruso nella riga a somma minima, si procede in modo analogo sottraendo il potenziale valore di somma magica dagli altri totali di riga e cercando per ognuna il valore risultante:

Codice: Seleziona tutto

81 - 57 = 24 -> presente nella riga alla posizione (2,3)
84 - 57 = 27 -> presente nella riga alla posizione (3,2)
82 - 57 = 25 -> presente nella riga alla posizione (5,5)
5) Avendo individuato quattro differenze effettivamente presenti alle righe corrispondenti, siamo a questo punto certi di avere riottenuto il valore magico di partenza.

Codice: Seleziona tutto

00 16  8 19 14 -> 57
11 22 00  7 17 -> 57
 9 00 15 13 20 -> 57
21 12 18 00  6 -> 57
16  7 16 18 00 -> 57
--------------
57 57 57 57 57
L'implementazione dell'algoritmo scolastico (valido unicamente ai fini didattici) in un qualsiasi linguaggio di programmazione è lasciata come futile esercizio per il lettore.
Sì, un blog ce l'ho perfino io: gli è che mi manca il tempo...

"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2842
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [RISOLTO] Quadrati magici: Procedimento logico-matematic

Messaggio da rai »

Grazie a tutti
Non saprei che altro dire :birra:
Avatar utente
M_A_W_ 1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 856
Iscrizione: venerdì 15 febbraio 2013, 3:57
Desktop: KDE
Distribuzione: SuSE
Sesso: Maschile
Località: Un luogo geometrico
Contatti:

Re: [RISOLTO] Quadrati magici: Procedimento logico-matematic

Messaggio da M_A_W_ 1968 »

L'importante è che tu abbia chiarito i dubbi e compreso il meccanismo di "andata" e di "ritorno" dal quadrato semimagico sotteso a codesto genere di quesiti... :D
Sì, un blog ce l'ho perfino io: gli è che mi manca il tempo...

"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: [RISOLTO] Quadrati magici: Procedimento logico-matematic

Messaggio da gila75 »

Ora leggo bene.
MAW... però... da bravo :D . Non era così banale la cosa. Magari per te.
Comunque, al di la di tutto, molto interessante e grazie (anche se l'autore del 3d non sono io) della spiegazione ;)
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: [RISOLTO] Quadrati magici: Procedimento logico-matematic

Messaggio da gila75 »

MAW: puoi spiegare anche come si crea un offset dal 4X4 classico?

Codice: Seleziona tutto

16  8 19 14 -> 57
11 22  7 17 -> 57
 9 15 13 20 -> 57
21 12 18  6 -> 57
-----------
57 57 57 57
Qui ho un offset di 23 (57-34) rispetto al canonico magico 4x4.
Ma non posso certo mettere a caso il "di più".
In prima posizione abbiamo 16, con offset di 4 rispetto allo standard che è 12, ma poi 8 che è uguale al 4x4.
In poche parole, come li giri, li metti ogni riga ha un offset di 23.
Ma per rispettare righe colonne e diagonali, bisogna seguire regole.
Noto anche che

Codice: Seleziona tutto

 0 .. .. .. ..
.. ..  0 .. ..
..  0 .. .. ..
.. .. ..  0 ..
.. .. .. ..  0
se seguo il tuo schema ho sempre offset di 4 rispetto all'originale.
Insomma non è poi così intuitivo nemmeno l'offset a quanto pare
EDIT: forse è perchè non so come si costruisce un quadrato magico. In fase di costruzione si aggiunge l'offset ad ogni passaggio.
Mi documento
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 14 ospiti