Настройка взвешенного массива. Допустим, последнее значение было 2. Создайте массив следующим образом:
array = [0,0,0,0,1,1,1,1,2,3,3,3,3];
Затем выберите число в массиве.
newValue = array[arc4random() % 13];
Теперь перейдите к использованию математики вместо массива.
newValue = ( ( ( arc4random() % 13 ) / 4 ) + 1 + oldValue ) % 4;
Для P возможностей и веса 0<W<=1
используйте:
newValue = ( ( ( arc4random() % (P/W-P(1-W)) ) * W ) + 1 + oldValue ) % P;
Для P = 4 и W = 1/4, (P / W-P (1-W)) = 13. Это говорит о том, что последнее значение будет на 1/4 вероятнее, чем другие значения.
Если вы полностью исключите самый последний ответ, он будет так же заметен, как и самый последний ответ, появляющийся слишком часто. Я не знаю, какой вес вам подойдет, но 1/4 - хорошая отправная точка.