iniciar-programa
define-nueva-instruccion libre como si frente-libre entonces avanza;
define-nueva-instruccion gira (N) como repetir n veces gira-izquierda;
define-nueva-instruccion inicial como inicio
   si junto-a-zumbador entonces inicio
      mientras junto-a-zumbador hacer inicio
         coge-zumbador;
         si frente-bloqueado entonces inicio
         si orientado-al-oeste entonces gira (3);
         si orientado-al-este entonces gira (1);
        fin
         sino libre;
      fin;
      si no(orientado-al-norte) entonces inicio
            gira (2);
            libre;
               si orientado-al-oeste entonces gira (3);
               si orientado-al-este entonces gira (1);
      fin;
   libre;
      mientras junto-a-zumbador hacer inicio
         coge-zumbador;
         libre;
      fin;
   gira (2);
      mientras frente-libre hacer libre;
   gira (3);
      mientras frente-libre hacer inicio
      avanza;
      si frente-bloqueado entonces inicio
         gira (3);
         libre;
         gira (1);
         libre;
         gira (1);
         libre;
         gira (3);
       fin;

      fin;

si frente-bloqueado entonces inicio
         gira (3);
         libre;
         gira (1);
         libre;
         gira (1);
         libre;
         gira (3);
       fin;
        mientras frente-libre hacer avanza;
        si izquierda-libre entonces inicio
        gira (1);
        mientras frente-libre hacer avanza;
        fin;
       mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
       fin
         sino inicio
            gira (2);
            libre;
      fin;
fin;
define-nueva-instruccion avanzar como inicio
 mientras no-orientado-al-este hacer gira (1);
    avanza;
    mientras no-junto-a-zumbador hacer avanza;
    gira (1);
    fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer gira (1);
    mientras no(no-junto-a-zumbador y orientado-al-norte) hacer inicio
    avanzar;
    mientras junto-a-zumbador hacer inicio
    libre;
    gira (1);
    libre;
    inicial;
    si frente-bloqueado entonces avanzar
    sino inicio
    libre;
    inicial;
    si frente-bloqueado entonces avanzar sino gira (3);
    fin;
    fin;
    fin;
    apagate;
    termina-ejecucion
finalizar-programa
