iniciar-programa
define-nueva-instruccion media-Vuelta como repetir 2 veces gira-izquierda;
define-nueva-instruccion gira-Derecha como repetir 3 veces gira-izquierda;

define-nueva-instruccion derecha(n) como inicio
si derecha-bloqueada y frente-libre y no junto-a-zumbador entonces inicio
 avanza;
 derecha(n);
 si frente-libre entonces inicio
  avanza;
 fin
 sino inicio
  mientras no orientado-al-sur hacer gira-izquierda; apagate;
 fin;
 sal-de-instruccion;
fin;

si derecha-libre y no junto-a-zumbador y izquierda-bloqueada entonces inicio
gira-derecha; avanza;
derecha(n);
 si frente-libre entonces inicio
 avanza; gira-derecha;
 fin
 sino inicio
  mientras no orientado-al-sur hacer gira-izquierda; apagate;
 fin;
sal-de-instruccion;
fin;

si izquierda-libre y frente-bloqueado y no junto-a-zumbador y derecha-bloqueada entonces inicio
gira-izquierda;
derecha(n);
si frente-bloqueado y derecha-bloqueada entonces inicio
gira-izquierda;
fin
 sino inicio
  mientras no orientado-al-sur hacer gira-izquierda; apagate;
 fin;
sal-de-instruccion;
fin;

si izquierda-libre y derecha-libre  y no junto-a-zumbador entonces inicio
 gira-derecha;
 avanza;
 derecha(n);
 si frente-libre  entonces inicio
 avanza; gira-derecha;
 fin
 sino inicio
  mientras no orientado-al-sur hacer gira-izquierda; apagate;
 fin;
 sal-de-instruccion;
fin;



si derecha-bloqueada y izquierda-bloqueada y frente-bloqueado y no junto-a-zumbador entonces inicio
 media-vuelta;
 derecha(n);
 si derecha-bloqueada y izquierda-bloqueada y frente-bloqueado entonces inicio
 media-vuelta;
 fin
 sino inicio
  mientras no orientado-al-sur hacer gira-izquierda; apagate;
 fin;

fin
sino inicio
si (frente-bloqueado y  junto-a-zumbador y orientado-al-norte y derecha-libre y izquierda-libre) o (frente-bloqueado y  junto-a-zumbador y orientado-al-norte y derecha-bloqueada y izquierda-bloqueada) entonces
inicio
si (frente-bloqueado y  junto-a-zumbador y orientado-al-norte y derecha-libre y izquierda-libre) entonces inicio
gira-derecha;
si frente-libre entonces inicio
avanza;
derecha(n);
si frente-libre entonces inicio
avanza; gira-derecha;
 fin
 sino inicio
  mientras no orientado-al-sur hacer gira-izquierda; apagate;
 fin;
fin;
fin
sino
si (frente-bloqueado y  junto-a-zumbador y orientado-al-norte y derecha-bloqueada y izquierda-bloqueada) entonces
inicio
media-vuelta;
fin;
fin
sino
si (frente-bloqueado y  junto-a-zumbador y orientado-al-norte y derecha-libre y izquierda-bloqueada) o (frente-bloqueado y  junto-a-zumbador y orientado-al-norte y derecha-bloqueada y izquierda-libre) entonces
inicio
 mientras no orientado-al-sur hacer gira-izquierda; apagate;
fin;
fin;
si junto-a-zumbador entonces inicio
coge-zumbador;
sal-de-instruccion;
fin;
fin;

  inicia-ejecucion
  si frente-bloqueado y derecha-bloqueada y izquierda-bloqueada entonces inicio
    apagate;
  fin
  sino inicio
   mientras frente-libre hacer avanza;
   si algun-zumbador-en-la-mochila entonces inicio
   deja-zumbador
   fin
   sino inicio
   si izquierda-libre y orientado-al-norte entonces inicio
    gira-izquierda;
      si frente-libre entonces inicio
       avanza;
       si frente-libre entonces inicio
        avanza;
        si frente-libre entonces inicio
         avanza;

        si frente-bloqueado entonces inicio
            gira-izquierda;
            avanza;
            si frente-libre entonces  inicio
            mientras no orientado-al-sur hacer gira-izquierda; apagate;
            fin
            sino inicio
            media-vuelta;
            apagate;
            fin;
         fin
         sino inicio
         media-vuelta; avanza; avanza; gira-izquierda;
         fin



       fin
       sino inicio
       media-vuelta; avanza; avanza; gira-izquierda;
       fin;
       fin
       sino inicio
        media-vuelta; avanza; gira-derecha; repetir 4 veces avanza;
        si derecha-libre entonces inicio
        mientras no orientado-al-sur hacer gira-izquierda; apagate;
        fin sino inicio
        media-vuelta; apagate;
        fin;
       fin;
       fin
       sino inicio
       media-vuelta; avanza; gira-izquierda;
       fin;
         apagate;
     fin;
     apagate;
   fin;




   media-vuelta;
   mientras frente-libre hacer avanza;
   gira-izquierda;
   derecha(0);
  fin;
  mientras no orientado-al-norte hacer gira-izquierda;
  apagate;
 termina-ejecucion
finalizar-programa
