iniciar-programa
define-nueva-instruccion v como
 inicio
  repetir 2 veces gira-izquierda;
 fin;
 define-nueva-instruccion d como
   inicio
    repetir 3 veces gira-izquierda;
   fin;

define-nueva-instruccion vu(n) como
   inicio
     si junto-a-zumbador entonces
        inicio
          coge-zumbador;
          vu(sucede(n));
        fin;
       si no-orientado-al-sur entonces
         inicio
           v;
           repetir 2 veces
             si frente-libre entonces
               avanza;
             repetir n veces deja-zumbador;
         fin;
   fin;
   define-nueva-instruccion tot (n) como
     inicio
         mientras no-orientado-al-norte hacer
            inicio
               si frente-libre entonces
                 inicio
                    avanza;
                    tot (sucede(n));
                  fin
               sino
                 inicio
                   si orientado-al-oeste entonces
                     inicio
                      si junto-a-zumbador entonces
                        coge-zumbador
                       sino
                        inicio
                          repetir n veces deja-zumbador;
                          mientras no-orientado-al-norte hacer gira-izquierda;
                         fin;
                      fin;
                     v;
                 fin;
            fin;
    fin;
   define-nueva-instruccion quita(n) como
     inicio
       si junto-a-zumbador y no-orientado-al-sur entonces
         inicio
           coge-zumbador;
           quita(sucede(n));
         fin;
         si orientado-al-norte entonces
          inicio
             repetir n veces deja-zumbador;
             v;
          fin;
         si no-orientado-al-este entonces
          si frente-libre entonces avanza;
         si junto-a-zumbador y no-orientado-al-este entonces
           inicio
              repetir n veces
                si junto-a-zumbador entonces coge-zumbador;
               si no si-es-cero(n) entonces
               inicio
                  v;
                   repetir 2 veces
                   si frente-libre entonces avanza;
                   deja-zumbador;
                  v;
                   repetir 2 veces
                   si frente-libre entonces avanza;
                  quita(precede(n));
                fin
              sino
                mientras no-orientado-al-este hacer gira-izquierda;


           fin;


     fin;
     define-nueva-instruccion deja (n) como
       inicio
         si junto-a-zumbador entonces
           inicio
             coge-zumbador;
             deja(sucede(n));
           fin;
        v;
         repetir 2 veces
          si frente-libre entonces avanza;
          repetir n veces deja-zumbador;
          apagate;


       fin;

    inicia-ejecucion
       mientras junto-a-zumbador hacer coge-zumbador;
       gira-izquierda;
       repetir 2 veces si frente-libre entonces avanza;
         vu(0);                                                         
         d;
         tot(0);
         mientras junto-a-zumbador hacer
          inicio
            mientras no-orientado-al-norte hacer gira-izquierda;
             si frente-libre entonces avanza;
            quita(0);
           fin;
         v;
         repetir 2 veces
          si frente-libre entonces avanza;
          deja(0);



        apagate;
    termina-ejecucion
finalizar-programa
