2 puntos por GN⁺ 2026-02-16 | 1 comentarios | Compartir por WhatsApp
  • Un motor de ajedrez ligero que funciona con un tamaño de apenas 2 KB y permite jugar una partida completa dentro de reglas limitadas
  • Incluye algoritmos clave como tablero mailbox de 120 casillas, búsqueda negamax y poda alfa-beta
  • Usa evaluación basada solo en el valor material (material-only eval) y prioridad a capturas (move ordering)
  • No implementa enroque, captura al paso, promoción, repetición ni la regla de las 50 jugadas
  • Muestra un rendimiento aproximado de 1170~1200 Elo y destaca como un caso de implementación de un motor de ajedrez en menos de 2 KB de código

Resumen del proyecto

  • Sameshi es un motor de ajedrez mínimo con soporte para reglas limitadas, cuyo tamaño total de código es de apenas 1.95 KB
    • El archivo principal es sameshi.h, y una versión más legible está incluida en readable/sameshi.h
    • El repositorio de GitHub también incluye main.c, Makefile, .gitignore y otros archivos
  • Hay un video de demostración publicado en YouTube donde se puede ver su funcionamiento real

Estructura principal (core)

  • El motor está compuesto por estos seis elementos principales
    1. Estructura de tablero mailbox de 120 casillas
    2. Algoritmo de búsqueda Negamax
    3. Poda Alpha-Beta
    4. Evaluación basada en el valor material (material-only evaluation)
    5. Prioridad a capturas (move ordering)
    6. Verificación completa de jugadas legales, incluyendo jaque, jaque mate y ahogado
  • Entre las funciones no implementadas se indican enroque, captura al paso, promoción, repetición y la regla de las 50 jugadas

Rendimiento (strength)

  • Se estima en alrededor de 1170 Elo, con un intervalo de confianza del 95% entre 1110 y 1225 Elo
  • La medición se basa en 240 partidas contra Stockfish (nivel 1320~1600)
  • Se probó con profundidad fija 5 (fixed depth 5), máximo de 60 ply y reglas limitadas

Características técnicas

  • El tamaño total del código es de menos de 2 KB, compuesto por C 98.6% y Makefile 1.4%
  • Maximiza la ligereza y la eficiencia algorítmica para implementar la lógica de ajedrez con el mínimo código posible
  • Está clasificado bajo temas relacionados con chess-engine, chess y demoscene

Estado del repositorio

  • En GitHub registra 143 estrellas y 5 forks
  • Las secciones Issues, Pull requests, Projects y Security están vacías
  • La descripción del repositorio se resume como: “a ~1200 Elo chess engine that fits within 2KB

1 comentarios

 
GN⁺ 2026-02-16
Opiniones en Hacker News
  • Es un proyecto realmente genial. Está bueno que tenga función de tablas por ahogado, pero me pregunto cuánto espacio haría falta para implementar todas las reglas
    Como menciona el autor, si faltan enroque, captura al paso, promoción, repetición y la regla de las 50 jugadas, cuesta llamarlo ajedrez moderno
    En un motor pequeño quizá se puedan omitir la repetición y la regla de las 50 jugadas, pero el enroque, la captura al paso y la promoción me parecen imprescindibles
    Video Chess de 1980 soportaba todas las reglas dentro de 4KB
    Así que me da curiosidad cuál es hoy el motor compatible con UCI más pequeño. Superarlo con un motor diminuto y de reglas completas sería una meta divertida
    Como referencia, el Fidelity CC3 que usé a inicios de los 80 también soportaba enroque y captura al paso

    • ToledoChess tiene versiones implementadas en varios lenguajes
      La versión en JavaScript de 2KB incluye enroque, captura al paso, promoción, búsqueda e incluso GUI
      La versión en ensamblador de 326 bytes no incluye reglas especiales
      No hay una versión compatible con UCI, pero parece más fácil de implementar que una GUI. Puede que alguno de los forks de la versión JS ya haya agregado esa función
  • Gran proyecto. Parece que se podría reducir la cantidad de líneas reutilizando el frontend de GNU Chess e implementando solo el backend
    Como reporte de bug, encontré que se permite b6b4, aunque un peón no puede avanzar dos casillas después de haber movido una vez

    • Respondieron agradeciendo el aviso. Dijeron que intentarían parchearlo enseguida
  • La herramienta que más usan los desarrolladores de motores de ajedrez para estimar ELO es cutechess. Internamente usa SPRT
    Otra herramienta es Ordo, aunque no la he usado personalmente

  • Me pregunto si se podrá lograr 1 ELO por byte. Se puede hacer más pequeño, pero quizá también menos inteligente

    • Me parece un desafío de code golf realmente genial
    • Tal vez sea posible en rangos de rating muy bajos, pero a un nivel práctico parece que se toparía rápido con un límite
  • Esto se parece más a un programa que puede mover piezas de ajedrez que a ajedrez propiamente dicho. Faltan enroque, captura al paso, promoción, repetición y la regla de las 50 jugadas

    • Llevo mucho tiempo en el mundo del ajedrez computacional, así que ya estoy acostumbrado a este tipo de afirmaciones de “implementación de ajedrez”
      A veces se dice que se implementó ajedrez en un tamaño extremadamente pequeño, pero en realidad suelen omitirse reglas importantes
      Si buscas motores realmente pequeños y potentes, recomendaría asmFish (unos 130KiB), escrito en ensamblador x86, OliThink con unas 1000 líneas, y Xiphos, que logra gran fuerza con código C simple
      También hay motores de 4KB que aparecieron en TCEC, pero creo que esas afirmaciones merecen un asterisco (*)
  • Toledo es una familia de programas de ajedrez pequeños pero bastante fuertes

  • Yo también implementé hace poco un motor de ajedrez con todas las reglas en unas 400 líneas de código legible
    Al principio lo hice en Java, y después lo porté a mi lenguaje Bau
    Incluso incluye una interfaz de terminal, y aunque todavía estoy midiendo el ELO, yo no he podido ganarle
    En especial, implementar el enroque fue complicado, pero el reto en sí fue divertido
    Ver el código de ajedrez en el lenguaje Bau

    • Hubo una pregunta sobre por qué Bau no tiene tipos numéricos sin signo
  • Me pregunto cómo manejaron las partidas en las que Stockfish intentaba enrocar. Como es una jugada tan frecuente, me parece difícil evaluar la fuerza del motor sin soportarla

    • No se descartó ninguna partida por el enroque. En cambio, se aplicó un filtro de jugadas legales para impedir que Stockfish hiciera enroque, captura al paso o promoción
      Así que todas las partidas se jugaron bajo la misma “variante de ajedrez sin enroque”
      Esa evaluación no corresponde al ajedrez completo, sino a esa variante limitada
  • ¡Está buenísimo! Agregué este proyecto a HN Arcade
    Enlace a HN Arcade