iniciar-programa
define-nueva-instruccion acabados como
  inicio
   repetir 2 veces gira-izquierda;
   mientras frente-libre hacer avanza;

   si algun-zumbador-en-la-mochila entonces deja-zumbador;
 fin;
define-nueva-instruccion cuenta (n) como
  inicio
    si junto-a-zumbador y frente-libre entonces
      inicio
       coge-zumbador;
       si frente-libre entonces avanza;
       cuenta(sucede(n));
      fin;

        si no-orientado-al-sur entonces
         inicio
         repetir 2 veces gira-izquierda;
          mientras no-junto-a-zumbador y frente-libre hacer avanza;
          repetir 2 veces gira-izquierda;
           repetir n veces
         inicio
           si frente-libre entonces avanza;
          deja-zumbador;
         fin;
         repetir 2 veces gira-izquierda;
         fin;



    fin;

  define-nueva-instruccion erosion como
    inicio

     si junto-a-zumbador entonces coge-zumbador;
     gira-izquierda;
     si frente-libre entonces avanza;
     repetir 3 veces gira-izquierda;
     mientras no-junto-a-zumbador y frente-libre hacer
     avanza;
     repetir 2 veces gira-izquierda;
     si frente-libre entonces avanza;
     si algun-zumbador-en-la-mochila entonces deja-zumbador;
     repetir 2 veces gira-izquierda;
     mientras frente-libre hacer avanza;
     gira-izquierda;
   fin;

 define-nueva-instruccion ero como
   inicio
   mientras no-orientado-al-oeste hacer
   inicio
    mientras no-junto-a-zumbador y frente-libre hacer
     avanza;
      si frente-bloqueado entonces
       acabados;
      si no orientado-al-oeste entonces
   inicio
     si junto-a-zumbador entonces
      gira-izquierda;
      mientras junto-a-zumbador y frente-libre hacer avanza;
       si no-junto-a-zumbador entonces
         inicio
           si frente-libre entonces avanza;
           si junto-a-zumbador entonces
            inicio
             repetir 2 veces gira-izquierda;
             si frente-libre entonces avanza;
             repetir 2 veces gira-izquierda;
             si algun-zumbador-en-la-mochila entonces deja-zumbador;
              cuenta(0);
              fin
             sino
              inicio
               mientras no-orientado-al-sur hacer gira-izquierda;
               mientras frente-libre hacer avanza;
               gira-izquierda;
               si frente-libre entonces avanza
               sino
               acabados;
               ero;
              fin;
           si no orientado-al-oeste entonces
            erosion;
            si frente-libre entonces
             ero;
             si frente-bloqueado y no orientado-al-oeste entonces
              acabados;

            fin;
       fin;
      fin;
   fin;
 define-nueva-instruccion acaba como
    inicio
     repetir 2 veces gira-izquierda;
     mientras frente-libre hacer avanza;
      repetir 2 veces gira-izquierda;
       si frente-libre entonces avanza;
       ero;
    fin;
define-nueva-instruccion siguiente como
 inicio
  mientras frente-libre hacer avanza;
  gira-izquierda;
 fin;
define-nueva-instruccion quita como
  inicio
  mientras frente-libre hacer avanza;
   repetir 3 veces gira-izquierda;
   si frente-libre entonces avanza;
   repetir 3 veces gira-izquierda;
   mientras junto-a-zumbador y frente-libre hacer avanza;
   repetir 2 veces gira-izquierda;
   si frente-libre entonces avanza;
   si frente-libre entonces avanza;
   si junto-a-zumbador entonces coge-zumbador;
   mientras frente-libre hacer avanza;
   gira-izquierda;


   si frente-bloqueado entonces acaba;
  fin;
define-nueva-instruccion revisa como
 inicio
  mientras no-orientado-al-sur hacer
  gira-izquierda;
  si junto-a-zumbador entonces
    siguiente
  sino
   inicio
       mientras no-junto-a-zumbador y frente-libre hacer avanza;
         si junto-a-zumbador entonces
          inicio
            quita;
            si frente-libre entonces avanza
            sino
            acaba;
           fin
           sino
            gira-izquierda;
    fin;
  fin;




 define-nueva-instruccion deja como
   inicio
   mientras algun-zumbador-en-la-mochila hacer
    inicio
    si orientado-al-oeste entonces
     inicio
      repetir 2 veces gira-izquierda;
      si frente-libre entonces avanza;
    fin;
    mientras no-junto-a-zumbador y frente-libre hacer avanza;
     si frente-bloqueado  entonces
         inicio
          acaba;
          deja;
        fin;

      si junto-a-zumbador entonces
      gira-izquierda;
      mientras junto-a-zumbador y frente-libre hacer avanza;
       si no-junto-a-zumbador entonces
        inicio
         repetir 2 veces gira-izquierda;
         si frente-libre entonces avanza;
        fin;
        si frente-libre entonces avanza
        sino
         inicio
          gira-izquierda;
          si frente-libre entonces
           inicio
              avanza;
              deja;
            fin
         sino
          acaba;
        fin;
        gira-izquierda;
       si frente-libre y derecha-libre entonces
       inicio
         avanza;
         repetir 3 veces gira-izquierda;
          revisa;
          deja;
       fin;
     si frente-libre entonces avanza
     sino
     acaba;


   fin;
   si ningun-zumbador-en-la-mochila entonces
    inicio
      mientras junto-a-zumbador hacer coge-zumbador;
      apagate;
    fin;


   fin;

    inicia-ejecucion
      si algun-zumbador-en-la-mochila entonces
       inicio
        repetir 3 veces gira-izquierda;
         si frente-libre entonces avanza;
        deja;
        fin
        sino
        apagate;
        apagate;
    termina-ejecucion
finalizar-programa
