Como o solucionador do Meowdoku lê um tabuleiro de uma captura
O solucionador do Meowdoku recebe uma entrada incomum: uma imagem do quebra-cabeça, e não o quebra-cabeça em si. Antes de resolver, ele precisa localizar o tabuleiro, contar as células e descobrir quais compartilham uma cor. Veja como cada decisão é tomada e onde ainda pode falhar.
A parte difícil não é ler as cores
Uma captura do Meowdoku contém muito mais do que o tabuleiro: cabeçalho, fichas de regras, cronômetro e geralmente a barra de status do celular. O tabuleiro é um bloco quadrado no meio, cuja posição e tamanho dependem do aparelho, e nada na imagem vem identificado.
Três incógnitas precisam ser resolvidas antes que valha a pena ler uma cor. Errar qualquer uma não deixa a resposta apenas um pouco imprecisa: cria outro quebra-cabeça, resolvido com confiança.
Tudo acontece no seu navegador
A captura nunca é enviada. A imagem é desenhada em um canvas, os pixels são lidos e todas as etapas seguintes rodam nessa matriz dentro da sua própria aba. Nenhum servidor vê a imagem nem guarda uma cópia.
Uma imagem que nunca sai do aparelho não precisa ser armazenada nem apagada depois. Sem ida e volta pela rede, o tabuleiro aparece em bem menos de um segundo.
Primeiro a imagem é reduzida para que o lado maior tenha no máximo 900 pixels. O processo quer uma cor representativa por célula, não uma foto nítida, e o trabalho por pixel cai com o quadrado da escala.
Etapa 1: encontrar o tabuleiro
O solucionador começa estimando o fundo. Ele amostra a faixa externa de 7% nos quatro lados e usa a mediana de cada canal, descartando pixels muito vivos para que um banner colorido no canto não distorça a estimativa.
Cada pixel é classificado como fundo ou não fundo, e os pixels úteis são contados linha a linha. Surge um perfil de densidade: quase zero nas margens, alto no tabuleiro e intermediário no cabeçalho. Sequências densas viram candidatas. Pequenos vales das linhas da grade são unidos, pois uma linha de um pixel não é um espaço vazio; o espaço real acima do tabuleiro permanece e exclui as fichas de regras.
O teste decisivo é a forma quadrada. Cada candidato é varrido no outro eixo e só permanece se largura e altura diferirem em cerca de menos de um terço e ocuparem ao menos 3% da imagem. Banners e barras são largos e baixos; numa captura do Meowdoku, o tabuleiro é a única coisa quadrada.
Se nenhum quadrado se destacar, o solucionador assume que você já recortou o tabuleiro e usa o quadro inteiro. É uma boa falha: a imagem que ele não localiza costuma ser a que não precisava ser localizada.
Etapa 2: contar a grade
Saber onde está o tabuleiro não diz se ele é 7×7 ou 9×9. O solucionador o atravessa em 400 passos e mede a mudança de cor, usando a média de 48 linhas paralelas no outro eixo para que um gato escuro isolado não pareça uma borda. As divisões surgem como picos regulares.
Em vez de medir o espaço entre os picos, ele testa hipóteses. Para cada N de 4 a 12, calcula onde estariam as N−1 bordas internas, procura um pico próximo e pontua o encaixe médio. Vence o N que melhor explica o perfil.
Os dois eixos são medidos separadamente e depois conciliados, porque o tabuleiro é quadrado. Se o passe horizontal encontra 8 e o vertical 7, um deles perdeu uma linha fraca e o número maior é usado.
Etapa 3: amostrar cada célula em um anel, não no centro
Com o tabuleiro localizado e a grade contada, é preciso obter uma cor por célula. O impulso natural é ler o pixel central.
Esse é justamente o pior pixel: é onde ficam o gato e o ✕. Num tabuleiro parcialmente resolvido, a amostra central trataria muitas células como se tivessem a cor do símbolo e inventaria regiões.
Por isso cada célula é amostrada em três anéis concêntricos, a 28%, 36% e 43% do raio, com dezesseis ângulos em cada um: 48 amostras por célula. O anel fica dentro da borda e fora do ícone. A mediana de cada canal elimina as poucas amostras sobre uma borda suavizada ou reflexo.
Etapa 4: agrupar as cores em exatamente N regiões
Agora há N×N cores para separar em regiões. O problema comum do agrupamento é não saber quantos grupos procurar; um palpite errado estraga a resposta silenciosamente.
As regras do Meowdoku dão esse número. Um tabuleiro N×N tem exatamente N regiões conectadas; um 9×9 tem nove, nunca oito ou dez. Isso transforma a pergunta aberta em k-means com k conhecido e torna esta etapa mais confiável que as duas anteriores.
Os centros iniciais são escolhidos pelo mais distante primeiro, espalhando-os pelos tons reais, e essa escolha é determinística. A mesma captura sempre produz o mesmo tabuleiro.
Depois os identificadores são renumerados na ordem de leitura, começando pela região da célula superior esquerda. A solução não depende disso; é apenas a ordem que uma pessoa usaria.
Etapa 5: resolver e procurar uma segunda solução
Com tamanho e regiões conhecidos, resolver é direto: usa-se o mesmo solucionador de restrições que cria os tabuleiros. O detalhe importante é pedir duas soluções, e não uma.
Um tabuleiro lido corretamente tem uma única solução. Duas indicam que alguma célula foi para a região errada; nenhuma indica restrições contraditórias causadas por outra leitura incorreta. A segunda busca valida a leitura inicial.
Onde falha e por que você pode pintar
Tudo antes da etapa 4 é uma aproximação e pode falhar. Estes são os casos mais comuns:
- Dois tons próximos numa captura comprimida. Artefatos JPEG podem unir duas regiões e dividir uma terceira para manter N grupos.
- Foto da tela em vez de captura. O ângulo torna as células irregulares e quebra a contagem e a amostragem em anel.
- Recorte que preserva parte da interface. Metade de uma ficha pode deslocar a caixa e empurrar os anéis para a célula vizinha.
- Tabuleiro quase concluído. Quanto mais gatos e ✕, maior a área coberta. Os anéis ajudam muito, mas não fazem milagres.
A ferramenta de pintar faz parte do projeto
Por isso qualquer célula detectada pode ser repintada ao arrastar, e o solucionador só roda quando há exatamente N regiões distintas, informando a contagem atual. Essa barreira impede uma resposta confiante baseada numa fusão ou divisão errada.
O tabuleiro é redesenhado com as cores da sua própria captura para você conferir a leitura. Se uma célula aparece na cor errada, ela está errada, e um arrasto corrige. A detecção faz os noventa e tantos por cento tediosos; você fornece o julgamento final.
Teste com um tabuleiro seu
Faça uma captura de um tabuleiro em que você travou, coloque-a no solucionador e confira as células lidas incorretamente. Os erros quase sempre aparecem nos casos previstos neste artigo.
O solucionador roda inteiramente no seu navegador. As capturas são lidas no aparelho e nunca enviadas.