Diagramas de transición de estados en malabares

Uso de schart.pl para mostrar tablas de estados

(Page also in English)


schart.pl es un script de Perl para escribir tablas de diagramas de estado, una notación útil en malabares que ayuda a descubrir nuevos transposicionales y transiciones entre patrones.

Puede mostrar la tabla de transiciones, o la matriz de adyacencia con cada posible tipo de tiro; para un número fijo de bolas o para cualquiera (en ese caso incluye recogidas y caídas). Tienes que decirle la altura de tiro máxima.

Este programa se puede combinar con txt2tags (una herramienta de formato de texto) para convertir la salida a varios formatos, como TeX (o sea, que el PDF se puede hacer fácil) y HTMLaprovecha el CSS!, o haz que un programa de hoja de cálculo importe los datos).

schart.pl es software libre (GPL) y probablemente funciona en tu sistema operativo.

Descárgalo: schart.pl, versión 1 (código coloreado aquí).

25-Marzo-2005, por Daniel Clemente Laboreo.


¿Qué es un diagrama de estados? (en malabares)

Mark Thomas tiene una buena descripción sobre esto: State Transition Diagrams. Deberías leer su tutorial para poder entender este programa.

De todas formas, doy una descripción rápida: un estado es una cadena binaria que nos dice cuándo caerán las bolas en nuestras manos. Cada bola se representa por un 1, y la cadena es una cola de donde el/la malabarista saca bolas por la derecha, una cada vez.

Por ejemplo, tenemos 111 (3 unos => 3 bolas). Tira un 5, y tenemos 10011 (la bola ha retrocedido 5 pasos; el 1 de más a la derecha ya no está en la derecha sino 5 posiciones a la izquierda). Entonces tira un 3, y estamos en 1101, luego un 1, y llegamos a 111 otra vez, ya que hemos recorrido el patrón 531, que es un transposicional válido. Aprende lo de los transposicionales (siteswap).

Cuando estás en un estado que acaba en 1, también puedes dejar caer la bola: por ejemplo, de 1100101 pasas a 1100100 (no cuenta como un tic de reloj). También puedes coger una bola si el estado acaba en 0: después del 1 de un 441 estás en 1110 y puedes coger una bola para acabar en 1111 y hacer la fuente de 4 bolas.

Un mapa de estados (ejemplo) es una tabla que lista todos los posibles tiros que se pueden hacer en cada estado, y el estado resultante para cada uno de ellos. De hecho es la tabla de transiciones de un AFD (Autómata Finito Determinista).

¿Por qué son útiles?

Uso de schart.pl

  Usage: ./schart.pl -m max_throw [-n balls] [-t] [-x] [-h]
  
  -m max_throw : which throw heights to consider (from 0 to max_throw).
  -n balls     : only show states with that number of balls; no drops or pickups.
  -t           : show the throw types inside the table, and use the "final state"
                 as the horizontal axis. Easier to understand, but tables are
                 giant (2^max_throw rows and 2^max_throw columns).
  -x           : when -t is on, add X marks as reference points
  -h           : show this help
-m tiro_máximo
El número más alto de siteswap que quieras tirar (4/5/6 para un principiante, 13 para Thomas Dietz, etc.). Date cuenta de que esto aumenta el número de estados a 2^tiro_máximo, así que mantenlo tan bajo como puedas.
-n bolas
Por defecto se muestran todos los estados, desde 0 hasta 2^tiro_máximo-1. Puedes filtrarlos de forma que la tabla comprenda sólo estados con el número de bolas especificado. Como consecuencia, los signos para "recogida" (+) y "caída" (-) ya no se muestran, porque el número de bolas no cambia.
-t
Si no se pone, cada fila muestra el estado resultante para cada posible tipo de tiro (hay una columna para cada tipo de tiro). Esto hace que la tabla sea pequeña, pero es difícil seguir la pista a un patrón. Cuando usas -t, cada fila muestra el tipo de tiro que te llevaría a cada estado. Hay una columna para cada estado, por lo que la tabla es cuadrada y posiblemente bastante grande, aunque fácil de usar por las marcas X (mira el -x). Compara -m5 (sin -t) y -m5 -t -x.
-x
Esto sólo tiene efecto si se ha activado -t. Esta opción pone Xs en la diagonal de la tabla (que es cuadrada); fíjate en que el valor de la fila y el valor de la columna son el mismo. Sirven como punto de referencia porque, para seleccionar un tiro, sólo tendrás que moverte horizontalmente. Una vez encontrado el tipo de tiro deseado, te mueves arriba o abajo sobre esa columna hasta encontrar la X, y ya estás en el estado resultante (tira otra vez).

Ejemplo: ./schart.pl -m5 -n3 -t -x muestra patrones con 3 bolas usando tiros 0, 1, 2, 3, 4 y 5. Una versión embellecida de la tabla está aquí:

Cómo encontrar nuevos patrones

Empieza en un estado que conozcas, por ejemplo la cascada (111 es una de ellas) o la fuente (ej. 1111). Muévete horizontalmente y decide qué tipo de tiro quieres hacer. Cuando ya estés, muévete verticalmente hasta encontrar la X (o la diagonal). De esta forma llegas al estado resultante para ese tipo de tiro. Ahora repite el proceso: continúa yendo a través de estados y en algún momento intenta llegar otra vez al estado inicial para conseguir un transposicional completo.

Intenta encontrar 333, 423, 55500, 53403, 45141, 522, 42, 52530, etc. en la tabla de arriba. Y también los que no empiezan desde 111: 450, 51, etc. Y no olvides probar cada patrón en el mundo real :-)

Cómo encontrar transiciones

Simplemente busca un camino por la tabla. Imagina que quieres hacer el 450 pero no sabes cómo empezar (estás en el estado 111). Lanzar un 4 te llevaría al estado 11, el 5 al 21, pero entonces no hay posibilidad del 0, así que ése no era el camino.

Busca otro 4 en la tabla que pueda empezar el patrón. Sólo hay 3, y los del estado 7 y 13 no sirven para 450, así que tendrás que empezar desde el estado 11. ¿Y cómo llegar al estado 11 desde el 7? Bueno, pues hay un camino directo: tirando un 4 (la X gris indica la columna de todos los tiros que llevan al estado 11).

Así que la transición es ...3 3 3 3 4 450 450 450 .... Como ejercicio, vuelve otra vez a 3 3 3 3.... Puedes decidir hacerlo justo después del 4 o justo después del 0. Justo después del 5 no, porque en el estado 22 sólo hay una elección.

Sobre el programa

Lo programé en dos días sólo para practicar Perl. La página del manual (man perlintro) fue de mucha ayuda.

Quizás encuentres algoritmos ineficientes (si me avisas puede que los mejore). Pero es Perl, TMTOWTDI, ATINTBO (and this is not the best one).

Y yo no sé hacer todos estos patrones, pero practicaré más. De momento me sale el Mills Mess de 4, y cualificar 7, pero muchos transposicionales de 3 y 4 bolas aún son todo un reto.

Mira también