Ajedrez en cuatro dimensiones: por dentro de Tesseract
Tesseract se estrenó hoy en el Laboratorio: ajedrez completo sobre un tablero de 5×5×5×5, con dos especies de peón, piezas que se deslizan por planos e hiperplanos, un motor determinista en un Web Worker y una colección de problemas cuyas soluciones se demuestran por búsqueda antes de publicarse. Esto es lo que costó.
En esta página
Las variantes de ajedrez suelen añadir un truco a un tablero que todo el mundo entiende. Nosotros queríamos lo contrario: mantener unas reglas reconociblemente de ajedrez y cambiar el espacio — de dos dimensiones a cuatro. El resultado es Tesseract, el decimotercer juego de nuestro Laboratorio y, con diferencia, lo más exigente en términos matemáticos que hemos publicado en un navegador.
Cuatro dimensiones suena a eslogan hasta que te sientas a escribir el generador de movimientos. Entonces se vuelve muy literal: aquí una torre ataca por ocho rayos, no por cuatro. Un alfil ataca por veinticuatro. Hay dos piezas deslizantes nuevas porque el espacio 4D tiene dos tipos nuevos de diagonal, y hay dos clases de peón porque un peón necesita un eje de avance y el tablero ahora tiene dos ejes de sobra. Cada una de esas afirmaciones tuvo que sobrevivir a un verificador escrito de forma independiente antes de que nos las creyéramos nosotros mismos.
- 625
- casillas — retículo 5⁴
- 80
- direcciones de ataque
- 226
- movimientos legales de salida
- 11.66M
- nodos de perft(3), 0 discrepancias
El espacio de búsqueda de Tesseract, verificado el 2026-07-26 contra un generador escrito de forma independiente.
Un tablero de 625 casillas
El tablero es un retículo de 5×5×5×5 — 625 casillas, con coordenadas (x, y, z, w) que van de 1 a 5. Internamente, una casilla es un solo entero: idx = (x−1) + 5(y−1) + 25(z−1) + 125(w−1). El renderizador usa exactamente el mismo empaquetado, así que un índice de casilla cruza la frontera entre motor y renderizador sin traducción alguna: no hay errores de coordenadas en la costura, porque no hay costura.
El clásico problema de salirse del tablero empeora en 4D: cada rayo deslizante tiene que saber dónde está el borde en ochenta direcciones. Los motores 2D de toda la vida lo resuelven con un mailbox — un tablero acolchado cuyas casillas de borde están marcadas como inválidas — y resulta que la idea se generaliza de maravilla. Tesseract usa un mailbox de 9⁴: 6.561 entradas de 32 bits, unos 26 KB, donde el tablero jugable de 5⁴ queda a dos casillas de todos los bordes, exactamente el alcance de un caballo. Detectar que se ha salido del tablero se reduce a una consulta a un array. La alternativa, tablas de rayos por casilla, habría costado unos 350 KB y muchos más fallos de caché.
Ochenta direcciones de ataque
En n dimensiones, la generalización natural del movimiento ajedrecístico es el conjunto de vectores de dirección no nulos con componentes en {−1, 0, 1}. En 4D eso da 3⁴ − 1 = 80 direcciones, que se reparten según cuántos ejes se mueven a la vez: 8 direcciones cambian un eje, 24 cambian dos, 32 cambian tres y 16 cambian los cuatro.
Esas cuatro clases son el juego de piezas. La torre se queda con la clase uno. El alfil se queda con la dos — las diagonales de siempre, que ahora son veinticuatro. La clase tres pertenece al unicornio, una pieza tomada del Raumschach, la variante tridimensional de 1907: se desliza por diagonales espaciales que no existen en un tablero plano. La clase cuatro pertenece al dragón, nuestro nombre para la pieza que recorre las auténticas 4-agonales, las direcciones en las que las cuatro coordenadas cambian a la vez. La dama y el rey se quedan con las ochenta. El caballo también se generaliza: un salto (2, 1, 0, 0) en cualquier par de ejes y cualquier combinación de signos — 48 saltos distintos.
Aquí la intuición falla de maneras interesantes, así que contamos. Sumando los movimientos legales de una pieza sobre todas las casillas de un tablero vacío: la torre llega a 10.000; el alfil, a 18.000. En un tablero plano la torre es la deslizante más fuerte; en cuatro dimensiones el alfil simplemente tiene más sitio. El dragón, señor de la clase de direcciones más exótica, reúne apenas 5.664 — las 4-agonales son cortas y escasas desde casi cualquier casilla — y por eso la pareja se coloca en la tercera fila de la placa en vez de ocupar una esquina. Esto no son impresiones: son constantes congeladas en la autocomprobación del motor, y la compilación falla si el generador de movimientos llega a discrepar de ellas.
| Pieza | Direcciones | Movimientos sobre tablero vacío (625 casillas) |
|---|---|---|
| Dama | 80 | 49.664 |
| Rey | 80 | 27.936 |
| Alfil | 24 | 18.000 |
| Unicornio | 32 | 16.000 |
| Caballo | 48 saltos | 14.400 |
| Torre | 8 | 10.000 |
| Dragón | 16 | 5.664 |
Movilidad total por pieza, sumada sobre todas las casillas de un tablero 5⁴ vacío. En 4D el alfil supera en alcance a la torre — al revés que en el ajedrez plano.
Una posición inicial que es un teorema
Diseñar una posición inicial para un tablero al que nadie ha jugado nunca es una trampa: ¿cómo sabes que las blancas no reciben mate en cuatro, o que un muro de peones no convierte la partida en tablas por construcción? Optamos por hacer la posición demostrable en vez de plausible. El ejército negro es la reflexión puntual exacta del blanco: cada pieza se transforma mediante σ: p → 6−p en las cuatro coordenadas. La simetría puntual garantiza un equilibrio material y posicional perfecto, y tiene una consecuencia más silenciosa que nos gusta todavía más: nada empieza atacado. Si alguna pieza blanca atacara a una negra en la jugada cero, la simetría haría existir también el ataque recíproco, y la posición sería un caos táctico. No lo es, y eso es comprobable.
La posición inicial es un teorema, no una convención: su equilibrio se deduce de la simetría puntual, y el motor lo verifica en cada compilación.
Las doce piezas mayores se colocan sobre una placa de 5×5 en y=1, w=1 (el rey en el centro de la primera fila, la pareja de dragones en la tercera), y los peones responden a la pregunta de diseño más rara del tablero: ¿hacia dónde es adelante? Tesseract tiene peones Y, que avanzan por el eje y, y peones W, que avanzan por w, y ambas especies ocupan los dos hiperplanos centrales — la única franja del tablero donde un peón blanco queda exactamente enfrente de su imagen especular negra. Se publican tres tamaños de ejército (ligero, estándar y denso) ensanchando la franja de peones; el estándar son 32 piezas por bando, el mismo censo que el ajedrez clásico, que nos pareció lo correcto.
Contar cada movimiento, dos veces
Un motor de ajedrez es tan fiable como su generador de movimientos, y un generador 4D tiene modos de fallo que ningún humano detecta de un vistazo: la intuición de nadie salta ante una clavada de unicornio ausente en una triagonal. Así que Tesseract se verifica como se verifican los motores serios: con perft, el recuento exhaustivo de nodos hoja alcanzables a una profundidad dada, calculado dos veces por dos generadores que no comparten nada.
El generador rápido es legal, no pseudolegal: calcula jaques y clavadas una vez por nodo explorando hacia fuera desde el rey y solo emite los movimientos que sobreviven — el jaque doble deja únicamente movimientos de rey, el jaque simple deja capturar o interponer, y una pieza clavada solo puede viajar por su rayo de clavada. El generador ingenuo es deliberadamente tonto y lento. Coincidieron en 50.618 nodos de validación cruzada con cero discrepancias; el perft(3) completo desde la posición inicial son 11.661.294 nodos. Un laboratorio de peones aparte — una posición montada para ejercitar el avance doble, ambos ejes de captura, la captura al paso y la coronación — añade otros 559.319 nodos concordantes. Y como el motor entero trabaja solo con enteros, sin ninguna coma flotante en la lógica de juego, un guion congelado de 40 plies tiene que aterrizar en el mismo hash Zobrist en todos los navegadores y en todas las compilaciones. El determinismo no es un lujo: es lo que hace posible el modo en línea.
Hacer legibles cuatro dimensiones
El problema difícil nunca fue el motor. Fue la pantalla. Una posición 4D tiene que caber en un monitor 2D sin mentir sobre la geometría, y el truco habitual — dibujar una bonita sombra giratoria de un teseracto — no sirve de nada para jugar de verdad. Nuestra respuesta es casi vergonzosamente plana: dibujar el retículo 5⁴ como una cuadrícula de 5×5 tableros de 5×5. Los ejes x e y viven dentro de cada tablerito; z y w eligen qué tablero. La correspondencia es worldX = (w−3)·PITCH + (x−3)·CELL, y la propiedad crucial es que es afín en las cuatro coordenadas: toda recta 4D — un rayo de torre, una triagonal de unicornio, una 4-agonal de dragón — se proyecta en una línea recta de casillas resaltadas en pantalla. La rectitud es la forma en que tu ojo aprende la geometría.
La cámara es ortográfica a propósito: la perspectiva curvaría esa afinidad y además rompería la selección, que aquí es una inversa en forma cerrada de la proyección y no un raycast en la GPU. Todo el campo se renderiza como un único quad texturizado (los 25 tableros horneados en una sola textura de canvas), dieciséis mallas instanciadas para los ejércitos y cinco para los resaltes: unas 24 llamadas de dibujo en el peor caso, sobre un canvas con frameloop="demand" que renderiza exactamente cero fotogramas mientras piensas. Para los momentos en que quieres ver la forma honesta de la cosa, una segunda vista dibuja el teseracto de verdad — cubo interior en w=1, exterior en w=5, girando mediante una rotación isoclina — y devuelve la lección de geometría a tus ojos.
Un rival que cabe en un Web Worker
La posición inicial tiene 226 movimientos legales, frente a los veinte del ajedrez clásico, y ese es el factor de ramificación medido con el que la búsqueda tiene que convivir. Una búsqueda con esa anchura tiene que ser humilde y tiene que estar fuera del hilo principal; el nivel maestro piensa hasta 3,5 segundos, lo que congelaría la pestaña si corriera donde vive React. Así que el motor ejecuta un negamax fail-soft con profundización iterativa dentro de un Web Worker, apoyándose con fuerza en la poda por movimiento nulo, las reducciones de movimientos tardíos y la poda por futilidad para sobrevivir a la anchura. Se publican cuatro niveles de dificultad, desde un rival instantáneo de 60 ms con una evaluación deliberadamente ruidosa hasta un maestro con una tabla de 16 MB que alcanza profundidad seis. Incluso la aleatoriedad de la IA es determinista: el temblor en los movimientos de raíz sale de un generador con semilla ligada al registro de la partida, así que una partida repetida se repite idéntica.
Problemas con soluciones verificadas por máquina
Toda aplicación de ajedrez tiene problemas; casi todas tienen alguno roto. En cuatro dimensiones, un problema roto sería imposible de arreglar a partir del aviso de un usuario: nadie puede refutar de un vistazo un mate en 3 en 4D. Así que ningún problema se publica bajo palabra. Cada uno de los doce estudios de la colección tiene que pasar tres comprobaciones automáticas: exactitud (una búsqueda al doble de la profundidad declarada encuentra mate en exactamente N, empezando por la jugada clave indicada), unicidad (ninguna otra primera jugada da mate igual de rápido) y forzamiento (toda respuesta de la defensa sigue perdiendo). El tutorial guiado recibe el mismo trato: sus ocho lecciones se demuestran ganables jugando todos los movimientos legales de la pieza de la lección a través del motor real. Si una lección se puede fallar, la que falla primero es la compilación.
Ajedrez cuatridimensional por un canal no confiable
El juego en línea corre sobre un canal de difusión en tiempo real, y tratamos ese canal exactamente como lo que es: un relé no confiable. Los pares acuerdan una clave mediante ECDH y cada movimiento cruza el canal autenticado — un HMAC sobre una serialización canónica que incluye la versión del protocolo, el identificador de la partida, la identidad de 128 bits vinculada al emisor y un número de secuencia de ply. Y luego llega la comprobación que deja lo demás casi como decoración: el cliente receptor revalida cada movimiento entrante contra su propio generador de movimientos legales. Con un movimiento falsificado o corrupto no se discute; simplemente es ilegal, y como el motor es determinista, ambos tableros o coinciden a la perfección o detectan la desincronización por el hash Zobrist en el movimiento siguiente.
// A move on the wire: eight digits (from-xyzw, to-xyzw) + optional promotion.
const WIRE_MOVE = /^[1-5]{8}[QRBNUD]?$/;
"22132313"; // Y-pawn at (2,2,1,3) steps forward along y to (2,3,1,3)
"24132513Q"; // the same pawn reaching y=5 promotes: Q R B N U or DEl formato de transmisión es deliberadamente tonto. La legalidad nunca se lee de la red: se recalcula localmente, en cada movimiento.
Tesseract cogió la plataforma que construimos a lo largo de trece juegos — los niveles de calidad compartidos, el sintetizador de audio, el contrato de pantalla completa, la regla de un solo canvas — y la apuntó entera a una única pregunta: ¿puede un navegador enseñar a un humano a ver en cuatro dimensiones? Después de una semana perdiendo contra nuestro propio nivel novato, creemos que la respuesta honesta es: despacio, y ahí está la gracia.