Lunedì quiz–nono ed ultimo

Su richiesta del nonno, scrivere un algoritmo che determini se ci sono ancora mosse possibili in una partita di Bejeweled o se sia GameOver.

image

L’input della funzione è una matrice NxN di byte dove il valore rappresenta uno dei possibili 256 colori (non è detto che siano in uso tutti).

A giudicare la soluzione sarà il nonno stesso. Smile

-quack

Commenti (13):
1. wac
lunedì 6 dicembre 2010 alle 7:50 PM - firefox 3.6.12 Windows 7
   

a parte che è il nono cmq è l'ultimo uffa ed è pure tostino..... mi ci metterò d'impegno

   
2. Paperino
lunedì 6 dicembre 2010 alle 8:07 PM - chrome 8.0.552.215 Windows 7
   

Grazie, ho corretto il titolo. Mi sembra più che giusto che il nono sia dedicato al nonno.

   
3. Dovella
lunedì 6 dicembre 2010 alle 8:56 PM - chrome 8.0.552.215 Windows 7
   

LOOOL

   
4. il nonno
lunedì 6 dicembre 2010 alle 9:51 PM - chrome 8.0.552.215 Windows 7
   

A giudicare la soluzione sarà il nonno stesso.

Ma io la soluzione non la so!

   
5. zakk
martedì 7 dicembre 2010 alle 12:49 AM - chrome 9.0.597.0 OS X 10.6.5
   

Questo potrebbe andare?!? E' in C! http://pastebin.com/tkpsBF1G

(Paperino: non ho capito bene cosa sia successo... Il sito era offline, 5 minuti è tornato online, coincidenza?!? sì!) 

   
6. il nonno
martedì 7 dicembre 2010 alle 1:30 AM - chrome 8.0.552.215 Windows 7
   

zakk, il codice possibilmente che sia leggibile usando nomi variabili significativi e mettendo qualche commento.

   
7. il nonno
martedì 7 dicembre 2010 alle 1:32 AM - chrome 8.0.552.215 Windows 7
   

usti... che frase illeggibile che ho scritto

"usa nomi significativi per le variabili"... vabbe' s'era capito spero.

   
8. zakk
martedì 7 dicembre 2010 alle 1:52 AM - chrome 9.0.597.0 OS X 10.6.5
   

@il nonno: Così può andar meglio?!? http://pastebin.com/ReM5wFsd

 

   
9. zakk
martedì 7 dicembre 2010 alle 1:55 AM - chrome 9.0.597.0 OS X 10.6.5
   

(Le variabili non hanno ancora tutte nomi significativi, ma i commenti spiegano tutto )

   
10. Paperino
martedì 7 dicembre 2010 alle 2:12 AM - chrome 8.0.552.215 Windows 7
   

È successo che mi hanno chiuso il sito in quanto generava troppa CPU a causa di SqlCE. Ho dovuto migrare i dati verso un DB vero (estremamente più veloce tra l'altro) e per farlo ho dovuto freezare il blog per impedire modifiche al DB sorgente. Ho postato il mio primo commento subito dopo per verificare il passaggio e dopo qualche minuto c'era il tuo...

   
11. il nonno
martedì 7 dicembre 2010 alle 11:22 AM - chrome 8.0.552.215 Windows 7
   

zakk, gia' molto meglio, grazie, oggi pomeriggio vedo di provarlo.

   
12. Paperino
martedì 7 dicembre 2010 alle 3:40 PM - chrome 8.0.552.215 Windows 7
   

Un paio di suggerimenti/ottimizzazioni.

1) Le quattro operazioni di "confronto" possono essere ridotte ad "una" sola se si opera sulla matrice trasposta, riflessa e trasposta/riflessa. Ovvero basta controllare solo che il colore a destra nella posizione in analisi causi un tris

2) se il colore a destra è uguale, salta il giro

3) invece di controllare se le coordinate intorno sono fuori dalla matrice, si potrebbero usare due valori sentinella (254 e 255?) in due cornici concentriche che avvolgono la matrice originale

Con un linguaggio ad oggetti le operazioni "virtuali" di accesso alla matrice trasposta o riflessa dovrebbero rendere il tutto molto più leggibile.

   
13. Fede
domenica 12 dicembre 2010 alle 10:41 PM - chrome 8.0.552.215 Windows XP
   

Ciao

Ho pensato che per stabilire se ci siano ancora mosse possibili basta ricercare nella matrice se ci sono tre pattern fissi, e naturalmente i relativi pattern inversi, che però sono già compresi se effettuo il controllo in tutte e quattro le direzioni.

I tre pattern li trovate nel codice (ho bisogno di un font monospaced, non saprei come postarli qui!)

Ce ne sono altri possibili? Mi sembrerebbe di no!

Ed y deve essere diversa da X, oppure si può ignorare? Io voglio che sia diversa, casomai basta eliminare il confronto!

Poi ho pensato che invece di verificare a mano se le coordinate sono fuori dalla matrice, ci starebbe bene un bel TRY...EXCEPTION! Provo a cercare il pattern... se viene sollevata un'eccezione, vuol dire che il pattern non c'è! Cosa ne dite? E' un sacrilegio o può andare bene? Sono pigro lo so

Questo è il mio codice Python... linguaggio che non conosco bene ma che ho deciso di imparare! Quindi ci saranno sicuramente dei giganteschi errori di stile (ehm ad esempio non c'è un modo migliore per gestire le matrici??) ma speriamo ci siano solo quelli, e che la soluzione sia abbastanza corretta

http://pastebin.com/SB4R8FZN

   
Lascia un commento:
Commento: (clicca su questo link per gli smiley supportati; regole di ingaggio per i commenti)
(opzionale, per il Gravatar)