Разделить победителя:
Вы можете уменьшить количество проходов в методе грубой силы:
допустим, ваш предпочтительный (максимальный) размер шрифта равен 40, а минимальный размер шрифта равен 0
if (40 == false && 0 == true)
- 20 = true // делим возможности пополам с каждым предположением
- 30 = ложь
- 25 = верно
- 27 = истина
- 28 = ложь
- 27 побед
Каким образом это лучше?
это заняло 6 догадок вместо 13, и даже если бы 20, 12 или 39 были правильными ответами, всегда требовалось около 6 догадок. поэтому в большинстве случаев не только меньше догадок, но и более согласованных, что важно для удобства пользователей.
Я думаю, что число предположений, которое требуется при делении целых чисел на половину каждый раз, равно квадратному корню из диапазона, который вы ищете, плюс один. Math.sqroot (40-0) + 1 (это всего лишь предположение, не стесняйтесь меня поправлять.)
ваш минимальный размер шрифта, вероятно, не равен 0, поэтому его увеличение ускорит поиск ответа.
Иллюстрация:
Это все равно, что играть в «Угадай, кто», игроки, которые спрашивают «имеет ли твое имя букву А» и сокращают возможности вдвое, независимо от того, что ты отвечаешь, обычно находит ответ быстрее, чем игрок, который спрашивает о 1 персонаже за ход », - твое имя Сэм "" Тебя зовут Алекс "
Альтернатива: начать с правильной догадки, затем проверить на точность
Я также рекомендовал бы работать в некоторой логике, чтобы использовать результат, предоставленный ответом Дарена, используя fontMetrics в качестве хорошего начального предположения, а затем проверить его, если он соответствует критерию +2, если он не соответствует критерию -2; если новый тест соответствует тесту 1, который вы пропустили, и вы будете знать свой ответ, если не попытаетесь переместить еще 2 и т. д., но в идеале ответ fontMetrics не должен превышать 4 ...
Я подозреваю, что это даст самые быстрые средние результаты реальных случаев использования.
если вы хотите использовать int и предположить, что погрешности метрик шрифта минимальны, вероятно, потребуется всего 2 или 3 догадки.