Sto creando un semplice sistema di parentesi e ho bisogno di un modo per verificare se ci sono un numero corretto di squadre, OPPURE se il mio programma ha bisogno di compensare i ciao round.Determinazione dei poteri di 2?
In questo momento, sto controllando per "potenze di due" con questa funzione:
function validBracket(data) {
var x = data.teams.length;
return ((x != 0) && !(x & (x - 1)));
}
Questo funziona abbastanza bene, ma Sto dovendo sapere quanti Bye arrotonda da aggiungere. Ad esempio, se avessi 16 teams
, non avrei bisogno di aggiungere più squadre. Tuttavia, se avessi 12 teams
, mi occorrerebbe il primo 4 teams
per ricevere un bye round.
Come è possibile calcolare il numero di round di addio da aggiungere alla staffa? E sarebbe difficile codificare una serie di poteri di due?
In pseudo-codice, qualcosa di simile a questo è quello che pensavo:
if(validateBracket(data)) {
// Valid number of teams (power of two). Keep going.
} else {
var byeRounds = calculateByeRounds();
}
NOTA: avrei preferito non utilizzare una vasta gamma di potenze di due, come di seguito:
var powersOfTwo = [2,4,8,16,32,...];
Il ragionamento dietro questo è che limiterei il numero di squadre che potrebbero essere messe nel sistema (tuttavia, non penso che una persona avrebbe più di 256 squadre).
calcolare la successiva potenza di 2 [qui] (http://stackoverflow.com/questions/1322510/given-an-integer-how- do-i-find-the-next-largest-power-of-two-using-bit-twiddlin) e sottrarre dal tuo intero corrente – Drakes
@Drakes Grazie, guarda male! –
Motivo del downvote? –