iniciar-programa
define-nueva-instruccion dos(x) como inicio
si junto-a-zumbador y frente-libre entonces inicio
  coge-zumbador;
  si no-junto-a-zumbador entonces inicio
     deja-zumbador;
     avanza;
     dos(x);
fin;
si junto-a-zumbador y frente-libre entonces inicio
  coge-zumbador;
  avanza;
  dos(sucede(x));
  fin;
fin;
mientras no-junto-a-zumbador y frente-libre hacer avanza;
si junto-a-zumbador y frente-libre entonces dos(x);
si frente-bloqueado y junto-a-zumbador entonces inicio
  coge-zumbador;
  si junto-a-zumbador entonces deja-zumbador;
  si no-junto-a-zumbador entonces inicio
   repetir 2 veces gira-izquierda;
  si frente-libre entonces  avanza;
   deja-zumbador;
   repetir 2 veces gira-izquierda;
   si frente-libre entonces avanza;
  fin;
fin;
si frente-bloqueado y orientado-al-este  entonces repetir x veces inicio
 repetir 2 veces deja-zumbador;
fin;
si orientado-al-este y frente-bloqueado entonces gira-izquierda;
fin;
define-nueva-instruccion unos(z) como inicio
si junto-a-zumbador y frente-libre entonces inicio
  coge-zumbador;
     unos(sucede(z));
fin;
mientras no-junto-a-zumbador y frente-libre hacer avanza;
si junto-a-zumbador y frente-libre entonces unos(z);
si frente-bloqueado y orientado-al-oeste  entonces repetir z veces deja-zumbador;
si orientado-al-oeste y frente-bloqueado entonces gira-izquierda;
fin;
define-nueva-instruccion separa(i) como inicio
si junto-a-zumbador  entonces inicio
coge-zumbador;
si junto-a-zumbador y orientado-al-norte entonces coge-zumbador;
separa(sucede(i));
fin;
si orientado-al-sur y derecha-bloqueada o orientado-al-norte y derecha-bloqueada  entonces  gira-izquierda;
si si-es-cero (i) entonces sal-de-instruccion;
si no-junto-a-zumbador y orientado-al-este o  no-junto-a-zumbador y orientado-al-oeste entonces inicio
deja-zumbador;
si orientado-al-oeste entonces deja-zumbador;
si frente-libre entonces avanza;
fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    repetir 2 veces gira-izquierda;
    si frente-libre  o frente-bloqueado y junto-a-zumbador entonces dos(0);
     gira-izquierda;
     si frente-libre entonces avanza;
     si frente-libre  o frente-bloqueado y junto-a-zumbador entonces unos(0);
     separa(0);
     mientras no-orientado-al-este hacer gira-izquierda;
     mientras frente-libre  y orientado-al-este hacer avanza;
     gira-izquierda;
     separa(0);
        apagate;
    termina-ejecucion
finalizar-programa
