Home    About me    Publications    Blog    Undergrad memories

Fabio Ruini's blog

'cause Italians blog better

Archivio per dicembre, 2011

Eternity II Clue Puzzle 1 – The pieces

Post piuttosto veloce quello di oggi, dato che i festeggiamenti per l’ultimo dell’anno (ed in particolare una bottiglia di Prosecco di Conegliano in frigo da giorni) incombono. Prima di farvi i miei auguri, aggiorno brevemente sul discorso Eternity II – Clue Puzzle 1 iniziato alcuni giorni fa. In mattinata ho lavoricchiato un altro po’ sul codice, implementando sia un viewer che permette di visualizzare graficamente una soluzione del puzzle generata dal software, sia una funzione di contorno che, in corrispondenza di ogni intersezione tra le varie tessere, provvede a mostrare un certo simbolo a seconda che la “connessione” sia corretta o meno.

L’effetto risultante e’ questo. Che trovo ottimo.

Per chi volesse a sua volta fare qualche esperimento, allego a questo post un po’ di materiale. Questa e’ l’immagine dalla quale sono partito, con tutti i pezzi disposti sul tabellone ordinati in base al numero di tessera e nel loro orientamento “standard”.

All’interno dell’archivio qui sotto potete invece trovare le 36 tessere ritagliate, ridimensionate a 100-by-100px e disposte secondo tutti e quattro gli orientamenti possibili.

Questo e’ quanto. Auguri a tutti!

Share

Eternity II Clue Puzzle I – An intelligent (?) solver: work in progress

Come preannunciato nel post di ieri, mi sono dedicato praticamente full time allo sviluppo di un piccolo software in grado di risolvere il Clue Puzzle 1 di Eternity II. Lo sviluppo procede spedito e, come si puo’ vedere nello screenshot che segue, ho gia’ avuto modo di implementare una sorta di GUI in C++/Qt, nonché diverse funzioni sottostanti.

Al momento il software e’ in grado innanzitutto di cercare una soluzione valida (ovvero con tutti i pezzi contenenti i bordi esterni disposti in maniera corretta) al puzzle con un approccio a forza bruta. Approccio che per inciso pare non funzionare, dato che anche lasciando girare per diversi minuti il programma e testare qualche milione di soluzioni possibili, pare siano necessari tempi biblici anche solo per creare una soluzione valida. Dato questo insuccesso, ho creato un’altra funzionalità che, partendo da una disposizione possibile (trovata a mano dal sottoscritto) dei pezzi che costituiscono il bordo, provvede a distribuire in maniera random (sia per collocazione, sia per orientamento) le rimanenti 16 tessere. Grazie all’aggiunta di un pezzo di codice in grado di calcolare il punteggio di una data soluzione (che, lo ricordo, e’ data dal numero totale di facce uguali adiacenti tra loro), e’ stato semplice creare un’ulteriore funzione che permette di reiterare il procedimento fino a quando una soluzione che totalizza più di x punti non e’ stata individuata. Da quelle che sono le prime prove che ho svolto velocemente nel pomeriggio , poche migliaia di iterazioni (decisamente meno di un paio di minuti di calcolo sul mio laptop) sono sufficienti per generare soluzione da 50/51 punti.

Ad integrazione del post di ieri (a proposito… il pezzo di codice postato e’ stato aggiornato causa un errore nella codifica della tessera 15 individuato in extremis), pubblico qui di seguito alcune immagini che dovrebbero chiarire meglio cosa sono quelle decorazioni alle quali mi riferivo con nomi astratti:

Questa sera si procedera’ ad un po’ di sano debugging, poi domani all’implementazione di un viewer grafico e delle varie funzioni di contorno. In attesa di partire il prima possibile con la parte davvero divertente.

Share

Eternity II

Con un paio di giorni di ritardo rispetto a quando il calendario diceva che stava cadendo il boxing day 2011, anche per il sottoscritto e’ stata l’ora di un po’ di sano shopping. Shopping che, giusto per rimanere in tema con i post degli ultimi giorni, ha avuto carattere ludico. Entrato per una perlustrazione all’interno di un negozio di giocattoli, mi sono soffermato sul reparto giochi da tavolo, dove non ho potuto fare a meno di mettere nel carrello la Plymouth Edition di Monopoly. Nonche’ lui, Eternity II, il puzzle a cui avevo pensato sin dal momento della sua uscita ma che poi, per un motivo o per l’altro, non avevo mai avuto modo di acquistare.

Per chi non lo conoscesse, basti sapere che si tratta di un puzzle dal funzionamento molto semplice. 256 tessere, ciascuna di esse con un particolare disegno sui quattro lati, da disporre all’interno di un tabellone 16×16 in maniera tale che tutte le tessere abbiano i disegni che “matchino” con quelli delle tessere adiacenti. Per quanto il meccanismo sia semplice e lineare, il problema e’ uno di quelli NP-complete e la dimensione dello spazio delle soluzioni e’ qualcosa nell’ordine di dieci alla seicentosessantuno (senza tuttavia tener presente alcuni vincoli, per esempio il fatto che alcune tessere devono essere necessariamente poste lungo i bordi esterni del tabellone) (vedi Codebrain.co.uk per una spiegazione un po’ più approfondita). Cio’ esclude la possibilità’ di risolvere il puzzle via brute-force e richiede che strategie alternative vengano individuate. Originariamente i produttori del gioco avevano messo in palio un premio di $2,000,000 per chiunque fosse riuscito a trovare la soluzione al puzzle. Il concorso, scaduto il 31 dicembre 2010, si e’ concluso senza alcun vincitore.

Avendo in questi giorni un po’ di tempo a disposizione, mi sono subito messo al lavoro per provare a scrivere un software in grado, tramite algoritmi evolutivi, di tentare perlomeno di approssimare una soluzione corretta. Per farlo non sto utilizzando la versione completa di Eternity II, ma una più ridotta (il Clue Puzzle 1) composta da 36 pezzi da disporre su di una griglia 6×6.

Il primo problema che ci si pone nel momento in cui si voglia approcciare il problema per via informatica e’ naturalmente quello dell’encoding. Ho quindi provveduto a mappare le varie tessere ed il risultato potete vederlo nell’estratto di codice qui sotto. I parametri passati al costruttore degli oggetti “piece” sono rispettivamente: numero della tessera, orientamento, disegno sul lato nord, disegno sul lato est, disegno sul lato sud, disegno sul lato ovest, presenza di almeno un bordo (si’/no), tessera già utilizzata (si’/no) per la generazione della soluzione corrente.

Ora si tratta “soltanto” di scrivere qualche funzione in grado di generare soluzioni valide per il puzzle nei tempi piu’ rapidi possibili (magari tenendo fissi i bordi ed isolando quelle tessere dal resto dell’euristica?) e poi scrivere un algoritmo evolutivo che provi ad evolvere popolazioni di potenziali soluzioni verso il punteggio più alto possibile (data una soluzione, ogni disegno che combacia vale un punto).

Insomma, avrò di che divertirmi nei prossimi giorni…

Share

Natale plymouthiano

Dopo quattro anni trascorsi in terra inglese e’ infine giunta l’ora di passarvi anche le vacanze natalizie. Non tanto per una questione di volontà, quanto piuttosto per motivi decisamente più pragmatici. Il passaporto del piccolo Samuel non e’ infatti arrivato nei tempi previsti (grazie, di cuore, consolato italiano) e ci siamo così ritrovati impossibilitati a viaggiare. Cio’ non ha comunque tolto a Sammy l’ebbrezza (pur condizionata dalla limitata comprensione che un bimbo di tre mesi puo’ avere riguardo a ciò che lo circonda) di un Natale come si rispetti. Con tanto di alberello, calza appesa al camino (che si’, magari e’ più da Epifania che non da Natale, ma che per qualche motivo ha su scritto “My first Christmas”) ed un sacco di regali belli impacchettati. Nonche’ un costume da babbo natale nuovo di zecca.

L’esperienza e’ stata per alcuni versi fin educativa. Mai avevo prima d’ora avuto l’occasione di “gustarmi” in diretta il il tradizionale videomessaggio natalizio della regina (comico il logo “a cura di Sky HD” che comprare al termine della trasmissione), quest’anno dedicato in gran parte alle famiglie dei soldati britannici dislocati all’estero. Ed e’ proprio con questo video che auguro a tutti i lettori un buon Natale.

Share

iPad, iCade ed iMAME: tutti insieme senza jailbreak

Quando si dice alle volte il caso. Durante la pausa pranzo di oggi, della quale ho approfittato per fare un po’ di acquisti natalizi, ho fatto l’errore strategico di entrare in un negozio specializzato in gadget. Gira di qua, gira di la’, l’occhio e’ inevitabilmente caduto sull’iCade, il case per iPad dal look & feel retro’ tipico dei coin-op anni 80/90. Non sono riuscito a resistere. E l’iCade e’ venuto a casa con me. Li’, in serata, e’ poi partita la caccia ad un po’ di giochi con i quali poterlo utilizzare. Quando stavo per rassegnarmi all’idea di dover jailbreakare il mio tablet per poter attingere all’enorme libreria di giochi emulati via MAME attraverso l’app non ufficiale (nel senso di non presente sull’App Store di Apple) iMAME, mi sono accorto che la rete era un po’ in subbuglio. Proprio in quei minuti, infatti, iniziava a sparsi tra gli appassionati la voce secondo la quale, a sorpresa, il software in questione era appena comparso all’interno dell’App Store.

Il vostro eroe chiaramente non si e’ fatto pregare per andare a recuperare l’app prima di eventuali (possibili?) ripensamenti da parte di quelli di Cupertino. Dopo un attimo di smarrimento, il funzionamento del software e’ diventato molto chiaro. Purtroppo non e’ possibile passare via iTunes per quello che riguarda l’upload delle ROM sul dispositivo. Problema comunque non insormontabile, in quanto ci si puo’ facilmente appoggiare al software gratuito iExplorer (disponibile sia per Mac OS X che per Windows). Con questo e’ possibile navigare all’interno del file system del proprio iDispositivo, accedere alla cartella Apps/iMAME/Documents ed andarvi a piazzare gli archivi .zip delle varie ROM.

Le ROM che e’ possibile utilizzare sono quelle del pacchetto MAME 37b5 (qui un elenco di tutte quelle ufficialmente supportate). Un ottimo sito dal quale recuperarle (previa registrazione) e’ TheOldComputer.com. Importante ricordarsi, nel caso in cui si vogliano utilizzare ROM Neo Geo, che e’ necessario copiarsi all’interno della cartella Documents anche il file neogeo.zip.

Ora, appurato che purtroppo uno dei miei giochi preferiti (al secolo, il meraviglioso Run and Gun) non funziona con iMame, sarebbe carino se qualche esperto potesse consigliarmi qualche titolo “imperdibile”.

Io, nel mio piccolo, vi riporto alla memoria questo:

Share

Pagina successiva »