Я пытаюсь выяснить способ создания случайных чисел, которые «чувствуют» случайные короткие короткие последовательности. Это для викторины, где есть четыре возможных варианта, и программное обеспечение должно выбрать одно из четырех мест, где можно поставить правильный ответ, прежде чем заполнять остальные три с помощью дистракторов.Лучшее случайное «чувство» целочисленного генератора для коротких последовательностей
Очевидно, что arc4random % 4
создаст более чем случайные результаты в течение длинной последовательности, но в краткой последовательности его вполне возможное (и частое появление!), Чтобы иметь пять или шесть одинаковых чисел, возвращаются в ряд. Именно этого я и стараюсь избегать.
Я также не хочу просто сказать «никогда не выбирайте один и тот же квадрат дважды», потому что это приводит только к трем возможным ответам на каждый вопрос, кроме первого. В настоящее время я делаю что-то вроде этого:
bool acceptable = NO;
do {
currentAnswer = arc4random() % 4;
if (currentAnswer == lastAnswer) {
if (arc4random() % 4 == 0) {
acceptable = YES;
}
} else {
acceptable = YES;
}
} while (!acceptable);
Есть ли лучшее решение для этого, что я пропускаю?
Я думаю, что ответ на этот вопрос будет сильно зависеть от того, сколько 4-сторонних «монет» подряд, поскольку может быть не решение для достаточно короткой последовательности. Вы наделали проблему сокращения степеней свободы, но моя интуиция говорит мне, что * любой * послевыборный процесс выбора уменьшит DoF. В вашем примере пост-вероятность того, что A будет следовать за А, станет 1/16 вместо 1/4 для A, B. Я ожидаю, что игрок заметит это, даже если она не заметила, что заметила. Люди действительно хороши в этом (так же, как и голуби). – msw
Я должен был указать, что последовательности открыты. Я думаю, что для большинства игроков они будут относительно короткими (до 100), но теоретически вы можете играть часами и проходить тысячи вопросов. Я не думаю, что это слишком важно, потому что игроки вряд ли помнят последовательность для более чем нескольких вопросов назад, хотя, как вы говорите, они могут заметить это, не заметив, что они замечают. :) –