iniciar-programa
define-nueva-instruccion a(x) como inicio
si junto-a-zumbador entonces inicio
    si junto-a-zumbador  y orientado-al-este entonces inicio
    si junto-a-zumbador entonces coge-zumbador;
    si junto-a-zumbador entonces a(sucede(x));
     si no-junto-a-zumbador y frente-libre y orientado-al-este entonces avanza;
    si no-junto-a-zumbador y orientado-al-este  entonces inicio
     repetir 2 veces gira-izquierda;
    si frente-libre entonces avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
       fin;
    si junto-a-zumbador   y algun-zumbador-en-la-mochila y orientado-al-este entonces  inicio
    repetir x veces inicio
    si junto-a-zumbador  y orientado-al-este entonces coge-zumbador;
    si no-junto-a-zumbador y orientado-al-este  entonces inicio
    repetir x veces si algun-zumbador-en-la-mochila entonces deja-zumbador;
      repetir 2 veces gira-izquierda;
    si frente-libre entonces avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
       fin;
                fin;
si junto-a-zumbador  y orientado-al-este  entonces inicio
    repetir x veces deja-zumbador;
      repetir 2 veces gira-izquierda;
    si frente-libre entonces avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
    fin;
    fin;
    fin;
     si orientado-al-oeste y junto-a-zumbador entonces inicio  repetir 2 veces gira-izquierda;
    si frente-libre entonces avanza;
    fin;
    fin;
    fin;
    define-nueva-instruccion c(x) como inicio
             mientras no-junto-a-zumbador y frente-libre hacer avanza;
      mientras junto-a-zumbador y frente-libre y orientado-al-este hacer inicio
    si no-junto-a-zumbador y frente-libre entonces avanza;
    a(1);
    fin;
    si frente-bloqueado y orientado-al-este entonces inicio
    repetir 2 veces gira-izquierda;
    mientras frente-libre hacer avanza;
      fin;
    fin;
    define-nueva-instruccion b(x) como inicio
    mientras junto-a-zumbador y orientado-al-este  hacer inicio
     si junto-a-zumbador entonces inicio
     si frente-libre y junto-a-zumbador entonces avanza;
     b(sucede(x));
     fin;
   fin;

    si orientado-al-este entonces repetir 2 veces gira-izquierda;
    mientras frente-libre y orientado-al-oeste hacer avanza;
    si frente-bloqueado entonces inicio
     si orientado-al-oeste entonces repetir 2 veces gira-izquierda;

    c(x);
   
    fin;
    fin;
    define-nueva-instruccion l(x) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        l(sucede(x));
    fin;
    si orientado-al-este y no-junto-a-zumbador entonces inicio
        gira-izquierda;
        si frente-libre entonces avanza;
        repetir x veces deja-zumbador;
        repetir 2 veces gira-izquierda;
        si frente-libre entonces avanza;
        gira-izquierda;
         repetir 2 veces inicio
         si frente-libre entonces  avanza;
         fin;

    fin;

    fin;
    inicia-ejecucion
    mientras no orientado-al-este hacer gira-izquierda;
    l(0);
  mientras no-junto-a-zumbador y frente-libre hacer avanza;
    b(0);


        apagate;

    termina-ejecucion
finalizar-programa
