图片
Recentemente, tenho jogado um quebra-cabeça cruzado digital chamado "Logic Painting". Superficialmente, ele apenas pinta uma grade baseada em fileiras e mais fileiras de números, mas na verdade esconde um sistema de restrições numéricas eficiente. Como um jogador de estratégia radical, desmontei diretamente sua lógica subjacente e descobri que, desde que eu domine algumas regras numéricas, a velocidade de resolução de quebra-cabeças pode ser duplicada.
Vamos falar primeiro sobre a estrutura numérica central: os números em cada linha e coluna representam o comprimento da grade preta contínua e a ordem é da esquerda para a direita ou de cima para baixo. Suponha que a largura da grade seja N e os números em uma linha sejam [a1, a2, ..., ak], então o número total de células ocupadas por esses números é a1+a2+...+ak, e pelo menos 1 espaço em branco é necessário entre os números (k-1 no total), então o comprimento total necessário = soma + (k-1). Se este valor for maior que N, significa que a combinação numérica atual não pode ser estabelecida e é eliminada diretamente. Pelo contrário, se a soma + (k-1) = N, então só pode haver exatamente 1 espaço em branco entre os números, e todas as grades são forçadas a serem determinadas, que é o estado de “preenchimento total”.
O primeiro passo da estratégia ideal: escaneie primeiro as linhas ou colunas cuja soma + (k-1) = N, você pode preencher diretamente todas as grades correspondentes e definir intervalos em branco. Isso pode criar rapidamente várias células identificadas e fornecer pontos de ancoragem para raciocínio cruzado.
O segundo passo é usar o “método de sobreposição”. Quando o valor de um determinado número é grande, por exemplo, o comprimento da linha é 10 e o número é [7], então as possíveis posições iniciais de 7 grades consecutivas são de 1 a 4 (porque o final não pode exceder 10). Entre essas 7 grades, as posições 4 a 7 (ou seja, o final da posição inicial 1 e o início da posição inicial 4 se sobrepõem) serão pintadas de qualquer maneira - o método de cálculo é: faixa de posição inicial = [1, N - a + 1], intervalo de sobreposição = [max(1, mínimo inicial + a - 1), min(N, máximo inicial + a - 1)]. A essência é traçar um intervalo e encontrar a interseção. Desenhar esse tipo de grade que deve ser pintada primeiro equivale a fixar as pistas principais.
A terceira etapa é a subtração numérica. Depois que uma linha ou coluna é parcialmente determinada, o número de células restantes não resolvidas pode ser atualizado e o espaço de combinação dos números restantes pode ser recalculado. Por exemplo, se uma linha já tiver 1 linha escurecida e o número for [2,1], então o espaço restante precisa ser realocado e as posições escurecidas restantes podem ser inferidas diretamente.
Após o teste real, de acordo com este processo de cálculo numérico, a velocidade média de resolução de um quebra-cabeça 20x20 pode ser reduzida em mais de 40%, o que é especialmente adequado para níveis com "pilhas de números" densas. A propósito, a pixel art gerada pelas imagens ocultas no jogo é muito requintada. Até cortei as imagens desenhadas e usei-as como avatares, o que foi um bônus inesperado 😂