iniciar-programa
define-nueva-instruccion gira(n) como
inicio
   repetir n veces gira-izquierda;
fin;
define-nueva-instruccion periodico(n) como
inicio
   si frente-libre y no-junto-a-zumbador entonces
   inicio
      avanza;
      periodico(sucede(n));
   fin
   sino
   inicio
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         gira(2);
         repetir n veces inicio
         avanza;
         fin;
         si orientado-al-norte y algun-zumbador-en-la-mochila entonces
         inicio
            gira(3);
            mientras frente-libre y orientado-al-este hacer
            inicio
               avanza;
               si frente-bloqueado y orientado-al-este entonces
               inicio
                   gira(3);
                   mientras frente-libre y orientado-al-sur hacer
                   inicio
                      avanza;
                      si frente-bloqueado y orientado-al-sur entonces
                      inicio
                          gira(3);
                          mientras frente-libre y orientado-al-oeste hacer
                          inicio
                              avanza;
                              si frente-bloqueado y orientado-al-oeste entonces
                              inicio
                                 deja-zumbador;
                                 apagate;
                              fin;
                          fin;
                      fin;
                   fin;

               fin;
            fin;
         fin;
     fin;
   fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-sur hacer
    inicio
    gira-izquierda;
    fin;
    si orientado-al-sur entonces
    inicio
       mientras frente-libre hacer
       inicio
          avanza;
       fin;
          si frente-bloqueado entonces
          inicio
          gira(3);
          mientras frente-libre y orientado-al-oeste hacer
          inicio
             avanza;
          fin;
             si frente-bloqueado entonces
             inicio
                gira(3);
                mientras izquierda-bloqueada hacer
                inicio
                    avanza;
                fin;
                si izquierda-libre entonces
                inicio
                gira-izquierda;
                mientras frente-libre  hacer
                inicio
                   avanza;
                fin;
                   si frente-bloqueado y orientado-al-oeste entonces
                   inicio
                      gira(1);
                      si orientado-al-sur entonces
                      inicio
                      periodico(0);
                      fin;
                   fin;
                fin;
                fin;
                fin;
             fin;

        apagate;
    termina-ejecucion
finalizar-programa
