iniciar-programa

define-nueva-instruccion norte como inicio
    mientras no orientado-al-norte hacer inicio
      gira-izquierda;
     fin;
 fin;

define-nueva-instruccion sur como inicio
  mientras no orientado-al-sur hacer inicio
   gira-izquierda;
  fin;
 fin;

define-nueva-instruccion este como  inicio
   mientras no orientado-al-este hacer inicio
     gira-izquierda;
    fin;
 fin;

define-nueva-instruccion oeste como inicio
    mientras no orientado-al-oeste hacer inicio
      gira-izquierda;
     fin;
 fin;

define-nueva-instruccion camina como inicio
     si frente-libre entonces inicio
       avanza;
      fin;
 fin;

define-nueva-instruccion deposita como inicio
     si no junto-a-zumbador entonces inicio
         deja-zumbador;
     fin;
 fin;

define-nueva-instruccion ir11 como inicio
  oeste;
      mientras frente-libre hacer inicio
       avanza;
       fin;

 fin;

define-nueva-instruccion iresq como inicio
     oeste;
     mientras frente-libre hacer inicio
      avanza;
      fin;
      sur;
      mientras frente-libre hacer inicio
       avanza;
       fin;
         este;
 fin;

define-nueva-instruccion revisa como inicio
   mientras orientado-al-norte hacer inicio
     oeste;
     avanza;
    si junto-a-zumbador entonces inicio
       este;
       avanza;
       norte;
     si frente-libre entonces inicio
       avanza;
       fin sino inicio
        este;
        fin;
    fin sino inicio
        este;
        avanza;
         sur;
         avanza;
     fin;
    fin;
 fin;

define-nueva-instruccion portero(p) como inicio
     si junto-a-zumbador entonces inicio
        coge-zumbador;
        portero (sucede(p));
     fin sino inicio
              ir11;
      fin;
   si orientado-al-este entonces inicio
   avanza;
   fin sino inicio
    gira-izquierda;
    fin;


 fin;


define-nueva-instruccion altura(m) como inicio
   si junto-a-zumbador entonces inicio
        coge-zumbador;
        altura (sucede(m));

      fin sino inicio
         avanza;
         portero(0);
      fin;
      si orientado-al-norte entonces inicio
      deposita;
      camina;
     fin sino inicio
      norte;
      fin;

 fin;

define-nueva-instruccion ancho(n) como inicio
    si junto-a-zumbador entonces inicio
         coge-zumbador;
         ancho(sucede(n));

      fin sino inicio
        avanza;
        altura(0);
       fin;
     si orientado-al-sur entonces inicio
          mientras orientado-al-sur hacer inicio
            deposita;

            si frente-bloqueado entonces inicio
             este;
            fin;
            si orientado-al-sur entonces inicio
              avanza;
             fin;
           fin;

           avanza;
           norte;
            revisa;
            sur;
     fin sino inicio
       sur;
       si no junto-a-zumbador entonces inicio
        camina;
        fin;
     fin;

 fin;

define-nueva-instruccion columna como inicio

 fin;

define-nueva-instruccion busca-salida como inicio
    si derecha-bloqueada entonces inicio
       sur;
       avanza;
       este;
       avanza;
       norte;
     fin sino inicio
        sur;
        avanza;
        este;
        avanza;
     fin;
 fin;

define-nueva-instruccion respuesta como inicio
   si junto-a-zumbador entonces inicio
     avanza;
     respuesta;
    fin sino inicio

        norte;
        avanza;
       busca-salida;
       si orientado-al-este entonces inicio
      respuesta;
       fin;
    fin;
    deja-zumbador;
 fin;


define-nueva-instruccion contar-izquierda como inicio
      si no junto-a-zumbador entonces inicio
          avanza;
          contar-izquierda;

       fin sino inicio
       oeste;
       si frente-bloqueado entonces inicio
       iresq;
       respuesta;
       apagate;
       fin sino inicio
       este;
          mientras junto-a-zumbador hacer inicio
           avanza;
           fin;
            oeste;
            avanza;

            fin;
       fin;
      si frente-libre entonces inicio
        si orientado-al-este entonces inicio
        avanza;
        fin sino inicio
        si izquierda-libre entonces inicio
        este;
        fin;
        fin;
      fin sino inicio
       sur;
      fin;
 fin;

define-nueva-instruccion buscar-respuesta como inicio
      contar-izquierda;
      si izquierda-bloqueada entonces inicio
      norte;
      si frente-libre entonces inicio
          sur;
          avanza;
          este;
          avanza;
          deja-zumbador;
          fin sino inicio
          iresq;
          respuesta;
          fin;
      fin sino inicio
      iresq;
         respuesta;
      fin;
 fin;

    inicia-ejecucion
         este;
         avanza;
         mientras junto-a-zumbador hacer inicio
          avanza;
         fin;
         oeste;
         avanza;
          ancho(0);
           iresq;
           norte;
           avanza;
           este;
           buscar-respuesta;
        apagate;
    termina-ejecucion
finalizar-programa
