DEV Community

Cover image for Jerry's Map: 4.000 paneles dictados por un mazo de ~100 cartas
lu1tr0n
lu1tr0n

Posted on • Originally published at elsolitario.org

Jerry's Map: 4.000 paneles dictados por un mazo de ~100 cartas

En 1963, un hombre llamado Jerry Gretzinger empezó a dibujar el mapa de una ciudad que no existe. Seis décadas después, ese mapa supera los 4.000 paneles y sigue creciendo, pero hay un detalle que lo vuelve fascinante para cualquier programador: Jerry casi no decide qué dibujar. Lo decide un mazo de cartas.

Cada jornada saca una carta, lee una instrucción y la ejecuta. El resultado es un ejercicio de generación procedimental hecho a mano, sin una sola línea de código, que lleva funcionando más tiempo que casi cualquier software que uses hoy.

TL;DR

  • Jerry Gretzinger empezó su mapa de una ciudad imaginaria en 1963; lo guardó en 1983 y lo retomó años después al reencontrarlo su hijo.
  • El proyecto supera los 4.000 paneles de 8×10 pulgadas que, ensamblados, forman un círculo enorme con coordenadas N, S, E y O desde el centro.
  • Un mazo de unas 100 cartas hechas a mano dicta cada acción: pintar, sembrar paneles nuevos, mezclar color o modificar el propio mazo.
  • Es un autómata manual: reglas fijas más instrucciones aleatorias producen una ciudad emergente que nadie diseñó por completo.
  • Algunas cartas se autorreferencian: añaden, quitan o barajan cartas, igual que un programa que reescribe su propia configuración.
  • Es generación procedimental sin computadora: el mismo principio detrás de No Man's Sky, Minecraft o Dwarf Fortress.
  • Gretzinger se describe como observador, no autor: el azar del mazo decide y su mano solo ejecuta la instrucción.

Qué es Jerry's Map y por qué le importa a un programador

Jerry's Map nació como un garabato. Gretzinger trabajaba en un empleo tedioso y, en su tiempo libre, empezó a dibujar el plano de una ciudad imaginaria. Fue añadiendo hojas durante años hasta que, en 1983, dejó el proyecto de lado y lo guardó en el ático de su casa en Cold Spring, Nueva York. Allí juntó polvo hasta que su hijo Henry lo encontró un día revolviendo cosas, lo bajó y preguntó qué era. Verlo de nuevo bastó para que Jerry lo retomara.

Hoy ese mapa es un "mundo virtual" bidimensional compuesto por más de 4.000 paneles individuales de ocho por diez pulgadas. Al ensamblarlos forman un círculo aproximado, donde cada posición se define con coordenadas N, S, E y O que parten del centro. La clave del sistema: las posiciones de la matriz no cambian nunca, pero los paneles que las ocupan se revisan continuamente. La ejecución física combina acrílico, marcador, lápiz de color, tinta, collage e impresión inkjet sobre papel grueso.

Para un desarrollador, esto suena familiar: una cuadrícula de celdas con coordenadas estables y contenido mutable. Lo que cambia es cómo se decide ese contenido. Y ahí entra el mazo, que convierte el proyecto en un caso de estudio de generación procedimental analógica.

Cada panel ocupa una coordenada fija; el contenido se reescribe con cada carta.

El mazo de cartas: un generador de instrucciones

El mazo empezó siendo trivial. Cuando el mapa era pequeño, Jerry trabajaba hoja por hoja sin problema, pero al crecer a cientos de paneles se volvió tedioso recorrer la pila. Su solución fue el generador de números aleatorios más simple que se le ocurrió: "Sacaba una carta y bajaba esa cantidad de paneles en la pila". Con el tiempo, en lugar de números sueltos, empezó a escribir instrucciones en las cartas. El mazo contemporáneo deriva de una baraja de naipes y hoy ronda las 100 cartas, porque se añaden, revisan y retiran constantemente.

El ciclo es estrictamente secuencial: una vuelta empieza solo cuando las tareas de la carta anterior están completas. Eso puede tomar desde unos minutos hasta varios días.

graph TD
  A["Robar una carta del mazo"] --> B["Leer número y categoría"]
  B --> C["Cubrir N pulgadas cuadradas / ejecutar tarea"]
  C --> D{"¿Tareas de la carta completas?"}
  D -->|si| A
  D -->|no| C
Enter fullscreen mode Exit fullscreen mode

Cada carta lleva un número grande, negro o rojo, en una esquina superior. Una "tarea" es completar tantas unidades de trabajo como indique ese número, y una unidad equivale a un número de cuadritos de una pulgada a cubrir. Las instrucciones para el artista se agrupan en cinco categorías generales:

  • Trabajar paneles — subir a la siguiente dimensión (vacío, rojo, negro, zigurat), salpicar pintura en cuatro paneles contiguos, crear un panel semilla, mezclar un color nuevo o serigrafiar nueve paneles contiguos.
  • Collage — actualizar y copiar el maestro en la cima de la pila, o copiar el panel actual en papel adhesivo para reutilizar fragmentos.
  • Crear un panel en blanco — con cartón impreso reusado (cajas de cereal), una foto del archivo del artista o una impresión lumen.
  • Trabajar el mazo — sumar o restar al número de ciertas cartas, eliminar o añadir una carta, copiar y retirar las últimas nueve, o barajar.
  • Otras — escribir una entrada de blog, una de diario, un post en Reddit o calcular el valor de venta del conjunto según la última subasta en eBay.

Hay incluso cartas para un "ayudante" del artista, dedicadas a escanear, ordenar, copiar y gestionar el inventario de los archivos.

Reglas, restricciones y aleatoriedad controlada

Lo que convierte a Jerry's Map en algo más que un pasatiempo es la tensión entre lo fijo y lo mutable. La cuadrícula de coordenadas es inmutable; el contenido de cada panel es totalmente revisable. Encima de esa estructura corre un bucle determinista —el conjunto de reglas— alimentado por una fuente de azar —la carta robada—. Es exactamente el patrón de un sistema generativo bien diseñado: reglas estrictas más entropía acotada producen variedad sin caos.

💭 Clave: Las cartas que modifican el mazo hacen del sistema un programa autorreferencial. Una instrucción puede reescribir las instrucciones futuras, como un script que edita su propio archivo de configuración en tiempo de ejecución.

El detalle más "de ingeniería" es cómo se gestiona la evolución de las reglas. Las cartas retiradas se retiran para siempre como objeto físico, pero sus instrucciones se conservan en una lista para una posible reutilización en cartas futuras. El espacio de reglas no se borra: muta y recicla, parecido a cómo un genoma conserva material que puede reactivarse. El mazo, en palabras del propio Gretzinger, está vivo porque cambia constantemente.

El mazo es a la vez el generador de azar y el conjunto de reglas.

Paralelos con la generación procedimental en software

Si traducimos el sistema de Jerry a código, el paralelo con la generación procedimental moderna es inmediato. El mazo es un PRNG (generador pseudoaleatorio) combinado con una tabla de instrucciones; cada carta es a la vez una semilla parcial y una operación sobre el estado del mundo. Es el mismo esquema que usan los videojuegos para crear universos enormes a partir de poca información: una semilla, un conjunto de reglas y mucha iteración.

Podemos modelar el motor de cartas en unas pocas líneas de Python:

import random
from dataclasses import dataclass

@dataclass
class Carta:
    numero: int       # unidades de trabajo a cubrir
    categoria: str    # "pintar", "sembrar", "color", "mazo"

def construir_mazo(semilla=1963):
    rng = random.Random(semilla)
    mazo  = [Carta(rng.randint(1, 9), "pintar")  for _ in range(80)]
    mazo += [Carta(0, "sembrar") for _ in range(8)]
    mazo += [Carta(0, "color")   for _ in range(6)]
    mazo += [Carta(0, "mazo")    for _ in range(6)]  # cartas que editan el mazo
    rng.shuffle(mazo)
    return rng, mazo

def aplicar(carta, mazo, rng):
    if carta.categoria == "mazo":
        # la regla se reescribe a si misma: anade una carta nueva
        mazo.insert(0, Carta(rng.randint(1, 9), "pintar"))
    return f"{carta.categoria}: {carta.numero} unidades"

def ejecutar(ciclos=5, semilla=1963):
    rng, mazo = construir_mazo(semilla)
    for _ in range(ciclos):
        if not mazo:
            rng, mazo = construir_mazo(semilla)
        print(aplicar(mazo.pop(), mazo, rng))

if __name__ == "__main__":
    ejecutar()
Enter fullscreen mode Exit fullscreen mode

Con la misma semilla, la secuencia de cartas es reproducible: dos personas que ejecuten el script obtienen la misma ciudad. Eso es precisamente lo que hace valioso al determinismo en estos sistemas. Para correr el ejemplo:

# Windows (PowerShell o CMD)
python jerry.py

# macOS
python3 jerry.py

# Linux
python3 jerry.py
Enter fullscreen mode Exit fullscreen mode

💡 Tip: Fijar la semilla del PRNG (como random.Random(semilla)) es la diferencia entre "aleatorio y reproducible" y "aleatorio e irrepetible". En generación procedimental casi siempre querés lo primero: poder regenerar exactamente el mismo mundo a partir de un número.

La familia de técnicas es amplia: ruido de Perlin para terrenos, sistemas-L para vegetación, autómatas celulares para cuevas, y Wave Function Collapse para mosaicos coherentes. No Man's Sky genera 18 trillones (quintillion en inglés) de planetas con este enfoque; Minecraft y Dwarf Fortress construyen mundos completos a partir de una semilla. Jerry's Map es el mismo concepto, pero con acrílico y cartón en lugar de shaders.

El artista como observador: autoría y sistemas emergentes

Gretzinger lo resume con una frase que cualquiera que haya visto comportamientos emergentes reconocerá: "Mi mano pone la pintura sobre el papel, pero doy un paso atrás y miro las hojas como si yo no fuera el perpetrador, sino apenas el observador". Es la misma sensación que produce mirar el Juego de la Vida de Conway: reglas simples, cero jugadores, y patrones complejos que parecen tener intención propia.

Esa idea —el creador como espectador de su propio sistema— es el corazón del arte generativo. El autor diseña las reglas y la fuente de azar, pero el resultado concreto lo produce el proceso. La autoría se desplaza del trazo individual al diseño del sistema. En software lo vivimos cada vez que un algoritmo nos sorprende con una solución que no programamos explícitamente.

Datos y cifras

  • 1963: año en que comenzó el mapa, como garabato en un trabajo aburrido.
  • 1983: año en que Gretzinger lo dejó de lado y lo guardó en el ático.
  • +4.000: paneles individuales que componen el mapa actual.
  • 8 × 10 pulgadas: tamaño de cada panel; ensamblados forman un círculo.
  • ~100: cartas en el mazo contemporáneo (número variable por diseño).
  • 1 pulgada cuadrada: unidad de trabajo que define el tamaño de cada tarea.

Qué nos enseña en la era del contenido generado por IA

Jerry's Map llega en un momento curioso. Mientras la red se llena de imágenes generadas por IA en segundos, aquí tenemos un sistema generativo que lleva más de 60 años produciendo una sola obra, a ritmo de una carta por sesión. La diferencia no es la aleatoriedad —ambos la usan— sino la combinación de restricción fuerte, iteración lenta y un humano en el bucle que ejecuta cada paso a mano.

Para quien diseña sistemas, la lección es de diseño, no de nostalgia: la calidad de un sistema generativo depende menos de cuánto azar metas y más de qué tan buenas sean tus reglas y tus restricciones. Un mazo de 100 cartas bien pensadas, sobre una cuadrícula de coordenadas fijas, basta para sostener un mundo coherente durante décadas. La aleatoriedad sin reglas es ruido; las reglas sin aleatoriedad son repetición. El punto interesante está en el medio.

Hacia adelante, el proyecto sigue activo y ha inspirado a una comunidad de "map makers" que replican el método. El blog original en Blogger ya no se actualiza, pero documenta años de decisiones del sistema, y existe un subreddit dedicado a mapear al estilo de Jerry. Es, probablemente, el experimento de generación procedimental más longevo y de menor presupuesto que vas a encontrar.

📖 Resumen en Telegram: Ver resumen

Preguntas frecuentes

¿Qué es exactamente Jerry's Map?

Es un proyecto artístico iniciado en 1963 por Jerry Gretzinger: el mapa de una ciudad imaginaria compuesto por más de 4.000 paneles de 8×10 pulgadas. Su contenido se revisa continuamente siguiendo instrucciones extraídas de un mazo de cartas hecho a mano.

¿Por qué se considera generación procedimental?

Porque el contenido no se diseña pieza por pieza, sino que emerge de aplicar un conjunto de reglas fijas a instrucciones aleatorias (las cartas). Es el mismo principio que usan los videojuegos para generar mundos, solo que ejecutado a mano sobre papel.

¿Cómo funciona el mazo de cartas?

Cada carta tiene un número (unidades de trabajo) y una categoría de tarea: pintar paneles, crear paneles nuevos, mezclar colores o incluso modificar el propio mazo añadiendo, quitando o barajando cartas. El artista roba una carta, ejecuta la tarea y solo entonces pasa a la siguiente.

¿Se parece al Juego de la Vida de Conway?

Comparte el espíritu: reglas simples sobre una cuadrícula producen patrones complejos que nadie diseñó explícitamente. La diferencia es que Jerry's Map introduce azar (las cartas) y un humano que ejecuta cada paso, en lugar de evolucionar de forma automática y determinista.

¿Puedo simular un sistema así en código?

Sí. Basta un PRNG con semilla fija, una lista de "cartas" con número y categoría, y un bucle que aplica cada instrucción al estado del mundo. El ejemplo en Python de este artículo muestra una versión mínima reproducible.

Referencias

📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.

Top comments (0)