iniciar-programa
 define-nueva-instruccion gira(n) como
 inicio
   repetir n veces
      gira-izquierda;
 fin;
 define-nueva-instruccion pon como
 inicio
    si frente-libre entonces
    inicio
       avanza;
       pon;
       avanza;
    fin
    sino
    si orientado-al-oeste entonces
    inicio
       gira(1);
       pon;
       gira(3);
    fin
    sino
    inicio
       deja-zumbador;
       gira(2);
    fin;
 fin;
 define-nueva-instruccion rellena como
 inicio
    mientras frente-libre hacer
    inicio
       si no-junto-a-zumbador entonces
       inicio
          gira(3);
          mientras no-junto-a-zumbador hacer
          inicio
             repetir 3 veces
             deja-zumbador;
             avanza;
           fin;
           gira(2);
           mientras frente-libre hacer
              avanza;
           gira(3);
       fin;
       avanza;
    fin;
 fin;
 define-nueva-instruccion dfs como
 inicio
    coge-zumbador;
    si no-junto-a-zumbador entonces
       deja-zumbador
    sino
    mientras junto-a-zumbador hacer
       coge-zumbador;
    repetir 4 veces
    inicio
       si frente-libre entonces
       inicio
          avanza;
          si junto-a-zumbador entonces
          inicio
            coge-zumbador;
            si junto-a-zumbador entonces
            inicio
               repetir 4 veces
               inicio
                  gira-izquierda;
                  si orientado-al-oeste entonces
                  inicio
                     pon;
                     gira(2);
                  fin;
               fin;
               dfs;
             fin
             sino
                deja-zumbador;
          fin;
          gira(2);
          avanza;
          gira(2);
       fin;
       gira-izquierda;
    fin;
 fin;
 define-nueva-instruccion recorre como
 inicio
    si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       si no-junto-a-zumbador entonces
       inicio
          avanza;
          recorre;
          mientras no-orientado-al-norte hacer
             gira-izquierda;
          avanza;
          mientras junto-a-zumbador hacer
             coge-zumbador;
          deja-zumbador;
          deja-zumbador;
       fin
       sino
       inicio
          coge-zumbador;
          si no-junto-a-zumbador entonces
          inicio
             avanza;
             recorre;
             mientras no-orientado-al-sur hacer
                gira-izquierda;
             avanza;
              mientras junto-a-zumbador hacer
             coge-zumbador;
             deja-zumbador;
             deja-zumbador;
          fin
          sino
          inicio
             coge-zumbador;
             avanza;
             recorre;
             mientras no-orientado-al-este hacer
               gira-izquierda;
             avanza;
             mientras junto-a-zumbador hacer
                coge-zumbador;
             deja-zumbador;
             deja-zumbador;
          fin;
       fin;
    fin
    sino
    inicio
       mientras frente-libre hacer
          avanza;
       gira(2);
       avanza;
       gira(1);
       deja-zumbador;
       deja-zumbador;
    fin;
 fin;
inicia-ejecucion
 mientras no orientado-al-este hacer
   gira-izquierda;
 avanza;
 si no junto-a-zumbador entonces
 inicio
    deja-zumbador;
    gira(2);
    avanza;
    deja-zumbador;
    apagate;
 fin;
 mientras frente-libre hacer
    avanza;
 gira(2);
 mientras no junto-a-zumbador y frente-libre hacer
    avanza;
 si junto-a-zumbador entonces
    recorre;
 mientras no-orientado-al-oeste hacer
   gira-izquierda;
 rellena;
 deja-zumbador;
 gira(2);
 avanza;
 coge-zumbador;
 gira(2);
 dfs;
 apagate;
termina-ejecucion
finalizar-programa
