iniciar-programa
define-nueva-instruccion gira-derecha como repetir 3 veces gira-izquierda;
define-nueva-instruccion media-vuelta como repetir 2 veces gira-izquierda;
define-nueva-instruccion paso-atras como
inicio
  media-vuelta;
  avanza;
  media-vuelta;
fin;
define-nueva-instruccion mira-norte como
inicio
  mientras no-orientado-al-norte hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-sur como
inicio
  mientras no-orientado-al-sur hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-este como
inicio
  mientras no-orientado-al-este hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-oeste como
inicio
  mientras no-orientado-al-oeste hacer
    gira-izquierda;
fin;
define-nueva-instruccion arriba como
inicio
  mira-norte;
  mientras junto-a-zumbador y frente-libre hacer
  inicio
    coge-zumbador;
    avanzA;
  fin;
  si frente-bloqueado y junto-a-zumbador entonces
  inicio
    coge-zumbador;
  fin
  sino
    paso-atras;

  deja-zumbador;
  mientras derecha-bloqueada hacer
  inicio
    avanza;
    deja-zumbador;
  fin;

fin;
define-nueva-instruccion caminonorte como
inicio
  si algun-zumbador-en-la-mochila entonces
  inicio
    si frente-libre entonces
    inicio
      avanza;
      si no-junto-a-zumbador entonces
      inicio
        deja-zumbador;
        si orientado-al-este entonces
        inicio
        si frente-libre entonces
        inicio
        si derecha-libre entonces
        inicio
          gira-derecha;
          avanza;
          gira-izquierdA;
          si frente-libre entonces
            apagate
          sino
          inicio
            gira-derecha;
            paso-atras;
            gira-izquierdA;
          fin;
        fin;
        si izquierda-libre entonces
        inicio
          gira-izquierda;
          avanza;
          gira-derecha;
          si frente-libre entonces
            apagate
          sino
          inicio
            gira-izquierda;
            paso-atras;
            gira-derecha;
          fin;
        fin;
        fin;
        fin;

        caminonorte;
        coge-zumbador;
        paso-atras;
      fin
      sino
        paso-atras;
    fin;
    si izquierda-libre entonces
    inicio
      gira-izquierda;
      avanza;
      si no-junto-a-zumbador entonces
      inicio
        deja-zumbador;
        gira-derecha;
        si orientado-al-este entonces
        inicio
        si frente-libre entonces
        inicio
        si derecha-libre  entonces
        inicio
          gira-derecha;
          avanza;
          gira-izquierdA;
          si frente-libre entonces
            apagate
          sino
          inicio
            gira-derecha;
            paso-atras;
            gira-izquierdA;
          fin;
        fin;
        si izquierda-libre entonces
        inicio
          gira-izquierda;
          avanza;
          gira-derecha;
          si frente-libre entonces
            apagate
          sino
          inicio
            gira-izquierda;
            paso-atras;
            gira-derecha;
          fin;
        fin;
        fin;
        fin;
        caminonorte;
        coge-zumbador;
        gira-izquierda;
        paso-atras;
        gira-derecha;
      fin
      sino
      inicio
        paso-atraS;
        gira-derecha;
      fin;
    fin;
    si derecha-libre entonces
    inicio
      gira-derecha;
      avanza;
      si no-junto-a-zumbador entonces
      inicio
        deja-zumbador;
        gira-izquierda;
        si orientado-al-este entonces
        inicio
        si frente-libre entonces
        inicio
        si derecha-libre  entonces
        inicio
          gira-derecha;
          avanza;
          gira-izquierdA;
          si frente-libre entonces
            apagate
          sino
          inicio
            gira-derecha;
            paso-atras;
            gira-izquierdA;
          fin;
        fin;
        si izquierda-libre entonces
        inicio
          gira-izquierda;
          avanza;
          gira-derecha;
          si frente-libre entonces
            apagate
          sino
          inicio
            gira-izquierda;
            paso-atras;
            gira-derecha;
          fin;
        fin;
        fin;
        fin;
        caminonorte;
        coge-zumbador;
        gira-derecha;
        paso-atras;
        gira-izquierda;

      fin
      sino
      inicio
        paso-atras;
        gira-izquierda;
      fin;
    fin;
  fin;
fin;
define-nueva-instruccion abajo como
inicio
  mientras izquierda-bloqueada y frente-libre  hacer
  inicio
    avanza;
    si algun-zumbador-en-la-mochila y no-junto-a-zumbador entonces
      deja-zumbador;
  fin;
 fin;
 define-nueva-instruccion arriba2 como
 inicio
   mientras derecha-bloqueada y frente-libre hacer
   inicio
     si no-junto-a-zumbador entonces
     inicio
       deja-zumbador;
       avanza;
     fin;
   fin;
   si frente-bloqueado y derecha-libre entonces
   inicio
     gira-derecha;
     si no-junto-a-zumbador entonces
       deja-zumbador;
     avanza;
     deja-zumbador;
     caminonortE;
   fin
   sino
   inicio
     si frente-bloqueado y derecha-bloqueada entonces
     inicio
       si no-junto-a-zumbador entonces
       deja-zumbador;
       apagate;
     fin
     sino
     inicio
       si derecha-libre y frente-libre entonces
     inicio
       gira-derecha;
       si no-junto-a-zumbador entonces
         deja-zumbador;
       avanza;
       deja-zumbador;
       caminonorte;
     fin;
     fin;
   fin;
 fin;
 define-nueva-instruccion comprueba como
 inicio
   si frente-libre entonces
   inicio
     gira-derecha;
     si frente-libre entonces
     inicio
     avanza;
     gira-izquierdA;
     si frente-libre entonces
     inicio
       gira-derecha;
       paso-atras;
       gira-izquierda;
       paso-atras;
       mira-norte;
     fin
     sino
     inicio
       gira-derecha;
       paso-atras;
       gira-izquierda;
       deja-zumbador;
       caminonorte;
     fin;
     fin
     sino
     inicio
       gira-izquierda;
       deja-zumbador;
       caminonorte;
     fin;
   fin
   sino
   inicio
     deja-zumbador;
     caminonorte;
   fin;
 fin;
    inicia-ejecucion
    deja-zumbador;
    mira-sur;
    mientras frente-libre y orientado-al-sur hacer
    inicio
    mira-sur;
    abajo;
    si izquierda-libre entonces
    inicio
      gira-izquierda;
      avanza;
      comprueba;
    fin
    sino
    inicio
      mira-norte;
      arriba;
      si derecha-libre entonces
      inicio
        gira-derecha;
        avanza;
        deja-zumbador;
        caminonorte;
      fin;
    fin;
    si orientado-al-este entonces
    inicio
    coge-zumbador;
    paso-atras;
    mira-sur;
    fin
    sino
    inicio
      arriba;
      si derecha-libre entonces
      inicio
        gira-derecha;
        avanza;
        deja-zumbador;
        caminonorte;
      fin;
    fin;
    si frente-libre y orientado-al-sur entonces
      avanza;
    si no-junto-a-zumbador entonces
      deja-zumbador;
    fin;
      si frente-bloqueado y no-orientado-al-este entonces
    inicio
     si junto-a-zumbador entonces
       coge-zumbador;
      mira-norte;
      mientras algun-zumbador-en-la-mochila hacer
      inicio
      arriba2;
        coge-zumbador;
      paso-atras;
      gira-izquierda;
      si frente-libre entonces
        avanza
      sino
        apagate;
      fin;
    fin
    sino
    inicio
    mientras algun-zumbador-en-la-mochila hacer
    inicio
      coge-zumbador;
      paso-atras;
      gira-izquierda;
      si frente-libre entonces
        avanza
      sino
        apagate;
      arriba2;

    fin;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
