iniciar-programa

  define-nueva-instruccion norte como inicio
       mientras no-orientado-al-norte 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 sur como inicio
       mientras no-orientado-al-sur 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 ordena como
   inicio
       si frente-libre entonces
       inicio
       sur;
       si frente-libre entonces
       inicio
           avanza;
       fin;
       gira-izquierda;
       mientras no-junto-a-zumbador hacer
       inicio
           avanza;
       fin;
       mientras junto-a-zumbador hacer
       inicio
           coge-zumbador;
           si frente-libre entonces
           inicio
               avanza;
           fin;
       fin;
       oeste;
       mientras frente-libre hacer
       inicio
           avanza;
       fin;
       este;
       mientras algun-zumbador-en-la-mochila hacer
       inicio
           deja-zumbador;
           si frente-libre entonces
           inicio
               avanza;
           fin;
       fin;
       mientras frente-libre hacer
       inicio
           avanza;
       fin;
       si derecha-bloqueada entonces
       inicio
           gira-izquierda;
           si frente-libre entonces
           inicio
               avanza;
           fin;
           gira-izquierda;
           mientras no-junto-a-zumbador hacer
           inicio
               si frente-libre entonces
                   inicio
                       avanza;
                   fin
                   sino inicio
                       este;
                       mientras frente-libre hacer
                       inicio
                           avanza;
                       fin;
                       sur;
                       mientras frente-libre hacer
                       inicio
                           avanza;
                       fin;
                       oeste;
                       mientras no-junto-a-zumbador hacer
                       inicio
                           si frente-libre entonces
                           inicio
                               avanza;
                           fin;
                       fin;
                   fin;
           fin;
           mientras junto-a-zumbador hacer
           inicio
               si frente-libre entonces
               inicio
                   avanza;
               fin
               sino inicio
                   apagate;
               fin;
           fin;
           norte;
           si frente-libre entonces
           inicio
               avanza;
               sur;
               ordena;
           fin;
       fin
       sino inicio
           si frente-bloqueado entonces
           inicio
               gira-izquierda;
               si frente-libre entonces
               inicio
                   avanza;
               fin
               sino inicio
                   sur;
                   mientras frente-libre hacer
                   inicio
                       avanza;
                   fin;
                   oeste;
                   mientras no-junto-a-zumbador hacer
                   inicio
                       si frente-libre entonces
                       inicio
                           avanza;
                       fin;
                   fin;
               fin;
               gira-izquierda;
               mientras no-junto-a-zumbador hacer
               inicio
                   si frente-libre entonces
                   inicio
                       avanza;
                   fin
                   sino inicio
                       este;
                       mientras frente-libre hacer
                       inicio
                           avanza;
                       fin;
                       sur;
                       mientras frente-libre hacer
                       inicio
                           avanza;
                       fin;
                       oeste;
                       mientras no-junto-a-zumbador hacer
                       inicio
                           si frente-libre entonces
                           inicio
                               avanza;
                           fin;
                       fin;
                   fin;
               fin;
               mientras junto-a-zumbador hacer
               inicio
                   si frente-libre entonces
                   inicio
                       avanza;
                   fin
                   sino inicio
                       apagate;
                   fin;
               fin;
               norte;
               si frente-libre entonces
               inicio
                   avanza;
                   sur;
                   ordena;
               fin
               sino inicio
                  ordena;
               fin;
           fin;
       fin;
       fin
       sino inicio
           sur;
           gira-izquierda;
           mientras no-junto-a-zumbador hacer
           inicio
               avanza;
           fin;
           mientras junto-a-zumbador hacer
           inicio
               coge-zumbador;
               si frente-libre entonces
               inicio
                   avanza;
               fin;
           fin;
           oeste;
           mientras frente-libre hacer
           inicio
               avanza;
           fin;
           si frente-bloqueado entonces
           inicio
               este;
               si frente-libre entonces
               inicio
                   mientras algun-zumbador-en-la-mochila hacer
                   inicio
                       deja-zumbador;
                       si frente-libre entonces
                       inicio
                           avanza;
                       fin;
                   fin;
               fin;
           fin;
           mientras frente-libre hacer
           inicio
               avanza;
           fin;
           si derecha-bloqueada entonces
           inicio
               gira-izquierda;
               avanza;
               gira-izquierda;
               mientras no-junto-a-zumbador hacer
               inicio
                   avanza;
               fin;
               mientras junto-a-zumbador hacer
               inicio
                   si frente-libre entonces
                   inicio
                       avanza;
                   fin
                   sino inicio
                       apagate;
                   fin;
               fin;
               norte;
               si frente-libre entonces
               inicio
                   avanza;
                   sur;
                   ordena;
               fin;
           fin
           sino inicio
               si frente-bloqueado entonces
               inicio
                   gira-izquierda;
                   si frente-libre entonces
                   inicio
                       avanza;
                   fin
                   sino inicio
                       sur;
                       mientras frente-libre hacer
                       inicio
                           avanza;
                       fin;
                       oeste;
                       mientras no-junto-a-zumbador hacer
                       inicio
                           si frente-libre entonces
                           inicio
                               avanza;
                           fin;
                       fin;
                   fin;
               fin;
               mientras junto-a-zumbador hacer
               inicio
                   si frente-libre entonces
                   inicio
                      avanza;
                   fin
                   sino inicio
                       apagate;
                   fin;
               fin;
               norte;
               si frente-libre entonces
               inicio
                   avanza;
                   sur;
                   ordena;
               fin
               sino inicio
                   ordena;
               fin;
           fin;
           mientras junto-a-zumbador hacer
           inicio
               avanza;
           fin;
           norte;
           si frente-libre entonces
           inicio
               avanza;
               sur;
               ordena;
           fin;
       fin;
   fin;
   define-nueva-instruccion ponBeeper(n) como
   inicio
       deja-zumbador;
       repetir n veces
       inicio
           si algun-zumbador-en-la-mochila entonces
           inicio
               avanza;
               deja-zumbador;
           fin;
       fin;
   fin;
   define-nueva-instruccion cambiaColumna como
   inicio
   si orientado-al-norte entonces
   inicio
       si frente-libre entonces
       inicio
           avanza;
       fin;
       oeste;
       si frente-libre entonces
       inicio
           avanza;
           Sur;
       fin
       sino inicio
           sur;
       fin;
       fin
       sino inicio
       oeste;
       si frente-libre entonces
       inicio
          avanza;
          Norte;
       fin;
       fin;
       fin;
          define-nueva-instruccion creaLinea(n) como
    inicio
    si algun-zumbador-en-la-mochila entonces
    inicio
    ponBeeper(n);
    cambiaColumna;
    creaLinea(sucede(n));
    fin;
        fin;
    inicia-ejecucion
        este;
        si algun-zumbador-en-la-mochila entonces
        inicio
        mientras frente-libre hacer
        inicio
            avanza;
        fin;
        norte;
        creaLinea(0);
        ordena;
        fin;
        apagate;

    termina-ejecucion

finalizar-programa
