Divide una conquista:
si potrebbe ridurre il numero di passaggi nel metodo forza bruta: diciamo vostro preferito (massimo) la dimensione del font è 40 e hai una dimensione minima del carattere di 0
se (40 == false & & 0 == true)
- 20 = vere possibilità // divide a metà con ogni indovinare
- 30 = falso
- 25 = true
- 27 = true
- 28 = false
- così 27 vittorie
In che modo questo è meglio?
ci sono voluti 6 tentativi invece di 13, e anche se 20, 12 o 39 erano la risposta giusta, ci vorrebbero sempre circa 6 ipotesi. quindi non è solo il numero di tentativi che si verifica per la maggior parte del tempo, è più coerente e importante per l'esperienza dell'utente.
Penso che il numero di tentativi necessari per dividere la metà ogni volta sia la radice quadrata dell'intervallo che si sta cercando più uno. Math.sqroot (40-0) + 1 (Questa è solo una supposizione, sentiti libero di correggermi.) la tua dimensione minima del font probabilmente non è 0, quindi aumentare questo accelererebbe la ricerca di una risposta.
Illustrazione:
È come giocare Guess Who, i giocatori che chiedono "fa il tuo nome avere un A" e taglia le possibilità in mezza non importa quale si risponde in genere trova la risposta più veloce rispetto al giocatore che chiede circa 1 carattere ogni turno "è il nome di Sam" "è il nome di Alex"
alternativa: a partire da una buona congettura, poi prova per la precisione vorrei anche promuovere lavorare in una logica di utilizzare il risultato fornito da La risposta di Daren usando fontMetrics come buona ipotesi di partenza e poi te st it, se si adatta test +2 se non si adatta test -2; se il nuovo test si adatta prova il 1 che hai saltato e saprai la tua risposta, se non provi a spostare un altro 2 e così via, ma idealmente la risposta di fontMetrics non è più di 4 lontana ...
Sospetto che questo produrrà i risultati medi più veloci dei casi d'uso reali.
partendo dal presupposto che si desidera un valore int e presupponendo che le imprecisioni dei caratteri siano minime, ciò probabilmente richiederà solo 2 o 3 ipotesi.
Vedi anche [questa domanda] (http://stackoverflow.com/q/36575192/1.329.652). –