Articolo pubblicato sul n. 11 di
MCmicrocomputer
(Edizioni Technimedia Srl - Roma) nel settembre 1982
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
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.
|
Impaginato
originale...
Articolo pubblicato
su
www.digiTANTO.it - per ulteriori informazioni
clicca qui
|