Articolo pubblicato sul n. 11 di MCmicrocomputer (Edizioni Technimedia Srl - Roma) nel settembre 1982

MCmicrocomputer


Commodore Vic-20:
RUBIK-VIC

di Andrea de Prisco

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 Copertina del numero di MCmicrocomputer contenente l'articoloErno 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 

Cubo di RubicIl 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.


Impaginato originale...


Clicca per ingrandire... Clicca per ingrandire...
Clicca per ingrandire... Clicca per ingrandire...
Clicca per ingrandire...

Articolo pubblicato su www.digiTANTO.it - per ulteriori informazioni clicca qui