Giochi ad occhi chiusi
C'è un gioco che conste nel riordinare 15 caselle numerate in un quadrato 4x4 (un "buco" dove far spostare le caselle da 1 a 15)
Premesso che il metodo risolutivo è molto semplice ed intuitivo, mi chiedevo se esiste un metodo per risolverlo anche ad occhi chiusi: cioè guardandolo all'inizio e basta.
Quello che cerco io è un modo per controllare gli "spostamenti involontari" delle caselle quando se ne sposta un'altra.
Es: anche memorizzando tutta la disposizione iniziale, può accadere che, per esenpio, il 4 (che va portato in prima riga) si trovi nell'ultima. Ecco, la casella 4, durante il "tragitto" fino alla prima riga, cambierà in maniera significativa le posizioni delle altre caselle, che diventano praticamente immemorizzabili (considerando tutte le caselle da spostare, cioè oltre al 4 anche l'1, il 2,ecc...)
Anche sul web non ho trovato niente
Grazie in anticipo
Premesso che il metodo risolutivo è molto semplice ed intuitivo, mi chiedevo se esiste un metodo per risolverlo anche ad occhi chiusi: cioè guardandolo all'inizio e basta.
Quello che cerco io è un modo per controllare gli "spostamenti involontari" delle caselle quando se ne sposta un'altra.
Es: anche memorizzando tutta la disposizione iniziale, può accadere che, per esenpio, il 4 (che va portato in prima riga) si trovi nell'ultima. Ecco, la casella 4, durante il "tragitto" fino alla prima riga, cambierà in maniera significativa le posizioni delle altre caselle, che diventano praticamente immemorizzabili (considerando tutte le caselle da spostare, cioè oltre al 4 anche l'1, il 2,ecc...)
Anche sul web non ho trovato niente
Grazie in anticipo
Risposte
Io mi orienterei così per trovare un algoritmo che funzioni ad occhi chiusi:
Definisco uno spazio "buffer" (ad esempio la posizione 15) e anche altre due posizioni "swap" (direi quelle dell'11 e del 12) che mi servono per "aggiustare la parità".
Mi preparo degli algoritmi (non è così difficile) che siano in grado di scambiare di posto:
- la casella in posizione buffer, e la casella che si trova nella posizione in cui deve finire quella buffer
- le due caselle che swap
oltre a un paio di algoritmi per casi particolari, come casella nel buffer che deve andare in posizione di swap.
In questo modo chi deve risolvere il gioco, all'inizio deve solo imparare una sequenza di numeri che indichi di volta in volta che casella si trova nel buffer. Costruire a mente questa lista è facile, perché se ad esempio nel buffer all'inizio c'è il 5, al passo successivo ci sarà la casella che sta al posto del 5, e così via...
Se mi rendo conto che a un certo punto nel buffer c'è il 15, ma il puzzle non è completato, posso continuare con una casella qualsiasi che non sia stata ancora sistemata, tanto alla fine mi ritornerà comunque il 15.
Spero di essere stato chiaro e di aiuto.
Definisco uno spazio "buffer" (ad esempio la posizione 15) e anche altre due posizioni "swap" (direi quelle dell'11 e del 12) che mi servono per "aggiustare la parità".
Mi preparo degli algoritmi (non è così difficile) che siano in grado di scambiare di posto:
- la casella in posizione buffer, e la casella che si trova nella posizione in cui deve finire quella buffer
- le due caselle che swap
oltre a un paio di algoritmi per casi particolari, come casella nel buffer che deve andare in posizione di swap.
In questo modo chi deve risolvere il gioco, all'inizio deve solo imparare una sequenza di numeri che indichi di volta in volta che casella si trova nel buffer. Costruire a mente questa lista è facile, perché se ad esempio nel buffer all'inizio c'è il 5, al passo successivo ci sarà la casella che sta al posto del 5, e così via...
Se mi rendo conto che a un certo punto nel buffer c'è il 15, ma il puzzle non è completato, posso continuare con una casella qualsiasi che non sia stata ancora sistemata, tanto alla fine mi ritornerà comunque il 15.
Spero di essere stato chiaro e di aiuto.
Innanzitutto grazie per la risposta. Ma non mi è chiara una cosa: ammettendo che io riesca a trovare un algoritmo che scambi la buffer con la casella di arrivo, come faccio ad assicurarmi che le posizioni delle "swag(?)" e delle altre caselle rimangano invariate?
Le due caselle swap non rimangono al loro posto: si scambiano tra loro.
Questa cosa è necessaria perché (te ne sarai accorto) è impossibile scambiare una sola coppia di caselle lasciando tutto il resto invariato.
Comunque non è difficile costruire algoritmi del genere, ti dico come penso si possa fare (buffer in pos. 15, swap in pos. 11 e 12, posto libero in basso a destra):
Facciamo finta che nel buffer ci sia il 2. Allora:
- porto a destra il 2 (in generale ciò che c'è nel buffer), e porto giù la casella in pos. 11
- eseguo una sorta di "rotazione" delle caselle in posti 2-3-4-8-12-11-10-6 in modo che la tessera che era in pos.2 arrivi alla fine in pos. 11, e lo spazio vuoto sia in pos. 12
- porto su il 2, a destra ciò che all'inizio era in pos. 11, e giù ciò che all'inizio era in pos. 2
- rifaccio la stessa rotazione di prima ma al contrario, lasciando lo spazio libero in pos.12
- porto su ciò che all'inizio era in pos. 11
Tutto ti sembrerà più chiaro se esegui fisicamente l'algoritmo su una vera griglia.
In particolare l'algoritmo che ti ho detto io porta la situazione
1 | 15 | 3 | 4
5 | 6 | 7 | 8
9 | 10 | 12 | 11
13 | 14 | 2 | X
nella situazione di gioco risolto
Questa cosa è necessaria perché (te ne sarai accorto) è impossibile scambiare una sola coppia di caselle lasciando tutto il resto invariato.
Comunque non è difficile costruire algoritmi del genere, ti dico come penso si possa fare (buffer in pos. 15, swap in pos. 11 e 12, posto libero in basso a destra):
Facciamo finta che nel buffer ci sia il 2. Allora:
- porto a destra il 2 (in generale ciò che c'è nel buffer), e porto giù la casella in pos. 11
- eseguo una sorta di "rotazione" delle caselle in posti 2-3-4-8-12-11-10-6 in modo che la tessera che era in pos.2 arrivi alla fine in pos. 11, e lo spazio vuoto sia in pos. 12
- porto su il 2, a destra ciò che all'inizio era in pos. 11, e giù ciò che all'inizio era in pos. 2
- rifaccio la stessa rotazione di prima ma al contrario, lasciando lo spazio libero in pos.12
- porto su ciò che all'inizio era in pos. 11
Tutto ti sembrerà più chiaro se esegui fisicamente l'algoritmo su una vera griglia.
In particolare l'algoritmo che ti ho detto io porta la situazione
1 | 15 | 3 | 4
5 | 6 | 7 | 8
9 | 10 | 12 | 11
13 | 14 | 2 | X
nella situazione di gioco risolto
Scusa, ma scambiare un numero pari con uno dispari è impossibile! (provaci)
Per questo mi serve un'altro algoritmo, che non sia basato su scambi ma sul metodo penso "tradizionale", cioè tipo di mettere im fila 4,3,2,1 e farli entrare all'inizio della prima riga a mo' "serpente" (non so se mi spiego).
Anche perche quello degli scambi risulterebbe troppo lungo con un aumento delle probabilità di errore (o di dimemticarsi la posizione di un numero), oltre ad un notevole aumento del tempo impiegato.
[ad occhi aperti ho una media di 27-30 sec con PB di 16 sec) e metteri tipo 5 min sarebbe assurdo
Per questo mi serve un'altro algoritmo, che non sia basato su scambi ma sul metodo penso "tradizionale", cioè tipo di mettere im fila 4,3,2,1 e farli entrare all'inizio della prima riga a mo' "serpente" (non so se mi spiego).
Anche perche quello degli scambi risulterebbe troppo lungo con un aumento delle probabilità di errore (o di dimemticarsi la posizione di un numero), oltre ad un notevole aumento del tempo impiegato.
[ad occhi aperti ho una media di 27-30 sec con PB di 16 sec) e metteri tipo 5 min sarebbe assurdo
Magari c'è un metodo migliore e più veloce del mio (che ti assicuro che funziona, non capisco a cosa ti riferisci con "scambiare un pari con un dispari"), ma siccome non lo conosciamo penso che quello che ti ho suggerito io sia accettabile.
Inoltre quello che vuoi tu, cioè qualcosa di più vicino al metodo a "serpenti", non credo sia fattibile a occhi chiusi, perché coinvolge molte tessere alla volta (mettere in fila 4 tessere non è poco). Al contrario nei giochi ad occhi chiusi il trucco è (quasi) sempre quello di coinvolgere il minor numero possibile di tessere alla volta.
Comunque è normale che con gli occhi chiusi ci si debba mettere (molto) più tempo. Pensa che io risolvo il cubo di rubik con gli occhi aperti in 30-40 secondi (di solito) ma la prima volta che ho provato ad occhi chiusi ci ho messo 10 minuti se non di più (ma ti assicuro che la soddisfazione è stata enorme
).
P.S. hai provato ad eseguire il mio algoritmo passo passo?
Inoltre quello che vuoi tu, cioè qualcosa di più vicino al metodo a "serpenti", non credo sia fattibile a occhi chiusi, perché coinvolge molte tessere alla volta (mettere in fila 4 tessere non è poco). Al contrario nei giochi ad occhi chiusi il trucco è (quasi) sempre quello di coinvolgere il minor numero possibile di tessere alla volta.
Comunque è normale che con gli occhi chiusi ci si debba mettere (molto) più tempo. Pensa che io risolvo il cubo di rubik con gli occhi aperti in 30-40 secondi (di solito) ma la prima volta che ho provato ad occhi chiusi ci ho messo 10 minuti se non di più (ma ti assicuro che la soddisfazione è stata enorme

P.S. hai provato ad eseguire il mio algoritmo passo passo?
Lo scopo del gioco è mettere nell'ordine 1-2-3-4-5-6-7-8-9-10-11-12-13-14-15 le caselle. Per farti vedere che è impossibile scambiare un pari con un dispari, prova a metterle così: 1-2-3-4-5-6-7-8-9-10-11-12-13-15-14 (praticamente scambiando le ultime due). Dimmi se ci riesci. (infatti ho provato il tuo algoritmo e, come mi hai scritto anche tu, non riesco a scambiarli da soli, perchè si scambiano anche il 12 e l'11)...in ogni caso,prenderò spunto dal tuo e tenterò di creare algoritmi per ogni scambio (non solo 15-2).
Detto questo, ho trovato il tuo metodo molto efficace ( Grazie mille
). Ma ho incontrato dei problemi: scambiare da 15-1 a 15-10, nessun problema, ma per 11,12,13 e 14 non riesco!
E intanto che ci sono: io risolvo il cubo (non ho uno speed cube, anzi è molto lento ed abbastanza vecchio) col Metodo a strati, non ne conosco altri. I miei tempi sono attorno ai 2'15"-2'30" con un best di 1'16".
Immagino proprio che tu non usi il m. Strati, vero? Quale usi? Perche volevo impararne un'altro ma friedrich è troppo difficile. Ero indeciso tra friedrich semplificato e Petrus, cosa mi consigli? Ho dato un'occhiata a qualche tutorial su youtube ma mi sembra di non riuscire a guadagnare il tempo desiderato...
Detto questo, ho trovato il tuo metodo molto efficace ( Grazie mille

E intanto che ci sono: io risolvo il cubo (non ho uno speed cube, anzi è molto lento ed abbastanza vecchio) col Metodo a strati, non ne conosco altri. I miei tempi sono attorno ai 2'15"-2'30" con un best di 1'16".
Immagino proprio che tu non usi il m. Strati, vero? Quale usi? Perche volevo impararne un'altro ma friedrich è troppo difficile. Ero indeciso tra friedrich semplificato e Petrus, cosa mi consigli? Ho dato un'occhiata a qualche tutorial su youtube ma mi sembra di non riuscire a guadagnare il tempo desiderato...
Sono contento che hai trovato utile la mia idea, che effettivamente sarebbe da aggiustare per quei casi strani.
Con 13 e 14 basta una sequenza di mosse qualsiasi che ti porti la tessera interessata in pos. 11, e poi dopo aver fatto lo "scambio" rifare la stessa sequenza al contrario.
Per 11 e 12 ci devo ancora pensare...
Per quanto riguarda il cubo di rubik faccio i primi 2 strati in modo intuitivo (croce su una faccia, poi coppie angolo-spigolo) e poi una sorta di friedrich semplificato per l'ultimo strato (non mi va di imparare tanti algoritmi xD)
Ma forse stiamo uscendo un po' OT...
Con 13 e 14 basta una sequenza di mosse qualsiasi che ti porti la tessera interessata in pos. 11, e poi dopo aver fatto lo "scambio" rifare la stessa sequenza al contrario.
Per 11 e 12 ci devo ancora pensare...
Per quanto riguarda il cubo di rubik faccio i primi 2 strati in modo intuitivo (croce su una faccia, poi coppie angolo-spigolo) e poi una sorta di friedrich semplificato per l'ultimo strato (non mi va di imparare tanti algoritmi xD)
Ma forse stiamo uscendo un po' OT...
Probabilmente queste cose ti sembreranno banali ma ho provato lo stesso ad elencarti passaggio per passaggio (seguili e provali) quello che sono riuscito a capire per ora degli ultimi scambi (dal 11 in poi).
Tralasciamo le prime due righe (che diamo per fatte).
Ora due casi per le ultime tre caselle:
1) "ruoto" le righe in modo da avere 11-12-vuoto-15 e sotto 10-9-13-14. A questo punto posso lavorare comodamente tra 13,14 e 15 trovando le combinazioni 13-14-15, 14-15-13, 15-13-14 senza scambio (tra 11 e 12).
2) sposto il 15 in posizione 16. Abbasso l'11. Eseguo una rotazione fino ad ottenere 10-12-15-11 e sotto 9-13-14-vuoto. Ora sposto il 14 in posizione 16. Abbasso il 15. Ruoto in senso orario fino a raggiungere 9-10-12-11 e sotto 13-15-14.
A questo punto faccio la 1) se voglio raggiungere, oltre a 13-15-14, anche 14-13-15 e 15-14-13. Questo richiede uno scambio tra 11 e 12.
Da notare: nella 2) si può raggiungere uno scambio 15-13 o 15-14 normalissimo (cioè con annesso scambio 11-12).
Ora bisogna pensare ciò che riguarda lo scambio con caselle 11 e 12.
Io ti dico come ho provato a farlo io:
Dopo aver mischiato, ho iniziato. Ho fatto 11 scambi (di cui uno perche avevo in posizione 15 l'11 e ho preferito scambiarlo con un altro numero) e quindi ho messo a posto 10 numeri: il massimo che potevo senza "toccar"e l'11 e il 12 e mi sono ritrovato così:
1-2-15-4
5-6-7-11
9-10-3-8
13-14-12
A questo punto ho dovuto cambiare le caselle Swap:
Ho ruotato le posizioni 11,12,15 cioè il 3-8-12 e ho messo in pos 15 il 3. (ricordandomi però di "cambiare nella mia memoria" gli swap che diventano 8-12 e non 3-8). Poi ho scambiato normalmente il 3 ed il 15 (che era in posizione 3), portando gli swap 12-8.
Ho cambiato nuovamente gli swap (credo che questo non sia un problema per la memoria dato che essi sono praticamente l'unica cosa da ricordare a quel punto, avendo sistemato quasi tutti i numeri) e ho portato swap 15-12 e in pos 15 l'8. Ora scambio 8-11 (pos 15-pos8). E con un'ultima rotazione tra le pos 11-12-15 arrivo alla soluzione.
Cosa ne pensi?
Tralasciamo le prime due righe (che diamo per fatte).
Ora due casi per le ultime tre caselle:
1) "ruoto" le righe in modo da avere 11-12-vuoto-15 e sotto 10-9-13-14. A questo punto posso lavorare comodamente tra 13,14 e 15 trovando le combinazioni 13-14-15, 14-15-13, 15-13-14 senza scambio (tra 11 e 12).
2) sposto il 15 in posizione 16. Abbasso l'11. Eseguo una rotazione fino ad ottenere 10-12-15-11 e sotto 9-13-14-vuoto. Ora sposto il 14 in posizione 16. Abbasso il 15. Ruoto in senso orario fino a raggiungere 9-10-12-11 e sotto 13-15-14.
A questo punto faccio la 1) se voglio raggiungere, oltre a 13-15-14, anche 14-13-15 e 15-14-13. Questo richiede uno scambio tra 11 e 12.
Da notare: nella 2) si può raggiungere uno scambio 15-13 o 15-14 normalissimo (cioè con annesso scambio 11-12).
Ora bisogna pensare ciò che riguarda lo scambio con caselle 11 e 12.
Io ti dico come ho provato a farlo io:
Dopo aver mischiato, ho iniziato. Ho fatto 11 scambi (di cui uno perche avevo in posizione 15 l'11 e ho preferito scambiarlo con un altro numero) e quindi ho messo a posto 10 numeri: il massimo che potevo senza "toccar"e l'11 e il 12 e mi sono ritrovato così:
1-2-15-4
5-6-7-11
9-10-3-8
13-14-12
A questo punto ho dovuto cambiare le caselle Swap:
Ho ruotato le posizioni 11,12,15 cioè il 3-8-12 e ho messo in pos 15 il 3. (ricordandomi però di "cambiare nella mia memoria" gli swap che diventano 8-12 e non 3-8). Poi ho scambiato normalmente il 3 ed il 15 (che era in posizione 3), portando gli swap 12-8.
Ho cambiato nuovamente gli swap (credo che questo non sia un problema per la memoria dato che essi sono praticamente l'unica cosa da ricordare a quel punto, avendo sistemato quasi tutti i numeri) e ho portato swap 15-12 e in pos 15 l'8. Ora scambio 8-11 (pos 15-pos8). E con un'ultima rotazione tra le pos 11-12-15 arrivo alla soluzione.
Cosa ne pensi?