The 2007 ACM Northeast North America Programming Contest

 

3899 - Memory Lane

 

VEREDA DE MEMORIA

 

 

Antón T. Schrecklich, el arquitecto de software principal en Software-Als-Produkt, acaba de encontrar por casualidad un papel1 bastante seminal. En  los discos de velocidad que usted usa en su teléfono rotatorio para pedir  pone en práctica un instrumento que revolucionará el programa como él lo ve: El Programa-Diagramm Formulare - un ejemplo esta en la siguiente página.

Una acción simple es representada como una caja:

 

+--------+

| action |

+--------+

 

Un lazo es representado como una caja con una condición en lo alto y las partes de cuerpo anidadas en la caja:

 

+------------+

| condition  |

| +----------+

| |    ..    |

+-+----------+

 

 

Finalmente, una decisión es representada con la condición en lo alto y los resultados anidados:

+--------------+

| condition    |

| true | false |

+------+-------+

| ..   | ..    |

+------+-------+

 

 

Schrecklich es una  persona quisquillosa  para el detalle:

 

 

 

Input

 

La entrada describe un diagrama y consiste en una o varias líneas con una o varias palabras, separadas por el espacio blanco. Una palabra es cualquier secuencia de carácteres de color especiales. Las palabras además, el final, fi, si, y mientras son reservados para expresar lazos y decisiones, que pueden ser anidadas:

 

while condition stmts end

if condition stmts fi

if condition stmts else stmts fi

 

donde la condición es una palabra sola y stmts es una secuencia de acciones, lazos, y decisiones. Cada otra palabra sola es una acción separada. Por ejemplo :2

 

while x!=y

if x>y

x-=y

trace

else

if x<y y-=x trace fi

fi

end

 

 

Output

 

Su programa debe imprimir el diagrama llenado por espacio que contiene las palabras no reservadas de la entrada en las estructuras respectivas. Por ejemplo

 

+-------------------------+

| x!=y                    |

| +-----------------------+

| |         x>y           |

| | true  |   false       |

| +-------+---------------+

| |       |     x<y       |

| | x-=y  | true  | false |

| |       +-------+ ------+

| +-------+ y-=x  |       |

| | trace +-------+       |

| |       | trace |       |

+-+-------+-------+-------+

 

1) 1 Nassi, I.; Shneiderman, B.: Flowchart techniques for structured programming, SIGPLAN Notices XII, August 1973.

2) My First Algorithm, in Στοιχεα, Proceedings of the Greek Academy of Sciences, about 300 BC.

 

Traducido por: CASTAÑEDA GALLARDO CARLOS EDUARDO