#include<stdio.h>
#include<string.h>
char ff[4]={0,0,1,1}; // Contienen la informaci¢n de c¢mo modificar los l¡mites
char cc[4]={0,1,1,0}; // para pasar a los cuatro subcuadrantes.
int main()
{
char mapa[16][17]; // Contiene el dibujo.
char df,dc,hf,hc; // L¡mites de la regi¢n actual: df <= Filas < hf ; dc <= Columnas < hc
char i; // Mitad del tama¤o de la regi¢n actual (incremento del l¡mite en una supuesta divisi¢n).
char a,b,c; // Variables auxiliares.
freopen("dibu.dat","r",stdin); // Abrir los ficheros.
freopen("dibu.out","w",stdout);
memset(mapa,'o',sizeof(mapa)); // Inicializar el mapa
for(a=0;a<16;a++) // prepar ndolo para cuando se tenga que imprimir.
mapa[a][16]=0;
for(df=dc=0,hf=hc=16,i=8;scanf(" %c",&c)==1;) // Inicializamos las variables
{ // y leemos hasta que se acabe el fichero.
if(c=='x') // si hay que pintar:
{
for(a=df;a<hf;a++) // Pintamos
for(b=dc;b<hc;b++)
mapa[a][b]='x';
df=dc=0; // e inicializamos las variables.
hf=hc=16;
i=8;
}
else // Si hay que seguir dividiendo:
{
df+=ff[c-'1']*i; // se divide
hf-=(!ff[c-'1'])*i;
dc+=cc[c-'1']*i;
hc-=(!cc[c-'1'])*i;
i>>=1; // Y se disminuye el tama¤o de la regi¢n. Esto es igual a i/=2;
}
}
for(a=0;a<16;a++) // Se imprime el resultado.
printf("%s\n",mapa[a]);
return(0); // Y se acaba el programa.
}
|