🪜 Jogo da Escada (Amidakuji)
Clique em 'Desenhar escada' e a ferramenta desenhará uma linha vertical por jogador, depois distribuirá horizontalmente os degraus em 12 linhas fixas usando Math.random(). Como cada degrau troca apenas duas linhas vizinhas e nenhuma linha pode ter dois degraus adjacentes, a escada é matematicamente garantida para atribuir a cada jogador exatamente um resultado — ninguém se repete, independentemente de onde os degraus caiam. Toque no nome de um jogador depois e o canvas redesenhará a mesma escada com o caminho desse jogador destacado, permitindo que você veja o processo de decisão passo a passo, em vez de apenas ser informado do resultado final.
O Jogo da Escada gera uma escada aleatória de tipo amidakuji (ghost-leg) no seu navegador, usando o Math.random() do JavaScript para posicionar os degraus e a API HTML Canvas para desenhar e animar o caminho de cada jogador até um resultado distinto.
Privado por design. Esta ferramenta funciona inteiramente no seu navegador — nada do que você digita é enviado ou armazenado, e funciona offline.
Sobre
A afirmação de justiça aqui não é marketing — ela surge diretamente da forma como os degraus são posicionados. Cada uma das 12 linhas é construída percorrendo cada par de linhas vizinhas e rolando Math.random() < 0,45 para um degrau, mas o código pula explicitamente uma posição se a posição à sua esquerda tiver um degrau ("!(i > 0 && row[i-1])"). Esse único guardião significa que nenhuma linha pode conter dois swaps sobrepostos, então cada linha, por si só, é um conjunto limpo de swaps não sobrepostos — uma permutação das colunas. Empilhar doze dessas sobrepostas é apenas compor doze permutações seguidas, e a composição de permutações é sempre uma permutação. É por isso que dois jogadores acabarem com o mesmo resultado não é apenas improvável aqui, é estruturalmente impossível, independentemente de como os rolos aleatórios saírem.
Essa garantia não abrange como *uniformemente* os resultados se distribuem entre todas as possíveis combinações. A escada sempre usa as mesmas 12 linhas, independentemente de quantos jogadores você digitar — o código tem isso como uma constante fixa, e não algo que aumenta com o número de jogadores. Para o intervalo de 3 a 10 jogadores para o qual a ferramenta foi ajustada, 12 linhas com 45% de probabilidade de cada rolo fornecem suficientes cruzamentos para parecer um verdadeiro embaralhamento. No entanto, se você aumentar para 30 ou 50 nomes, 12 linhas simplesmente não são suficientes para atingir todas as possíveis combinações com chances iguais — as pessoas tendem a cair perto da coluna em que começaram, em vez de se distribuírem uniformemente como em um verdadeiro embaralhamento. Se você precisa de um sorteio justo para um grupo grande, um randomizador plano é uma ferramenta matemática melhor do que uma escada limitada a doze linhas.
Também é importante ser direto sobre o que Math.random() é e não é. É o gerador pseudorrandômico embutido no navegador — rápido, suficiente para decidir quem lava os pratos, e algo que normalmente um participante não pode influenciar de fora da página. Mas ele não é criptograficamente seguro: seu estado interno, em princípio, é previsível se alguém observar suficiente saída ou souber o algoritmo do motor, por isso, sorteios com dinheiro real, loterias licenciadas e qualquer coisa com implicações legais usam crypto.getRandomValues() ou um RNG auditado e certificado. Esta ferramenta não se refere a nenhum desses, e não precisa para dividir tarefas ou decidir quem compra o café — apenas não coloque dinheiro real em prêmios por trás dele.
Do lado da interação: "Desenhar escada" executa todo o processo de colocação de degraus de novo, então cada clique é um sorteio independente, sem memória do último. "Revelar todos" pula a revelação um por um e imprime todas as combinações jogador-resultado na mesma escada de uma só vez. Não há botão de salvar, exportar ou compartilhar embutido nessa versão — a escada existe apenas como pixels no elemento canvas, e recarregar a página apaga-a junto com as duas caixas de texto, que voltam ao estado inicial com os nomes e prêmios de exemplo. Se você quiser um registro do resultado, a única opção é usar a ferramenta de captura de tela nativa do seu navegador ou dispositivo antes de navegar para longe. Tudo o mais sobre a ferramenta está exatamente como anunciado: ela roda totalmente no lado do cliente, sem solicitações de rede após a página carregar, então nada que você digitar é enviado, e ela continua funcionando mesmo sem conexão.
Como usar
- Digite o nome de cada jogador na caixa de Jogadores, um nome por linha — os nomes de exemplo (Amy, Ben, Cara, Dan) apenas mostram o formato e podem ser substituídos completamente.
- Digite os resultados correspondentes na caixa de Resultados, um por linha — a ferramenta recusará desenhar e mostrará um erro se as duas listas não tiverem o mesmo número de linhas.
- Clique em "Desenhar escada" para executar uma nova rodada de chamadas Math.random() e revelar um novo conjunto de degraus no canvas — cada clique é um sorteio independente.
- Toque ou clique em qualquer chip de nome de jogador acima da escada para animar o caminho único desse jogador em cor de destaque, da parte superior para a inferior, revelando seu resultado correspondente abaixo.
- Clique em "Revelar todos" se preferir pular a revelação um por um e ver todas as combinações jogador-resultado impressas de uma só vez na mesma escada.
Perguntas frequentes
- A escada usa um gerador de números aleatórios verdadeiramente aleatório e imprevisível?
- Ela usa o Math.random() embutido no navegador, e não o gerador criptograficamente seguro crypto.getRandomValues(). Isso é perfeitamente adequado para dividir tarefas ou decidir quem compra o café, mas o estado interno do Math.random() não é imune à previsão, em princípio, se alguém puder observar saídas suficientes anteriores. Não use esta ferramenta — ou qualquer escada baseada em Math.random() — para executar um sorteio envolvendo dinheiro real, prêmios com peso legal ou qualquer situação em que um participante tenha incentivo para reengenhar o sorteio.
- A mapeação dos resultados é realmente um-a-um, ou dois jogadores poderiam acabar com o mesmo prêmio?
- Um-a-um é garantido por construção, não por sorte. Cada degrau conecta apenas duas linhas vizinhas, e o código rejeita explicitamente colocar dois degraus sobrepostos na mesma linha. Isso faz com que cada linha da escada seja um pequeno shuffle não sobreposto, e empilhar doze desses shuffles nunca pode apontar duas linhas de início para a mesma linha de fim — a atribuição é uma bijeção matemática, independentemente de como os rolos aleatórios saírem.
- A escada ainda é justa quando adiciono muitos jogadores?
- Este é o limite honesto: a escada sempre usa 12 linhas fixas, independentemente do número de jogadores. Com os 3 a 10 jogadores para os quais esta ferramenta foi construída, isso é suficiente para sentir-se como um shuffle justo. No entanto, ao inserir 30 ou 50 nomes, 12 linhas não podem produzir quase o suficiente de cruzamentos para distribuir resultados uniformemente entre tantas combinações possíveis — os jogadores tendem a cair mais perto de suas posições iniciais do que um shuffle verdadeiramente uniforme. Para um grupo grande, uma ferramenta de atribuição aleatória plana é uma melhor opção do que uma escada limitada a 12 linhas.
- Posso salvar ou compartilhar minha escada finalizada?
- Não através da ferramenta em si — não há botão embutido de salvar, baixar ou compartilhar nesta versão. A escada existe apenas como pixels desenhados no elemento canvas enquanto a página está aberta. Se você quiser uma prova do resultado (o clássico "captura de tela para resolver o debate"), use a função de captura de tela nativa do seu navegador ou dispositivo antes de recarregar a página — recarregar redefinirá o canvas e ambas as caixas de texto de volta aos dados de exemplo.
- Esta ferramenta envia algo para a internet e funciona sem conexão?
- Nenhuma upload, e sim, funciona offline. A colocação de degraus, desenho no canvas e rastreamento de caminhos ocorrem totalmente dentro do motor JavaScript do seu navegador, sem solicitações de rede, então a ferramenta continua funcionando após a página carregar, mesmo sem conexão alguma, e os nomes e resultados que você digita nunca saem do seu dispositivo.