Te han contratado para que programes el gestor de ventanas del nuevo
sistema operativo favorito de todo el mundo, el Windows Vista-ZO. La
pantalla del nuevo Windows es un plano cuadriculado virtualmente
infinito; la parte visible de la pantalla es un recuadro rectangular de
40 por 10 bloques. La cuadrícula que ocupa la esquina inferior izquierda
de la parte visible tiene coordenadas
,
la superior derecha tiene coordenadas
.
Los bloques de la pantalla pueden estar vacíos (esto se marca con el
carácter .) u ocupados por una ventana. Inicialmente la
pantalla está vacía y el cursor ocupa la posición
.
Las ventanas se dibujan una detrás de otra. Una ventana ocupa (sobreescribe) los bloques que pudiera ocupar una ventana anterior. Cada ventana es una región rectangular que debe dibujarse del siguiente modo (los ejemplos de la página siguiente facilitan la comprensión):
Las cuatro esquinas del marco de la ventana tienen los caracteres
#.
Las paredes verticales del marco tienen los caracteres
!.
La pared superior del marco (la barra de títulos) tiene los
caracteres =.
La pared inferior del marco tiene los caracteres
-.
El interior de la ventana se llena con uno de los caracteres
1, 2,
,
9, 0: en concreto, el interior de la ventana
-ésima
se llena con el carácter
,
es decir, el resto de la división de
entre
.
Tu cometido es hacer un programa que dibuje cómo quedaría la parte visible de la pantalla después de que se ejecuten diversas órdenes de dibujado de ventanas. En particular, las órdenes posibles son:
MOV <x> <y>: la posición del cursor pasa
a ser
.
MOVREL <rx> <ry>: la posición del cursor
se incrementa en
(por ejemplo, si
y
,
la coordenada
del cursor no se modifica, y la coordenada
del cursor se decrementa en 3 unidades).
DRAW <sx> <sy>: dibuja una ventana, cuya
esquina superior izquierda está en la posición del cursor, de
columnas y
filas. Toda ventana es tal que
y
.
La posición del cursor no se modifica.
El cursor puede desplazarse fuera de la pantalla; las ventanas dibujadas no tienen porqué empezar a dibujarse dentro de la pantalla, y no tienen porqué caber dentro de la pantalla en su totalidad.
La primera línea contiene el natural (el número total de casos a tratar). Cada caso consiste en una línea con el natural (el número de órdenes a ejecutar) seguido de líneas, cada una de las cuales contiene una orden a ejecutar, siguiendo el formato descrito anteriormente. Durante el transcurso de las órdenes de dibujo, las coordenadas del cursor siempre cumplen y .
Tu programa debe imprimir 10 líneas de 40 caracteres por cada caso a
tratar. Separa dos casos con una línea que contenga únicamente una coma
(,). Por lo tanto, si
la salida debe tener exactamente
líneas.
Input
0
Output
Input
1 0
Output
........................................ ........................................ ........................................ ........................................ ........................................ ........................................ ........................................ ........................................ ........................................ ........................................
Input
2 1 DRAW 40 10 0
Output
#======================================# !11111111111111111111111111111111111111! !11111111111111111111111111111111111111! !11111111111111111111111111111111111111! !11111111111111111111111111111111111111! !11111111111111111111111111111111111111! !11111111111111111111111111111111111111! !11111111111111111111111111111111111111! !11111111111111111111111111111111111111! #--------------------------------------# , ........................................ ........................................ ........................................ ........................................ ........................................ ........................................ ........................................ ........................................ ........................................ ........................................
Input
2 11 DRAW 10 10 MOVREL 3 -3 DRAW 10 10 MOVREL 3 -3 DRAW 10 10 MOVREL 3 -3 DRAW 10 10 MOVREL 3 -3 DRAW 10 10 MOV 2 7 DRAW 6 6 22 MOVREL 500000 500000 DRAW 10 10 DRAW 100 100 DRAW 4 4 DRAW 10 10 MOVREL 0 0 MOVREL -500000 -500000 DRAW 10 10 MOVREL 4999990 500010 DRAW 100 40 MOV -2 12 DRAW 6 6 MOV 36 12 DRAW 6 6 MOV -2 3 DRAW 6 6 MOV 36 3 DRAW 6 6 MOVREL -20 7 DRAW 6 6 MOVREL 10 0 DRAW 3 3
Output
#========#.............................. !11111111!.............................. !1#====#1!.............................. !1!6666!====#........................... !1!6666!2222!........................... !1!6666!2222!........................... !1!6666!=======#........................ !1#----#3333333!........................ !11!22!33333333!........................ #--!22!33#========#..................... , 777!=====#......!1111!....!2!.......!888 777!55555!......!1111!....#-#.......!888 ---#55555!......!1111!..............#--- !55555555!......!1111!.................. !55555555!......#----#.................. !55555555!.............................. ===#55555!..........................#=== 999!55555!..........................!000 999!55555!..........................!000 999!-----#..........................!000