iniciar-programa
 Define-nueva-instruccion gira(n) como
   repetir n veces gira-izquierda;
 Define-nueva-instruccion Ubica como
   inicio
       Mientras no-orientado-al-sur hacer gira-izquierda;
       Repetir 2 veces
         inicio
             Mientras frente-libre hacer avanza;
             gira(3);
         fin;
   fin;
 Define-nueva-instruccion EncuentraCactus como
   inicio
        Ubica;
        gira(3);
        Mientras no-orientado-al-norte hacer
          inicio
              Si junto-a-zumbador entonces
                inicio
                    coge-zumbador;
                    si no-junto-a-zumbador entonces
                      inicio
                          gira(1);
                          deja-zumbador;
                      fin
                      sino  deja-zumbador;
                fin;
              si no-orientado-al-norte entonces
                avanza;
          fin;
   fin;
 Define-nueva-instruccion BuscaSol como
   inicio
       Mientras orientado-al-NORTE hacer
        inicio
             si junto-a-zumbador entonces
               inicio
                   coge-zumbador;
                   si junto-a-zumbador entonces
                     inicio
                        deja-zumbador;
                        gira(2);
                        Mientras frente-libre hacer avanza;
                        gira(1);
                        Mientras frente-libre y no-junto-a-zumbador hacer  avanza;
                        si junto-a-zumbador entonces
                           inicio
                              Avanza;
                               repetir 2 veces deja-zumbador;
                           fin
                        sino
                          inicio
                              gira(2);
                              Mientras no-junto-a-zumbador hacer avanza;
                              avanza;
                              repetir 2 veces deja-zumbador;
                          fin;
                     fin
                   sino
                     deja-zumbador;
               fin;
             Si orientado-al-norte entonces
               si frente-libre entonces
                 avanza
               sino
                inicio
                    gira(2);
                    mientras frente-libre hacer avanza;
                    gira(1);
                    avanza;
                    gira(1);
                fin;
        fin;
   fin;
 Define-nueva-instruccion multiplica(n) como
   inicio
       Si junto-a-zumbador  y frente-libre entonces
         inicio
             avanza;
             multiplica(n);
             Repetir n veces deja-zumbador;
         fin
       sino
         inicio
            ubica;
            repetir n veces deja-zumbador;
            gira(1);
         fin;

   fin;
 Define-nueva-instruccion MideBase(k) como
   inicio
      Si frente-libre y no-junto-a-zumbador entonces
        inicio
           Avanza;
           MideBase(sucede(k));
        fin
      Sino
        inicio
           Si junto-a-zumbador entonces
            inicio
              encuentracactus;
              Mientras junto-a-zumbador hacer   avanza;
              gira(2);
              avanza;
              Multiplica(k);
              gira(2);
            fin
           sino
            inicio
               gira(2);
               Repetir k veces avanza;
            fin;
        fin;
   fin;
 Define-nueva-instruccion quita como
   inicio
       si junto-a-zumbador entonces
         inicio
             coge-zumbador;
             quita;
             si no-junto-a-zumbador entonces
             deja-zumbador;
             si frente-libre entonces avanza;
         fin
       sino
         inicio
             encuentraCactus;
             gira(3);
             avanza;
              si junto-a-zumbador entonces
                inicio
                   coge-zumbador;
                   gira(2);
                   avanza;
                   gira(2);
                fin
              sino
                inicio
                    gira(2);
                    avanza;
                    avanza;
                    coge-zumbador;
                    gira(2);
                    avanza;
                    gira(2);
                fin;
         fin;
   fin;
 Define-nueva-instruccion divide(n) como
   inicio
     Mientras junto-a-zumbador hacer
      inicio
       Repetir n veces
         inicio
            si junto-a-zumbador entonces
              inicio
                  coge-zumbador;
              fin
              sino
                inicio
                   Avanza;
                   deja-zumbador;
                   quita;
                   apagate;
                fin;
         fin;
        avanza;
        deja-zumbador;
        gira(2);
        avanza;
        gira(2);
      fin;
      avanza;
      quita;
      apagate;
   fin;
 Define-nueva-instruccion Altura(n) como
   inicio
      Si orientado-al-norte  entonces
        inicio
             gira(3);
             MideBase(0);
             si no-junto-a-zumbador entonces mideBase(0);
             si no-junto-a-zumbador entonces
              inicio
                Mientras no-orientado-al-norte hacer gira-izquierda;
                si frente-libre entonces
                avanza
                sino
                  inicio
                      encuentracactus;
                      gira(3);
                      avanza;
                      coge-zumbador;
                      coge-zumbador;
                      apagate;
                  fin;
              fin;
             Altura(sucede(n));
        fin
      sino
        inicio
          Mientras no-orientado-al-norte hacer gira-izquierda;
          divide(precede(n));
        fin;
   fin;

 Inicia-ejecucion
        BuscaSol;
        Ubica;
        gira(3);
        EncuentraCactus;
        Mientras junto-a-zumbador hacer avanza;
        Altura(1);
        apagate;
    termina-ejecucion
finalizar-programa
 