DarwinBotsManual
Abrir la app EnglishEN

El formato .txt

Cómo es por dentro el archivo .txt de un bot: líneas, comentarios, la cabecera '#, la codificación y qué cambia cuando el motor lo exporta.

Todos los bots se guardan como archivos de texto con extensión .txt: los del Bestiario, los que escribís vos y los que la app exporta desde una simulación. Esta página cuenta cómo lee ese archivo el cargador, línea por línea, y qué escribe el motor cuando lo saca de vuelta. La forma del ADN en sí (genes, tokens, def) está en La estructura de un bot; los otros formatos de la app, como las simulaciones guardadas, en Formatos de archivo.

Líneas

El cargador lee el archivo de a una línea por vez:

Dentro de una línea, las palabras se separan por uno o más espacios. Los saltos de línea no tienen otro significado: dónde cortes el código es cosa tuya.

Lo que el cargador ignora

LíneaQué hace el cargador
Empieza con ' (después de los espacios)La ignora: es un comentario
Empieza con /La ignora: es un comentario
Tiene una ' en el medioLee hasta la comilla y descarta el resto
Empieza con '# o /#Es una línea de cabecera (abajo)
Empieza con defDefine una variable; no agrega tokens (Variables con def)
Cualquier otraSe parte en palabras y cada una es un token

Ojo con dos detalles. La barra solo comenta al principio de la línea: un // en el medio son palabras que valen 0. Y toda línea que empiece con las letras def se toma como un def, aunque la palabra sea otra: defensa 50 define una variable llamada nsa.

Codificación

La app lee el archivo como texto UTF-8. En los comentarios podés escribir lo que quieras, con acentos y eñes. En el código, en cambio, solo cuentan los caracteres comunes del teclado inglés: una palabra con un carácter raro (un acento, un espacio duro copiado de una página web, un carácter invisible) no se reconoce y vale 0. Por ejemplo, un stop con un espacio duro en el medio deja de cerrar el gen. El El editor de ADN te avisa cuando encuentra una palabra así.

La cabecera '#

Las líneas que empiezan con '# (o con /#) llevan datos sobre el bot, con la forma '#nombre: valor. El cargador entiende cuatro:

LíneaQué guarda
'#generation: 7La generación del bot
'#mutations: 3Cuántas mutaciones acumula su linaje
'#tag: textoUna etiqueta libre, de hasta 45 caracteres
'#hash: …Una firma de 20 caracteres del texto anterior

Cualquier otra línea '#, o una con un valor que no se entiende, se ignora sin rechazar el bot. En la etiqueta, las letras fuera del inglés básico se vuelven signos de pregunta: '#tag: Acción queda como Acci??n.

El '#hash es un control contra la edición a mano. El motor lo calcula sobre todo el texto que viene antes, y al cargar lo vuelve a calcular. Si no coincide, la generación y las mutaciones vuelven a 0; el ADN carga igual. Por eso, si tocás algo de un archivo exportado (el código, la generación, o incluso si agregás un comentario arriba), el bot pierde su historia y vuelve a la generación 0. Cambiar los fines de línea de CR+LF a LF no la rompe. Un archivo sin '#hash conserva lo que diga su cabecera.

Cómo exporta el motor un bot

En la app, el texto de un bot vivo está en la pestaña ADN del El inspector, con el botón Copiar. Ese texto no es el archivo original: el motor lo reconstruye a partir de los tokens, igual que el DarwinBots original al guardar un bot. Si el bot mutó desde que lo abriste, Releer trae la versión actual.

Con este bot de partida:

'#generation: 7
'#mutations: 3
' Gira 10 por ciclo durante 5 ciclos
def pasos 50

cond
  *.pasos 5 <
start
  .aim * 10 add .setaim store
  .pasos inc   ' suma 1 a la dirección 50
stop

lo que exporta el motor es esto (las líneas de comillas son comentarios de gen que agrega él):

'#generation: 7
'#mutations: 3

 cond
 *50 5 <
 start
 18 * 10 add .setaim store
 50 inc
 stop
''''''''''''''''''''''''  Gene:  1 Ends at position  14  '''''''''''''''''''''''

'#hash: …

Comparalos y vas a ver todo lo que cambia:

Volver a cargar ese texto da el mismo bot, con la misma generación. La única excepción viene de las Mutaciones: pueden dejar tokens que no tienen forma escrita, y el motor los exporta como VOID, una palabra que al recargar vale 0. Un ADN así no vuelve idéntico.

Tus bots, el Bestiario y los archivos