RUBIK-VIC
Il micidiale rompicapo degli anni '80, in arte "Cubo Magico", ormai diventato familiare a tutti: al mondo ne esistono oggi pi di 20.000,000 di esemplari. Il suo geniale inventore, l'architetto ungherese Erno Rubik, prima di accorgersi di avere per le mani un affare da miliardi usava il suo (allora unico!) cubo per spiegare agli studenti universitari problemi di geometria tridimensionale. Sparsi per tutto il mondo, oggi i cubi stanno facendo o hanno fatto scervellare gente di qualsiasi et , razza, sesso. Perdere delle ore con il cubo di Rubik: non si sa perch , ma questo straordinario puzzle ungherese ha qualcosa di molto forte che attrae. Chi lo vede per la prima volta, oltre ad innamorarsene subito per la sua "bellezza nascosta", quasi sempre, come successo al sottoscritto, esclama dentro di s : facilissimo!!" . Ma appena lo prende in mano cambia idea C' davvero da impazzire, e si rimane l a "scubettare" finch non si arriva all'esaurimento nervoso, A questo punto o ci si riusciti, o non si vorr pi sentir parlare di cubi magici per il resto della vita, Ma proprio tanto difficile risolvere il cubo di Rubik?? IL CUBO E L'UOMO: la risoluzione Il procedimento pi semplice per riordinare le sei facce del cubo certamente quello di leggere le istruzioni sui tanti libri che trattano appunto della risoluzione del puzzle. Ma anche il meno "gratificante". Per i meno "scansafatiche" vi sono altre vie. Si va dalla teoria algebrica dei gruppi, con la quale sono state fatte varie dimostrazioni sulle propriet del cubo, sino al sistema "intuito pi fortuna" che ha permesso a moltissime persone di riuscire a risolvere da soli il cubo senza barare tramite pubblicazioni varie. stato dimostrato, ad esempio, che qualsiasi cubo in disordine, con soli 16 movimenti singoli delle facce torna a posto. Basta solo scegliere tra miliardi di varianti le mosse che servono. La cosa non affatto semplice. Un computer capace di analizzare in un secondo 100 mosse tra le possibili impiegherebbe a selezionare, per tentativi, le 16 giuste circa 100.000.000 di anni. Purtroppo non stato ancora scoperto alcun metodo matematico per determinare le mosse risolutrici senza andarle a cercare a tentoni. Il metodo "intuito pi fortuna" sta nello scoprire degli operatori capaci di effettuare delle semplici trasformazioni del cubo, come lo scambio a tre di pezzi bicolore o tricolore, lasciando invariato il resto. Applicando infatti pi volte questi operatori, si riesce a riportare ogni mattoncino al proprio posto in pochi minuti. Purtroppo per scoprire gli operatori non esistono metodi matematici, ma ci vuole un po' di fortuna. Il sistema comunque non difficile: si parte dal cubo con le 6 facce in ordine, muovendo queste ultime quasi-a-caso, prendendo nota dei movimento che si stanno compiendo. Il "quasi- a-caso" vuol dire che bisogna essere un po' simmetrici (ma non troppo) nei movimenti; ad esempio: due in gi , uno a destra, due in su. uno a sinistra, ecc. Se siete fortunati, probabile che, dopo 10-15 di queste mosse, si siano scambiati tra loro tre o quattro mattoncini lasciando invariato il resto. Avete trovato il vostro primo operatore. Se ci non accade siete sulla cattiva strada, ma continuate. Riportate a posto il cubo ripetendo al contrario esattamente le stesse mosse (o smontandolo se avete perso il conto) e riprovate generando una nuova serie di movimenti "Random". Sempre dalla teoria dei gruppi, vengono altre dimostrazioni che permettono di stabilire quali operatori usare per risolvere il cubo. Per esempio non esiste alcun operatore che scambia due mattoncini fra di loro lasciando invariato il resto, cosi come non si pu cambiare orientamento ad uno solo di essi. Fortunatamente ci significa anche che per quanto mischieremo le facce, non ci capiter mai di aver bisogno di uno di questi operatori "impossibili". A patto per che nessuno si diverta a smontare il cubo e a ricostruirlo posizionando a casaccio i vari pezzi: potrebbe non essere pi possibile riordinarlo senza smontarlo di nuovo. Per risolvere il cubo con una certa facilit ci 'vogliono almeno 4 operatori: lo scambio in rotazione di tre angoli (mattoncini tricolore), lo scambio in rotazione di tre pezzi bicolore, pi altri due atti a far variare orientamento ma non posizione ai pezzi sopra menzionati. Con meno di quattro operatori, risolvere il cubo diventa un po' pi complicato ma non impossibile. Di fatto il programma presentato sfrutta appunto degli operatori per risolvere interamente il cubo. Comincia col ricostruirsi la prima faccia, l'arancio, per poi sistemare la cintura laterale e infine la rossa, dove appunto vengono usati degli operatori. La lista completa di questi ultimi riportata nel riquadro a pagina __. IL CUBO E IL COMPUTER: il modello Far "scubettare" un computer pi complicato di quanto sembra. Il problema, infatti, non tanto quello della risoluzione, che come vedremo molto semplice, ma quanto quello di trovare un modello matematico o quasi matematico che assomigli al cubo in tutto e per tutto. Ci significa anche che deve avere le stesse propriet algebriche. La soluzione che ho ritenuto migliore stata quella di rappresentare il cubo in memoria, guardacaso, come un array tridimensionale di lato tre. Inoltre ogni elemento, di tipo stringa, contiene un codice per la biunivoca identificazione di un ben preciso mattoncino. Ad esempio, il pezzo Rosso-Verde-Giallo rappresentato dalla stringa "RVG". Fin qui tutto normale, anzi qualcuno si sar pure chiesto dove tutta questa complicazione. Lo accontento subito. Il complicato sta nel fatto che ogni mattoncino si pu trovare nella stessa posizione con diversi orientamenti. Quindi la rappresentazione in memoria di un determinato mattoncino non unica. Si cosi pensato alle permutazioni cicliche di ogni stringa a seconda dell'orientamento del mattoncino corrispondente. In parole pi semplici se il pezzo Rosso-Verde-Giallo cambia orientamento, all'interno dell'array avr come sua rappresentazione la stringa "VRG" o "GVR" a seconda dell'orientamento stesso. Inoltre stato necessario definire per ogni elemento dell'array quale dei colori rappresentati fosse sulla faccia XXX, quale sulla taccia YYY. A ci si aggiunge che, quando si ruota una faccia, oltre a spostare in senso orario o antiorario i contenuti delle celle relative ai mattoncini spostati, bisogna per ognuno di essi effettuare le dovute modifiche dato che anche l'orientamento cambia. Mi rendo conto che non del tutto intuitivo ci che ho appena detto. Un esempio pratico chiarir tutti i dubbi. Prendete in mano un cubo ordinato. Posizionatelo in modo da avere la faccia arancio in alto, il bianco avanti e il blu alla vostra destra. osservate il mattoncino Arancio-Blu-Giallo. Come vedete il colore arancio di quel pezzo rivolto verso l'alto. Provate ora a ruotare la faccia blu in senso antiorario, lasciando fermo il resto del cubo. In pratica il mattoncino Arancio-Blu-Giallo ora si trova davanti a voi, sulla faccia bianca. L'arancio di questo mattoncino non pi rivolto verso l'alto, ma rivolto verso di voi. Senza dirvi nulla quell'angolo ha cambiato orientamento oltre che posizione. Questo deve accadere anche nell'array contenuto in memoria. Tutto qui. IL CUBO E IL COMPUTER: note al programma La risoluzione del cubo di Rubik da parte di un calcolatore non pone particolari problemi una volta definito un ben preciso modello. Buona parte del programma serve appunto per simulare quest'ultimo. Tutto il resto, dalla linea 1440 in poi, serve per riordinare le sei facce. Funziona praticamente cos : di ogni mattoncino il programma conosce qual il posto che dovr occupare e tramite la routine 1230 qual la sua attuale posizione. Quindi. in definitiva, se un determinato pezzo nella posizione XYZ le mosse da effettuare saranno ABCD... etc. se invece nella posizione X'Y'Z'le mosse saranno EFGH...etc. e cos via per tutti i casi possibili. Nel riquadro sono descritti gli operatori usati nel programma. Vorrei a questo punto precisare un particolare abbastanza importante: il programma riferito al cubo originale di Mondadori. Quest'ultimo, rispetto ai numerosi "Made in Taiwan", oltre ad essere pi bello e pi affidabile meccanicamente, ha i colori originali e sistemati nella "giusta" posizione, ossia il verde contrapposto al blu, l'arancio contrapposto al rosso, il bianco al giallo. Inoltre, per una limitazione imposta dal VIC-20 che non dispone dei caratteri arancio, ho dovuto sostituire nella visualizzazione del cubo questo colore con il colore viola. In ogni caso per , le mosse visualizzate fanno preciso riferimento alla colorazione originale. Facciamo partire ora l'esecuzione del programma. Avrete notato che il VIC-20 da solo non basta: ha bisogno di almeno 8K in pi per ospitare tutte le linee. bene precisare ancora che per faccia color XXX si intende quella faccia che ha il quadratino centrale del colore XXX. La prima cosa che il programma chiede se si vuoi dare in ingresso un cubo gi mischiato. In caso negativo viene automaticamente caricato in memoria un cubo a "posto". In caso positivo bisogna, per ciascuna delle facce, dargli i colori dei singoli quadratini, orientando il cubo come richiede il computer e nell'ordine indicato dalla freccia visualizzata sullo schermo. Per "inputare" i colori si utilizzano i tasti-colore non preceduti da CTRL, ricordando che l'arancio va chiamato Purple. Fatta questa operazione per le sei facce, il computer chiede se si vuole ulteriormente mischiare il cubo. Subito dopo inizia la risoluzione del Puzzle con l'elenco dei movimenti da effettuare. Per poter seguire l'evolversi del riordino, oltre che sullo schermo, anche con un cubo in mano, il programma si arresta ogni serie di mosse (max. 8) e continua schiacciando qualsiasi tasto. Un'ultima avvertenza: attenti a non sbagliare l'input: i cubi con qualche colore in pi o in meno non si possono riordinare. Buon divertimento! .
GLI OPERATORI USATI DAL PROGRAMMA
Il sistema utilizzato nel programma per riordinare le facce del cubo di Rubik detto: "pozzo di scarico". Grazie a questo metodo il possibile applicare un numero minimo di operatori in corrispondenza a un numero abbastanza cospicuo di mosse ragionate, ossia non troppo meccaniche e ripetitive. Il procedimento consiste nel riordinare dapprima una qualsiasi faccia, avendo per l'accortezza di lasciare fuori posto uno dei quattro angoli (mattoncini tricolore). Dopo questa elementare fase, attraverso il "pozzo si di scarico" rappresentato per l'appunto dall'angolo mancante sulla prima faccia, possibile sistemare facilmente tutti i quattro pezzi della cintura laterale. Solo da questo momento, quando ormai pi della met dei mattoncini a posto, d'obbligo l'uso degli operatori. Nel disegno del cubo, a sinistra, si notano dei numeri che individuano dei mattoncini e delle lettere con relative frecce che individuano rispettivamente delle "fette" di cubo e il loro verso di rotazione +. Il primo operatore consta di 8 movimenti che scambiano i mattoncini 1,7,9 fra di loro: D+,C-,F-,C+,D-,C-,F+,C+. Un altro operatore usato scambia tra di loro i pezzi 4,6,8 ed formato dai movimenti: E+,E+,G-,E+,G-,G-,E-,G-,E-,E-. Il terzo operatore cambia orientamento ma non posizione ai pezzi 6 e 8: E+,G-,E-,G-,G-, E+ ,G-,E+ ,G-,E + ,G-,G-,E-,G-,E +,E +; mentre il quarto serve per variare l'orientamento ai pezzi 2 e 8: E-,G-, E-, G-,E-,G-, E-,G-,E+,G+,E+,G+,E+,G+,E+,G+. L'ultimo operatore (di Monteleone-Cavalcanti) provvede a far cambiare orientamento agli angoli. un po' macchinoso, ma si dimostrato il migliore da inserire nel programma. Ogni angolo da ruotare va prima portato al posto del pezzo 7: operazione pi che mai semplice poich si ottiene ruotando soltanto di 90 o 180 gradi la faccia superiore. A questo punto si applica la serie di movimento: D-,C-,D+,C+,D-,C-,D+, C +. Apparentemente, dopo questa serie di mosse il cubo si mischiato: niente paura, continuate a ruotare gli altri angoli fuori posto della stessa faccia, ricordandovi di posizionare prima ogni pezzo sul 7 e poi applicando l'operatore. Quando avrete sistemato tutti gli angoli della faccia, il vostro cubo sar ritornato a posto cos come l'avevate lasciato prima di correggere l'orientamento di questi ultimi pezzi.