Motor de xadrez minimax implementado com expressões regulares
(nicholas.carlini.com)Motor de xadrez minimax de 2 níveis
-
Xadrez e expressões regulares: O autor criou um programa que joga xadrez usando apenas expressões regulares. Esse programa recebe um tabuleiro de xadrez como entrada e é composto por 84.688 expressões regulares para executar jogadas válidas.
-
Design de CPU com expressões regulares: Usando expressões regulares, foi projetado um conjunto de instruções de execução sem condição e de dados de uma única instrução múltipla (SIMD). Isso permite que um programa que joga xadrez seja escrito.
-
Estrutura de dados: O estado atual do computador é representado por uma única string contendo a "pilha" do programa e todas as variáveis. Cada instrução manipula as variáveis da pilha ou realiza operações de leitura/gravação em uma variável específica.
-
Operações básicas da pilha:
- Comando push: adiciona um valor ao topo da pilha.
- Comando pop: remove o elemento do topo da pilha.
-
Comandos variável <-> pilha:
- Leitura de variável: carrega o conteúdo da variável no topo da pilha.
- Atribuição de variável: atribui um valor à variável, atualizando-a se ela já existir ou criando uma nova se não existir.
-
Condicionais: Usa-se condicionais para controlar o fluxo do programa. Dependendo da condição, parte do programa é ativada ou desativada.
-
Impossibilidade de loops: Como loops não podem ser implementados apenas com expressões regulares, todos os cálculos iterativos precisam ser expandido previamente.
-
Execução multithread: É possível executar várias threads simultaneamente aproveitando a função de substituição global de regex.
-
Escrita do motor de xadrez: O motor de xadrez é escrito de maneira semelhante a outras linguagens de programação e opera rapidamente com processamento paralelo.
-
Jogadas por turno:
- Leitura da jogada do jogador: lê e valida a jogada de entrada.
- Geração da resposta do computador: gera todos os movimentos possíveis e escolhe o melhor.
-
Busca minimax: seleciona a melhor jogada usando busca minimax de profundidade 2. Esse processo é realizado de forma eficiente por meio de paralelização.
Este projeto mostra um exemplo de implementação de um motor de xadrez com o uso único de expressões regulares, demonstrando o poder das expressões regulares e um design computacional criativo.
1 comentários
Comentários do Hacker News
O autor desse projeto é o tipo de pessoa que provou que
printf()é Turing-completo e escreveu um jogo de tiro em primeira pessoa em apenas 13kB de JavaScriptprintf()O projeto é extraordinário porque calcula várias posições possíveis em paralelo
Não tenho muito a acrescentar especificamente sobre a conclusão do blog post, mas gostaria que mais pessoas tentassem projetos desse tipo sem utilidade prática
Há um bug de "movimento ilegal, derrota" no jogo de xadrez
Seria mais assustador alguém jogando xadrez com uma única expressão regular do que alguém fazendo isso com 84.688 expressões regulares
Projetos como este merecem todo o respeito
O bug relacionado ao movimento da coluna a foi consertado
Esse projeto não é só um engine de xadrez; também é um computador e uma linguagem assembly feitos inteiramente com expressões regulares
Houve um projeto de xadrez anterior escrito em
sedsedusa comandos de controle de fluxo e só explora 1 plyEle não perde tão rápido quando começa com
a2a4Tentar algo sem uma meta claramente "produtiva" pode levar ao surgimento de novas maneiras e à inovação
É um esforço em busca de inovação e de se tornar mais produtivo