Вернуть случайное число. Функция не должна возвращать одно и тоже число два раза подряд

Сначала делал так (дичь):

function randomNumWithoutDouble() {
  let res = Math.trunc(Math.random() * anything number);
  let res1 = res + 1 ;
  if (res1 !== res) return res1;
  else if (res1 === res1) return (res1 = res1 + 1);
}
console.log(randomNumWithoutDouble());

потом так:

let lastNumber;
function getRandNumDouble() {
  let newNum = Math.floor(Math.random() *anything number);
  if (newNum === lastNumber) {
    return getRandNumDouble();
  }
  return newNum;
}
function myFunction() {
  const number = getRandNumDouble();
  lastNumber = number;
  return number;
}
console.log(myFunction());

Ответы (1 шт):

Автор решения: Qwertiy

const gen = (() => {
  let last
  
  return () => {
    let res
    while ((res = ~~(Math.random() * 3)) === last);
    return last = res
  }
})()

for (var q=0; q<10; ++q) {
  console.log(gen())
}
.as-console-wrapper.as-console-wrapper { max-height: 100vh }

→ Ссылка