iniciar-programa
define-nueva-instruccion g(n) como
inicio
repetir n veces
inicio
gira-izquierda;
fin;
fin;
       define-nueva-instruccion extiende2 como
       inicio
         si junto-a-zumbador entonces
         inicio
         coge-zumbador;
         si junto-a-zumbador entonces
         inicio
         coge-zumbador;
         fin;
         extiende2;
         fin;

            repetir 2 veces
            inicio
            si algun-zumbador-en-la-mochila entonces
            inicio
            deja-zumbador;
            fin;
            fin;
            si frente-libre entonces
            inicio
            avanza;
            fin;
       fin;
  define-nueva-instruccion extiende como
  inicio
   si junto-a-zumbador entonces
   inicio
   coge-zumbador;
   extiende;
    deja-zumbador;
    si frente-libre entonces
    inicio
    avanza;
    fin;
   fin;
  fin;
   define-nueva-instruccion adelante como
   inicio
     si frente-libre entonces
     inicio
     avanza;
     fin
     sino
     inicio
        si izquierda-libre entonces
        inicio
        gira-izquierda;
        avanza;
        gira-izquierda;
        mientras frente-libre hacer
        inicio
        avanza;
        fin;
        g(2);
        fin;
     fin;
   fin;

  define-nueva-instruccion busca como
  inicio
  si junto-a-zumbador entonces
  inicio
       coge-zumbador;
       si junto-a-zumbador entonces
       inicio
         coge-zumbador;
         si junto-a-zumbador entonces
         inicio
            coge-zumbador;
            busca;
              si orientado-al-norte entonces
              inicio
                repetir 2 veces
                inicio
                deja-zumbador;
                fin;
                gira-izquierda;
                si frente-libre entonces
                inicio
                avanza;
                fin;
                gira-izquierda;
                  deja-zumbador;
              fin
              sino
              inicio
                 si orientado-al-sur entonces
                 inicio
                 deja-zumbador;
                 gira-izquierda;
                 avanza;
                 repetir 2 veces
                 inicio
                 deja-zumbador;
                 fin;
                 gira-izquierda;
                 fin;
              fin;
         fin
         sino
         inicio
           busca;
             si orientado-al-sur entonces
             inicio
             gira-izquierda;
             avanza;
             gira-izquierda;
             fin;
             si orientado-al-norte entonces
             inicio
             repetir 2 veces
             inicio
             deja-zumbador;
             fin;
             fin;
         fin;
       fin
       sino
       inicio
         busca;
         si orientado-al-norte entonces
         inicio
         gira-izquierda;
           si frente-libre entonces
           inicio
           avanza;
           fin;
           gira-izquierda;
         fin;
           si orientado-al-sur entonces
           inicio
           deja-zumbador;
           fin;
       fin;
  fin
  sino
  inicio
  si frente-libre o izquierda-libre entonces
  inicio
   adelante;
   busca;
   fin
   sino
   inicio
       si izquierda-bloqueada y frente-bloqueado entonces
       inicio
          g(2);
          mientras frente-libre hacer
          inicio
          avanza;
          fin;
          gira-izquierda;
          mientras frente-libre hacer
          inicio
          avanza;
          fin;
       fin;
   fin;
  fin;
  fin;

    inicia-ejecucion
         si orientado-al-norte entonces
         g(2);
         si orientado-al-este entonces
         g(3);
         si orientado-al-oeste entonces
         gira-izquierda;
          mientras frente-libre hacer
          inicio
          avanza;
          fin;
          g(3);
          mientras frente-libre hacer
          inicio
          avanza;
          fin;
          g(2);
          busca;
         si orientado-al-norte entonces
         inicio
         gira-izquierda;
          si frente-libre entonces
          inicio
          avanza;
          fin;
          g(3);
         fin
         sino
         inicio
         si orientado-al-sur entonces
         inicio
         g(3);
         si frente-libre entonces
         inicio
         avanza;
          fin;
          g(3);
         fin;
         fin;
           extiende;
           g(2);
           mientras frente-libre hacer
           inicio
           avanza;
           fin;
           gira-izquierda;
           si frente-libre entonces
           inicio
           avanza;
           fin;
           gira-izquierda;
           extiende2;
        apagate;
    termina-ejecucion
finalizar-programa
