Pagina Principale

Passeggiata in tre direzioni

Analizziamo il caso in cui l’ubriaco si muove, con passo costante e uguale probabilità di seguire una delle due direzioni ortogonali, in un verso o quello opposto, ma evitando le posizioni in cui è già stato (Self-Avoiding Random Walks in 3D Wolfram Demonstrations Project).

Per creare una lista di queste scelte con Javascript occorre memorizzare le posizioni via via occupate, per esempio attraverso una matrice inizializzata

var M=[[[false]],[[false],[false,true,false],[false]],[[false]]] var m=1;
dove
M=[M[0], ..., M[m-z], ...M[2m]] con z=m, ..., -m M[m-z]=[M[m-z][0], ..., M[m-z][m-|z|-y], ...,M[m-z][2(m-|z|)]] con y=m-|z|, ..., |z|-m M[m-z][m-|z|-y]=[M[m-z][m-|z|-y][0], ..., M[m-z][m-|z|-y][m-|z|-|y|-x], ..., M[m-z][m-|z|-y][2(m-|z|-|y|)]] con x = m-|z|-|y|, ..., |z|+|y|-m
che si amplia man mano si amplia quando le posizioni raggiunte $(x,y,z) \longrightarrow M[m-z][m-|z|-y][m-|z|-|y|-x]$ sono tali che $|x|+|y|+|z| = m$
if (Math.abs(x)+Math.abs(y)+Math.abs(z)==m){ M= [[[false]],...M.map(Z=>[[false],...Z.map(Y=>[false,...Y,false]),[false]]),[[false]]]; m++ }
ponendo poi, ogni volta che si aggiorna la posizione,
M[m-z][m-|z|-y][m-|z|-|y|-x]=true;
Possiamo elencare le posizioni vicine a $(x,y,z)$ non già occupate, tra le quali scegliere se possibile dove muovere al passo successivo
scelta=[]; if(! M[m-z-1][m-Math.abs(z+1)-y][m-Math.abs(z+1)-Math.abs(y)-x]) scelta.push([0,0,1]); if(! M[m-z+1][m-Math.abs(z-1)-y][m-Math.abs(z-1)-Math.abs(y)-x]) scelta.push([0,0,-1]); if(! M[m-z][m-Math.abs(z)-y-1][m-Math.abs(z)-Math.abs(y+1)-x]) scelta.push([0,1,0]); if(! M[m-z][m-Math.abs(z)-y+1][m-Math.abs(z)-Math.abs(y-1)-x]) scelta.push([0,-1,0]); if(! M[m-z][m-Math.abs(z)-y][m-Math.abs(z)-Math.abs(y)-x-1]) scelta.push([1,0,0]); if(! M[m-z][m-Math.abs(z)-y][m-Math.abs(z)-Math.abs(y)-x+1]) scelta.push([-1,0,0]); ...

Così ad esempio per passi si ottiene:


Si osservi che la passeggiata può terminare prima di completare il numero di passi stabilito, quando tutte le posizioni vicine sono già state precedentemente occupate.