ANTECEDENTES
Muchas áreas de las ciencias de la computación usan dominios abstractos simples para los estudios empíricos y analíticos. Por ejemplo, uno de los primeros estudios sobre IA sobre planeamiento y robótica usaba un mundo de bloques en donde un brazo robótico realizaba tareas relacionadas con la manipulación de bloques.
En este problema se modelara un mundo de bloques simple bajo ciertas reglas y restricciones. En vez de determinar como lograr un estado especifico, se “programará” un brazo robótico que responda a un conjunto limitado de comandos.
EL PROBLEMA
El problema consiste en analizar sintacticamente una serie de comandos que instruyen a un brazo robótico en como manipular bloques que están en una mesa. Inicialmente hay n bloques en la mesa (numerados de 0 a n-1) donde el bloque bi es adyacente al bloque bi+1 para todo 0 <= i < n-1 como se muestra en el diagrama a continuación:

El Mundo de bloques
Los comandos válidos para el brazo robótico que manipulan los bloques son:
mover a en b
donde a y b son números de bloques, pone el bloque a en el bloque b después de retornar cualquier bloque que esté apilado encima de los bloques a y b a sus posiciones originales.
mover a sobre b
donde a y b son números de bloque, pone el bloque a en la cima de la pila que contiene al bloque b, después de retornar cualquier bloque que esté apilado encima del bloque a a su posición original.
pila a en b
donde a y b son números de bloque, mueve la pila de bloques que consisten en el bloque a, y cualquier bloque que esté apilado encima del bloque a, en el bloque b. Todos los bloques encima del bloque b son movidos a sus posiciones originales antes de que el apilado tome lugar. Los bloques apilados sobre el bloque a mantienen su orden cuando son movidos.
pila a sobre b
donde a y b son números de bloque, pone la pila que consiste en el bloque a, y cualquier bloque que este apilado encima del bloque a, encima de la pila que contiene al bloque b. Los bloques apilados encima del bloque a mantienen su orden cuando son movidos.
terminar
termina la manipulación en el mundo de bloques.
Cualquier comando en donde a = b o en donde a y b están en la misma pila de bloques es un comando no válido. Todos los comandos no válidos deben ser ignorados y no deben afectar la configuración de los bloques.
LA ENTRADA
La entrada comienza con un entero n en una línea, que representa el número de bloques en el mundo de bloques. Se debe asumir que 0 < n < 25.
El número de bloques es seguido por una secuencia de comandos de bloque, un comando por línea. El programa debe procesar todos los comandos hasta que se encuentre el comando terminar.
Se deberá asumir que todos los comandos están de la forma especificada arriba. No habrá comandos sintácticamente incorrectos.
LA SALIDA
La salida deberá consistir en el estado final del mundo de bloques. Cada posición de bloque original numerada i (0 <= i < n donde n es el número de bloques) deben aparecer seguido inmediatamente por un punto y coma. Si hay aunque sea un bloque en la posición de bloque, los dos puntos deben ser seguidos por un espacio, seguido por la lista de bloques que aparecen apilados en esa posición con cada número de bloque separado por un espacio. No hay espacios al final de una línea.
Deberá haber una línea de salida por cada posición de bloque (i.e., n líneas de salida donde n es el entero de la primera línea de entrada).
EJEMPLO DE ENTRADA
10
mover 9 en 1
mover 8 en 1
mover 7 en 1
mover 6 en 1
pila 8 sobre 6
pila 8 sobre 5
mover 2 sobre 1
mover 4 sobre 9
terminar
EJEMPLO DE SALIDA
0: 0
1: 1 9 2 4
2:
3: 3
4:
5: 5 8 7 6
6:
7:
8:
9:
Recursos de interés:
ENUNCIADO ORIGINAL (INGLES)
Octubre 25, 2008 | Palabras Clave: bloques, modelado, mundo, Problemas, python, robotica | Categoría: Problemas | Commentarios (1)