# JavaScript (ES6), <s>78</s> 75 bytes x=>x.map(y=>y.map(z=>+s.splice(Math.random()*s.length,1)),s=eval(`[${x}]`)) This is the first time I can remember using `.splice()` in a code-golf challenge... You can golf off two bytes by sorting the array beforehand: x=>x.map(y=>y.map(z=>s.pop()),s=eval(`[${x}]`).sort(_=>Math.random()-.5)) However, this seems to put the last integer first the majority of the time, so I'm going to assume that the integers aren't uniformly distributed.