Slitherlink

site: slitherlink.lucas.mat.br código no GitHub atualizado em

Um toolkit do clássico Slitherlink (também conhecido como Loop the Loop ou Fences) — o jogo em que se desenha um único loop fechado em uma grade de pontos, de modo que cada célula numerada tenha exatamente aquela quantidade de lados no loop. Solução única, alcançável só por lógica.

Duas implementações que compartilham as mesmas ideias. Uma biblioteca em Python (NumPy, NetworkX, OpenCV, OR-Tools opcional) com gerador construtivo, solver por propagação de restrições, estratégias de redução de pistas e renderização em imagem/vídeo. E uma versão browser em vanilla JS — SPA estática, sem framework e sem backend, com a engine inteira portada e um tabuleiro interativo.

Teoria por trás. O loop é a fronteira de uma região (curva de Jordan); a unicidade é monotônica em remoção de pistas. Geração usa crescimento construtivo de regiões com invariantes — sem rejection sampling. Solver combina propagação de restrições com backtracking, união-busca pra detectar loop único e oráculo opcional via OR-Tools CP-SAT pra tabuleiros grandes. Redução de pistas tem múltiplas estratégias (greedy, busca binária, CEGAR) trocando velocidade por minimalidade.