JSFiddle - React, Tailwind, and code Playground
by uggway
HTML
<div id='out'></div>
JavaScript
var olist=[],
list=[],
dlist=[],
xx,yy,zz,a,b,c,tid;
var did=document.getElementById('out');
function inList(el, idx, arr) {
if(tid == el.id) return false;
return true;
}
function add(x,y,z,s){
if ((x < 0)||(y < 0)||(z < 0) || (x > a) || (y > b) || (z > c)) return;
tid=x+(y<<8)+(z<<16);
// did.innerHTML+= x+','+y+','+z+','+tid+'<br>';
if(!list.every(inList) || !dlist.every(inList)) return;
if (olist[x] > s) olist[x]=s;
if (olist[y] > s) olist[y]=s;
if (olist[z] > s) olist[z]=s;
list.push({x:x,y:y,z:z,s:s,id:tid});
}
for(var i=0;i<11;i++)olist[i]=11;
a=10;b=8;c=5;
xx=7;yy=1;zz=2;
add(xx,yy,zz,0);
while(list.length >0){
p=list.shift();
// did.innerHTML+= p.x+','+p.y+','+p.z+','+p.id+'<br>';
if (a-p.x < p.y) {tx=a; ty=p.y - (a-p.x);tz=p.z;} else {tx= p.x+p.y; ty=0; tz=p.z;}
add(tx,ty,tz,p.s+1);
if (a-p.x < p.z) {tx=a; tz=p.z - (a-p.x);ty=p.y;} else {tx= p.x+p.z; tz=0; ty=p.y;}
add(tx,ty,tz,p.s+1);
if (b-p.y < p.x) {ty=b; tx=p.x - (b-p.y);tz=p.z;} else {ty= p.y+p.x; tx=0; tz=p.z;}
add(tx,ty,tz,p.s+1);
if (b-p.y < p.z) {ty=b; tz=p.z - (b-p.y);tx=p.x;} else {ty= p.y+p.z; tz=0; tx=p.x;}
add(tx,ty,tz,p.s+1);
if (c-p.z < p.x) {tz=c; tx=p.x - (c-p.z);ty=p.y;} else {tz= p.z+p.x; tx=0; ty=p.y;}
add(tx,ty,tz,p.s+1);
if (c-p.z < p.y) {tz=c; ty=p.y - (c-p.z);tx=p.x;} else {tz= p.z+p.y; ty=0; tx=p.x;}
add(tx,ty,tz,p.s+1);
dlist.push(p);
}
for(i=0;i<11;i++)if(olist[i]!=11)did.innerHTML+=i+':'+olist[i]+'<br>';