Fizemos um pequeno sorteio para o lançamento do Toolz e fiz o sorteio da maneira preguiçosa: colei a lista de participantes em uma planilha e adicionei uma coluna de =RAND(), e ordenada por isso Funcionou, mas um amigo que faz estatísticas para viver olhou por cima do meu ombro e disse, & quot; você sabe que isso não é realmente uniforme, certo?" Ele estava correto, e a toca do coelho em que caí naquela noite é uma grande parte do porquê Toolz agora tem um apropriado lista randomizador isso faz o embaralhar da maneira certa Este guia é o que EU aprendi, escrito para qualquer um que precisa tirar nomes de um chapéu e quer que o chapéu seja honesto.
tl;dr: Um randomizador de lista reordena uma lista inteira aleatoriamente (embaralhar) ou extrai uma amostra aleatória dela (escolher).Os bons usam o embaralhamento Fisher-Yates e uma fonte aleatória criptográfica para que cada ordenação seja igualmente provável. Use o embaralhamento para ordem de turno e assentos e escolha brindes e amostras. Esta ferramenta roda no lado do cliente, desenha sem substituição por padrão para que os vencedores sejam únicos e se recusa a desenhar mais itens exclusivos do que a lista contém.
Eu construo produtos SaaS no Laravel e React, então me importo com duas coisas aqui: acertar a matemática e tornar a interface óbvia o suficiente para que você nunca se pergunte se o sorteio foi justo. Ambos são mais importantes do que parecem.
O que é um randomizador de lista?
Um randomizador de lista pega uma lista de itens, um por linha, e reorganiza ou amostra aleatoriamente. Um embaralhamento justo é um problema resolvido com uma resposta errada que parece certa: a classificação por uma chave aleatória é tendenciosa, enquanto o embaralhamento de Fisher-Yates não é, e o navegador fornece os bits imparciais crypto.getRandomValues(). Cole em nomes, prêmios, tarefas, equipes ou ideias, e ele entrega a lista inteira de volta em uma ordem embaralhada ou escolhe o número de vencedores que você pediu É a versão do software de desenhar boletos dobrados de uma tigela, com a vantagem de remover o viés silencioso que os humanos introduzem quando tentam escolher o & quot; aleatório" à mão.
Na verdade, existem apenas duas operações, e saber qual delas você quer é toda a habilidade Shuffle retorna cada item que você deu, apenas em uma nova ordem aleatória, então nada é adicionado ou perdido Pick retorna um subconjunto, desenhando um número definido de itens fora da piscina Um sorteio é uma escolha Decidir quem apresenta primeiro em um stand-up é um embaralhamento A maioria das pessoas alcança o errado pelo menos uma vez, geralmente tentando " embaralhar e tirar os três primeiros & quot; quando Pick com uma contagem de três faz a mesma coisa em uma etapa.
Como funciona realmente uma confusão justa?
Aqui está a parte em que o meu amigo estatístico estava a chegar O truque da folha de cálculo, atribuindo um número aleatório a cada linha e ordenação, parece aleatório mas não é uniforme Algoritmos de ordenação fazem comparações, e quando duas chaves aleatórias por acaso estão próximas, pequenos vieses na forma como os laços e comparações resolvem vazam para o resultado Em listas pequenas a inclinação é pequena, mas é real, e para qualquer coisa onde a justiça seja o ponto, o & quot; close suficiente" não é uma grande resposta.
O método correto é o shuffle de Fisher-Yates, às vezes chamado de shuffle de Knuth depois que Donald Knuth popularizou a versão in-place Foi descrito por Ronald Fisher e Frank Yates em 1938 e dada a sua forma de computador moderna por Richard Durstenfeld em 1964. a ideia é simples Caminhe a lista do último item para o segundo Em cada posição, escolha um índice aleatório desde o início da lista até e incluindo a posição atual, então troque os dois itens Porque cada swap desenha de um intervalo cada vez menor e bem definido, cada uma das ordens possíveis sai com probabilidade exatamente igual Ele é executado em tempo linear, tocando cada item uma vez, e não precisa de memória extra além da própria lista.
o lista randomizador usa este algoritmo diretamente Quando você escolhe sem substituição, é o mesmo embaralhamento interrompido cedo: embaralhar a lista, em seguida, tomar os primeiros N itens Isso garante que os vencedores são distintos e que cada grupo possível de vencedores é igualmente provável.
De onde vem a aleatoriedade?
Um algoritmo é tão justo quanto os números aleatórios que o alimentam Se a fonte da aleatoriedade for previsível ou tendenciosa, um embaralhamento perfeito ainda produz um resultado distorcido É aqui que o navegador ganha seu sustento.
Navegadores modernos expõem crypto.getRandomValues, parte da API de criptografia da Web W3 C, que preenche uma matriz com valores aleatórios criptograficamente fortes extraídos do pool de entropia do sistema operacional Isso é uma fonte muito mais forte do que Math.random0, que é um gerador pseudo-aleatório rápido nunca destinado a nada onde a previsibilidade importa O randomizador prefere crypto.getRandomValues e só volta a cair Math.random quando a fonte de criptografia está genuinamente indisponível, o que em um navegador atual quase nunca está disponível.
Há mais uma sutileza que EU tive que acertar Para transformar um número aleatório de 32 bits em um índice imparcial de 0 a N menos 1, você não pode simplesmente pegar o restante depois de dividir por N, porque a menos que N se divida uniformemente no intervalo, os índices baixos aparecem um pouco mais de vezes A correção é a amostragem de rejeição: calcule o maior múltiplo de N que cabe no intervalo, e se um sorteio cair acima desse corte, jogue-o fora e desenhe novamente Custa um número insignificante de sorteios extras e remove o viés inteiramente A ferramenta faz isso em cada índice que escolhe, que é o tipo de detalhe que ninguém percebe até que esteja faltando.
Como faço para usar o randomizador?
A interface tem um botão e um par de escolhas Aqui é como EU executá-lo.
Cole sua lista na caixa de entrada, um item por linha Se você copiou uma célula separada por vírgulas de uma planilha, mude o separador de entrada para vírgula e ele se dividirá em vírgulas Em vez disso, O comportamento de corte e gota em branco está ativado por padrão, então linhas vazias perdidas e espaços iniciais acidentais não se tornam entradas fantasmas.
Escolha o seu modo Shuffle reordena tudo Escolha sorteios vencedores Se escolher Escolha, aparece um pequeno painel onde define quantos desenhar e se são permitidas repetições Deixe repetições desligadas para um sorteio para que cada vencedor seja uma pessoa diferente Ative as repetições apenas quando realmente quiser amostragem com substituição, por exemplo, quando estiver simulando sorteios semelhantes a dados e o mesmo valor puder ser legitimamente recorrente.
Clique em Randomizar Você obtém um resultado novo e independente todas as vezes, então se você quiser redesenhar basta clicar novamente Copie a saída com um clique para colá-la em seu anúncio, seu ticket ou onde quer que o resultado precise viver Se você pedir mais vencedores exclusivos do que a lista pode fornecer, a ferramenta informa em vez de retornar silenciosamente uma lista curta ou repetida, o que é um erro que vi outras ferramentas cometerem.
Na prática, as listas que EU colar estão por todo o mapa Alguns dias é uma coluna de e-mails de clientes para um sorteio de prêmios, outros dias são os nomes da minha equipe para quem analisa o próximo pedido pull, e uma vez que era cada restaurante a uma curta distância porque ninguém poderia decidir sobre o almoço A ferramenta não se importa com o que os itens são, apenas que eles são separados de forma limpa É por isso que as opções de entrada valem um segundo de atenção: se a sua fonte é uma célula de planilha, o separador de vírgulas salva você da edição manual, e se é uma cópia-colar bagunçada com linhas em branco, o padrão drop-blank silenciosamente limpa antes do sorteio Um minuto gasto formatando a entrada é um minuto que você não gasta discutindo sobre se uma linha vazia perdida contou como uma entrada.
Quando devo embaralhar e quando devo escolher?
Os dois modos cobrem trabalhos diferentes, e a tabela abaixo é a folha de dicas que EU gostaria de ter quando comecei.
| Você quer... | usar | Repete | por que |
|---|---|---|---|
| Decida falar ou faça o pedido | Embaralhar | n/a | Todos ficam em, a ordem é justa |
| Sorteie um vencedor do sorteio | Escolha, conte 1 | Desligado | Único resultado único |
| Sorteie vários vencedores de prêmios | Escolha, conte N | Desligado | Vencedores distintos, sem mergulho duplo |
| Atribua pessoas a duas equipes | Embaralhe, depois se separe | n/a | Divida a lista embaralhada ao meio |
| Amostra com substituição para um sim | Escolha, conte N | Em | O mesmo item pode ser recorrente por design |
| Randomize uma lista de reprodução ou lista de leitura | Embaralhar | n/a | Reordenar sem deixar cair nada |
A regra de ouro: se a contagem de itens deve permanecer a mesma, embaralhar Se você quiser menos itens fora do que você colocar em, escolha A atribuição da equipe é o único que as pessoas overthink Embaralhe a lista completa, em seguida, tomar o primeiro tempo como equipe A eo resto como equipe B, e ambas as equipes são aleatórios e equilibrados em tamanho.
É justo o suficiente para fazer um sorteio público?
Sim, e a razão vale a pena afirmar claramente porque o & quot; fair" é todo o valor da ferramenta A combinação de um embaralhamento Fisher-Yates, uma fonte aleatória criptográfica e amostragem de rejeição significa que cada participante tem uma chance idêntica e cada conjunto possível de vencedores é igualmente provável Isso é uma garantia mais forte do que um empate físico, onde o tamanho do deslizamento, dobrar e quão bem a tigela é misturada, todos introduzem viés.
Como o sorteio é executado inteiramente no seu navegador, você pode fazê-lo ao vivo na tela durante um stream ou uma reunião, que é a transparência que as pessoas desejam de um sorteio público Nada é enviado para um servidor, portanto, não há etapa oculta onde o resultado possa ser adulterado entre o clique e o anúncio Se você quiser uma trilha de auditoria, registre a tela do sorteio: a lista de participantes está visível, o clique é visível e os vencedores aparecem imediatamente.
A minha lista é privada?
Isso importa mais do que parece à primeira vista, porque as listas que as pessoas randomizam muitas vezes não são públicas As listas de candidatos, os nomes internos das equipes, as entradas dos clientes e as listas de e-mail são todas sensíveis O randomizador processa tudo localmente com JavaScript simples Sua lista nunca é carregada, registrada ou armazenada, e você pode confirmar isso na guia de rede do navegador, onde clicar em Randomizar não dispara nenhuma solicitação. Ele também continua funcionando offline depois que a página é carregada.
Essa é uma postura deliberada em Toolz, e escrevi sobre o raciocínio na nota sobre Privacidade de dados em ferramentas online. Um randomizador é um bom exemplo de por que é importante: a entrada geralmente é uma lista de pessoas reais, e uma lista de pessoas reais é exatamente o tipo de coisa que você não deseja em um log de solicitações em algum servidor que você nunca auditou.
Alguns hábitos que tornam os sorteios mais limpos
Limpe a lista antes de desenhar Ative remover duplicatas se uma pessoa aparecer duas vezes, para que uma entrada dupla não duplique secretamente suas chances O lançamento de linhas em branco está ativado por padrão, mas vale a pena dar uma olhada para garantir que uma linha vazia à direita não tenha sido contada.
Combine a contagem com os prêmios No modo Pick, defina a contagem para o número exato de vencedores que você precisa e deixe as repetições desligadas Se você tiver três prêmios, compre três de uma vez ao invés de clicar em um único sorteio três vezes, o que evita que o estranho caso do mesmo nome apareça duas vezes em cliques separados.
Redesenhar abertamente, não secretamente Se um vencedor é inelegível, remova-os e redesenhe na frente de quem está assistindo A justiça vem do processo ser visível, não do resultado ser final no primeiro clique.
Mantenha-o no navegador Como em cada ferramenta que envio, o processamento local é o padrão porque é mais rápido e privado Se você estiver montando um kit pessoal de pequenos utilitários, o gerador de números aleatórios emparelha naturalmente com o randomizador para sorteios numéricos e o mais amplo Ferramentas de produtividade do desenvolve roundup explica por que vale a pena construir uma caixa de ferramentas que priorize o navegador.
Ferramentas relacionadas que valem a pena dar uma olhada
Se a seleção aleatória for uma necessidade recorrente, alguns vizinhos ficam por perto. O gerador de números aleatórios desenha números em um intervalo com a mesma aleatoriedade de grau criptográfico, que é o que você deseja quando a coisa que você está escolhendo é um valor em vez de um item de uma lista Gerador UUID produz identificadores exclusivos para registros e dados de teste. O gerador senha aplica a mesma fonte aleatória forte para produzir senhas seguras Todos os três são executados no navegador sem inscrição, exatamente como o randomizador, e EU cubro o lado identificador dessa família no guia gerador de senha.
Perguntas frequentes
Como funciona o randomizador de lista?
A ferramenta lê uma lista de um item por linha e, em seguida, reordena cada item ou desenha os vencedores que você solicitou. O Shuffling usa o algoritmo Fisher-Yates, que acompanha a lista uma vez e troca cada item por uma posição anterior escolhida aleatoriamente, produzindo uma ordem uniformemente aleatória. As posições aleatórias vêm do gerador criptográfico do navegador para que o resultado seja genuinamente imparcial.
A randomização é realmente justa?
Sim. Ele extrai de crypto.getRandomValues, a fonte aleatória criptográfica incorporada em navegadores modernos, e usa amostragem de rejeição para que nenhum índice seja ainda um pouco mais provável do que outro Combinado com o embaralhamento Fisher-Yates, cada ordenação possível de sua lista tem uma chance igual, que é mais justa do que o embaralhamento manual ou uma classificação de planilha com uma chave aleatória.
Como escolho um vencedor aleatório de uma lista de nomes?
Cole seus nomes um por linha, mude para o modo de escolha, defina a contagem como 1 e clique em Randomizar. A ferramenta retorna um único nome aleatório. Para atrair vários vencedores de uma só vez, defina a contagem mais alta e deixe as repetições desativadas para que cada vencedor seja único.
Qual é a diferença entre shuffle e pick?
Shuffle retorna toda a sua lista em uma nova ordem aleatória, para que nada seja adicionado ou removido, apenas reorganizado. Pick Retorna um subconjunto, desenhando o número de vencedores que você especificar na lista. Use Shuffle para obter ordem de turno ou assentos e escolha para brindes, amostras ou escolher algumas pessoas de um grupo maior.
O mesmo item pode ser escolhido mais de uma vez?
Somente se você ativar repetições Por padrão, o modo Pick desenha sem substituição, então cada vencedor é um item diferente, que é o que um sorteio ou sorteio precisa, ativar repetições permite amostragem com substituição, onde o mesmo item pode surgir novamente, o que é útil para simulações.
Por que não pode escolher mais itens exclusivos do que minha lista?
Sem repetições, cada vencedor deve ser um item distinto, então você não pode sortear dez vencedores únicos de uma lista de oito. Quando isso acontece, a ferramenta informa em vez de retornar um resultado errado. Abaixe a contagem para corresponder ao tamanho da sua lista ou ative as repetições para que os itens possam ser reutilizados.
Minha lista foi carregada em um servidor?
Não. Toda análise e randomização são executadas localmente em seu navegador com JavaScript simples, e nada é transmitido, registrado ou armazenado. Você pode confirmar isso na guia de rede do seu navegador, onde nenhuma solicitação é feita quando você clica em Randomizar. Também funciona offline depois que a página é carregada.
Posso usar para sorteio ou sorteio?
Sim. Cole seus participantes um por linha, use o modo de escolha com as repetições desativadas e defina a contagem para o número de prêmios. Cada clique desenha um novo conjunto independente de vencedores. Como o sorteio é imparcial e acontece do lado do cliente, você pode executá-lo ao vivo na tela para obter transparência.



