(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 HTML (¡aprovecha 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.
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).
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
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
, 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.-t
. Esta opción pone X
s 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í:
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 :-)
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.
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.