Sei sulla pagina 1di 5

DEV DEVeloping Software Solutions n.

155 novembre 2007

Algomatica del doctor Brom


di Maurizio Codogno
Se venti son pochi

Maurizio Codogno Matematico ormai perduto, si occupa di back-end per servizi multimediali presso Telecom Italia. Il suo sogno ` e diventare un Vero Tuttologo. I risultati possono essere visti nel suo sito: http://xmau.com

pubblicato su WWW.INFOMEDIA.IT stampa digitale da Lulu Enterprises Inc. stores.lulu.com/infomedia


Infomedia
` Infomedia e limpresa editoriale che da quasi venti anni ha raccolto la voce dei programmatori, dei sistemisti, dei professionisti, degli studenti, dei ricercatori e dei professori dinformatica italiani. Sono pi` di 800 gli autori che hanno realizzato per le teu state Computer Programming, Dev, Login, Visual Basic Journal e Java Journal, molte migliaia di articoli tecnici, presentazioni di prodotti, tecnologie, protocolli, strumenti di lavoro, tecniche di sviluppo e semplici trucchi e stratagemmi. Oltre 6 milioni di copie distribuite, trentamila pagine stampate, fanno di questa impresa la pi` grande ed u inuente realt` delleditoria specializzata nel campo della a programmazione e della sistemistica. In tutti questi anni le riviste Infomedia hanno vissuto della passione di quanti vedono nella programmazione non solo la propria professione ma unattivit` vitale e un vero a divertimento. ` Nel 2009, Infomedia e cambiata radicalmente adottando ` un nuovo modello aziendale ed editoriale e si e organizzata attorno ad una idea di Impresa Sociale di Comunit` , a partecipata da programmatori e sistemisti, separando le attivit` di gestione dellinformazione gestite da un board a comunitario professionale e quelle di produzione gesti` te da una impresa strumentale. Questo assetto e in linea con le migliori esperienze internazionali e rende Infomedia ancora di pi` parte della Comunit` nazionale degli u a sviluppatori di software. ` Infomedia e media-partner di manifestazioni ed eventi in ambito informatico, collabora con molti dei pi` imporu tanti editori informatici italiani come partner editoriale e fornitore di servizi di localizzazione in italiano di testi in lingua inglese.

Limpaginazione automatica di questa rivista e realizzata al ` 100% con strumenti Open Source usando OpenOffice, Emacs, BHL, LaTeX, Gimp, Inkscape e i linguaggi Lisp, Python e BASH

For copyright information about the contents of DEV, please see the section Copyright at the end of each article if exists, otherwise ask authors. Infomedia contents is 2007 Infomedia and released as Creative Commons 2.5 BY-NC-ND. Turing Club content is 2007 Turing Club released as Creative Commons 2.5 BY-ND. Le informazioni di copyright sul contenuto di DEV sono riportate nella sezione Copyright alla ne di ciascun articolo o vanno richieste direttamente agli autori. Il contenuto Infomedia e 2007 Infomedia e rilasciato ` con Licenza Creative Commons 2.5 BY-NC-ND. Il contenuto Turing Club e 2007 Turing Club e rilasciato ` con Licenza Creative Commons 2.5 BY-ND. Si applicano tutte le norme di tutela dei marchi e dei segni distintivi. ` E in ogni caso ammessa la riproduzione parziale o totale dei testi e delle immagini per scopo didattico purch e vengano integralmente citati gli autori e la completa identicazione della testata. Manoscritti e foto originali, anche se non pubblicati, non si restituiscono. Contenuto pubblicitario inferiore al 45%. La biograa dellautore riportata nellarticolo e sul sito www.infomedia.it e di norma quella disponibi` le nella stampa dellarticolo o aggiornata a cura dellautore stesso. Per aggiornarla scrivere a info@infomedia.it o farlo in autonomia allindirizzo http://mags.programmers.net/moduli/biograa

Algomatica del doctor Brom


di Maurizio Codogno > mcodogno@infomedia.it

Se venti son pochi


Le regole del Doctor Brom:

1.

Non si chiede di trovare la soluzione ai problemi, ma di scrivere un programma per trovarle. Lalgomatica ritiene che il cervello umano sia troppo importante per costringerlo a cercare le soluzioni a tentoni.

2.

I
>> 34

Il programma pu essere scritto in un qualunque linguaggio di programmazione: lalgomatica agnostica e non fa preferenze.

l doctor Brom non ama giocare a carte. Quando una volta gli chiesi la ragione di questa idiosincrasia, mi rispose che a suo parere la parte casuale legata al mischiare il mazzo di carte non permetteva di usare i metodi algomatici e quindi per definizione il gioco perdeva di interesse. Ecco perch mi sono stupito quando laltro giorno lo vidi con un mazzetto di carte in mano: per la precisione, le tredici carte di cuori. Un mazzo intero troppo grande per lalgomatica, vero: per se ci limitiamo a un solo seme si possono fare alcuni interessanti giochi. Per la precisione, il re non mi serve nemmeno: per questo gioco che ti propongo bastano le carte dallasso alla donna. Quelle numeriche hanno il loro valore da uno a dieci, il fante vale undici e la donna vale zero. C una sola cosa peggiore della misoginia di Brom ed la sua supponenza. Quando gli ho fatto notare come non fosse bello affermare

che una donna, anche se in un mazzo di carte, valga zero, si limitato ad alzare le spalle, dire Va bene. Prendi le carte dallasso al fante e il re, e fai valere zero il re. Adesso vuoi farmi continuare? Sono stato costretto ad abbozzare, mentre lui scartava con ostentazione la donna di cuori, mischiava le altre carte, e ne metteva sei su una fila e le altre su una fila separata. Queste prime sei carte sono le carte principali, mentre le altre sei sono le carte di scorta. Se cominci ad usare le tue dita e fai la somma dei valori delle carte principali, scopri che il totale 42. Adesso, io e te ci alterneremo nelle mosse. Ogni mossa consiste nello scambiare una di quelle carte con una di quelle di scorta, che abbia per un valore pi basso. Quindi si pu mettere ad esempio il nove al posto del fante, ma non del cinque. La somma dei punti delle carte principali diminuir ad ogni mossa: chi sar costretto a scendere sotto il 21, quindi da 20 in gi, avr perso. Chiaro?

3.

Dovete inviare il programma (sorgenti e se possibile i binari) allindirizzo algomatica@infomedia.it. Sono gradite delle considerazioni sugli algoritmi scelti, come scorciatoie teoriche utilizzate, tipo di rappresentazione dei dati, o altro ancora. Lalgomatica non sinonimo di forza bruta. Se possibile, inviate anche leseguibile in formato compresso.

4.

Il doctor Brom selezioner le soluzioni migliori, che saranno pubblicate e commentate nella rivista.

DEV > n.150 aprile 2007

Algomatica del doctor Brom

FIGURA 1

Le carte principali in una partita

La spiegazione era in effetti chiara e abbiamo giocato qualche partita. Nonostante ci siamo sempre alternati alla prima mossa, non so come ma ho perso quasi tutte le partite, mentre il sorriso sardonico del doctor Brom diventava sempre pi un sogghigno. Alla fine, quando il mio nervosismo stava crescendo sempre di pi, Brom si ripreso le carte, ha bofonchiato qualcosa tipo donna o non donna, non che le cose cambino molto... e mi ha detto Bene, magari i tuoi lettori potrebbero scrivere un programmino per giocare contro un essere umano. La grafica non importante: quello che conta che possa partire da una posizione qualunque, o generarsela se si preferisce, e giocare come primo o secondo giocatore. Per una volta, insomma, una sfida diversa dal solito! Boh, spero di riuscire a mettere su anchio un programmino e spero soprattutto che giochi meglio di me. Se proprio uno vuole usare le carte, lascer nel sito le carte dallasso al re di cuori, ma ripeto che la cosa non fondamentale. Vedremo tra un paio di mesi cosa succeder: intanto, buona programmazione!

visti i ritardi nella distribuzione di Dev, le risposte ai quesiti del numero 151 sono arrivate dopo che avevo gi inviato lo scorso numero della rubrica; a questo punto, in attesa che i tempi di distribuzione si stabilizzino, aspetto ad inserire le soluzioni per il numero 152 e mi dedico alle risposte del numero di maggio, che sono giunte da Andrea Pannitti, Marco Versari e Camillo Ferrari. Per quanto riguarda il problema del ciondolo (inserire i numeri da 1 a 8 nella configurazione della Figura 3 senza mettere due numeri consecutivi in caselle che si toccano) tutti e tre i solutori si sono accorti che non valeva affatto la pena di prendere un calcolatore e bastava notare che 1 e 8 dovevano per forza stare nelle due caselle centrali; a questo punto la posizione di 2 e 7 era fissata e non ci voleva molto a terminare la composizione e ad accorgersi che era unica a meno di rotazioni o riflessioni. Per il problema della stella, Andrea ha pensato bene di fare una ricerca su Google e trovare cos la fonte originale del problema. Di per s non ho nulla contro questo tipo di approccio, ma chiaro che nel nostro contesto dare la risposta non cos utile, visto che la parte pi interessante vedere come ci si arriva, al risultato. Per chi se lo fosse dimenticato,

Dev 151: le risposte


No, non ho sbagliato a scrivere il titolo. Semplicemente,

FIGURA 2

Le carte di scorta relative alla stessa partita

DEV > n.155 novembre 2007

35 <<

Algomatica del doctor Brom

il problema consisteva nellinserire i numeri da 1 a 16 nella configurazione della Figura 4 in modo che la somma dei numeri di ogni lato fosse uguale. Lapproccio di Marco, che ha scritto il programma corrispondente in Java, molto diretto: inizia a notare come il numero 16 pu trovarsi solamente in due posizioni distinte, vale a dire in un vertice o in mezzo ai lati. A questo punto costruisce man mano i lati gi iniziati, usando due classi ausiliarie che permettono di trovare tutte le coppie e le triple di valori che danno la somma necessaria, lavorando naturalmente con il backtrack tutte le volte che si arriva a un punto morto. Per la cronaca, il programma trova 98 soluzioni con il 16 in una punta e 126 con il 16 in mezzo a un lato, da dividere naturalmente per due in modo da eliminare quelle simmetriche. Potete trovare le tre classi Java scritte da Andrea nel sito, col nome stella.zip. Infine per quanto riguarda gli orecchini piramidali di Figura 5, dove bisognava inserire dei numeri tutti diversi nei vari spigoli in modo che la somma dei valori degli spigoli concorrenti su ciascun vertice fosse pari a 16, Andrea ha presentato un programma Java riciclando le classi Combinazioni e Permutazioni gi da lui preparate per i Righelli Numerici; trovate le sue classi nel sito, sotto il nome piramide-andrea.zip. Lalgoritmo presentato da Marco, salvato nel sito sotto il nome piramide-marco.zip un po pi sporco nella realizzazione, per dal mio punto di vista presenta un punto a suo favore. Marco infatti ha fatto un po di considerazioni a priori e si accorto che la somma dei valori assegnati a ciascuna coppia di spigoli obliqui della piramide necessariamente 8. Questo taglia molto il numero di operazioni necessarie per risolvere il problema e probabilmente permetterebbe anche di trovare una soluzione senza uso di calcolatore: unapplicazione dellalgomatica davvero interessante!

FIGURA 3

Il ciondolo

FIGURA 4

La stella

Download del progetto


Scarica il progetto completo di questo articolo all'indirizzo: ftp://ftp.infomedia.it/pub/DEV./Listati/Dev155/Algomatica.zip

Maurizio Codogno
Matematico ormai perduto, si occupa di back-end per servizi multimediali presso Telecom Italia. Il suo sogno diventare un Vero Tuttologo. I risultati possono essere visti nel suo sito: http://xmau.com

FIGURA 5

La piramide

>> 36

DEV > n.155 novembre 2007