iniciar-programa

define-nueva-instruccion mira-norte como
inicio
  mientras no-orientado-al-norte hacer
    gira-izquierda;
fin;


define-nueva-instruccion mira-este como
inicio
  mientras no-orientado-al-este hacer
    gira-izquierda;
fin;


define-nueva-instruccion mira-sur como
inicio
  mientras no-orientado-al-sur hacer
    gira-izquierda;
fin;


define-nueva-instruccion mira-oeste como
inicio
  mientras no-orientado-al-oeste hacer
    gira-izquierda;
fin;

define-nueva-instruccion retrocede como
inicio
  gira-izquierda;
  gira-izquierda;
  avanza;
  gira-izquierda;
  gira-izquierda;
fin;

define-nueva-instruccion patio como
inicio
  mira-sur;
  mientras frente-libre hacer
  avanza;
  mira-oeste;
  mientras frente-libre hacer
  avanza;
  mira-norte;

  mientras derecha-libre hacer
  inicio
    mientras frente-libre hacer
    inicio
      si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        si junto-a-zumbador entonces
        inicio
        deja-zumbador;
        avanza;
        fin
        sino
        inicio
          avanza;
        fin;
      fin
      sino
      inicio
        avanza;
      fin;
    fin;

   si frente-bloqueado y junto-a-zumbador entonces
   inicio
     coge-zumbador;
     si junto-a-zumbador entonces
     deja-zumbador;
   fin;

    mira-sur;
    mientras frente-libre hacer
      avanza;

    mira-este;
    si frente-libre entonces
      avanza;

    mira-norte;
  fin;

  mientras frente-libre hacer
    inicio
      si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        si junto-a-zumbador entonces
        inicio
        deja-zumbador;
        avanza;
        fin
        sino
        inicio
          avanza;
        fin;
      fin
      sino
      inicio
        avanza;
      fin;
    fin;

    si frente-bloqueado y junto-a-zumbador entonces
   inicio
     coge-zumbador;
     si junto-a-zumbador entonces
     deja-zumbador;
   fin;

    mira-sur;
    mientras frente-libre hacer
      avanza;

    mira-este;
    si frente-libre entonces
      avanza;

    mira-norte;

    mira-oeste;
    mientras frente-libre hacer
    avanza;

    mientras algun-zumbador-en-la-mochila hacer
      deja-zumbador;

    mira-norte;
    avanza;

    mientras derecha-libre hacer
  inicio
    mientras frente-libre hacer
    inicio
      si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        coge-zumbador;
        si junto-a-zumbador entonces
        inicio
        deja-zumbador;
        deja-zumbador;
        avanza;
        fin
        sino
        inicio
          avanza;
        fin;
      fin
      sino
      inicio
        avanza;
      fin;
    fin;

    si frente-bloqueado y junto-a-zumbador entonces
   inicio
     coge-zumbador;
     coge-zumbador;
     si junto-a-zumbador entonces
     inicio
     deja-zumbador;
     deja-zumbador;
     fin;
   fin;

    mira-sur;
    mientras frente-libre hacer
      avanza;

    mira-este;
    si frente-libre entonces
      avanza;

    mira-norte;
  fin;

  mientras frente-libre hacer
    inicio
      si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        coge-zumbador;
        si junto-a-zumbador entonces
        inicio
        deja-zumbador;
        deja-zumbador;
        avanza;
        fin
        sino
        inicio
          avanza;
        fin;
      fin
      sino
      inicio
        avanza;
      fin;
    fin;

    si frente-bloqueado y junto-a-zumbador entonces
   inicio
     coge-zumbador;
     coge-zumbador;
     si junto-a-zumbador entonces
     inicio
     deja-zumbador;
     deja-zumbador;
     fin;
   fin;

    mira-sur;
    mientras frente-libre hacer
      avanza;

    mira-este;
    si frente-libre entonces
      avanza;

    mira-norte;

    mira-oeste;
    mientras frente-libre hacer avanza;
    mira-este;
    avanza;
    mientras algun-zumbador-en-la-mochila hacer
      deja-zumbador;

    mira-oeste;
    avanza;
    mira-norte;
    avanza;
    mientras frente-libre hacer
    inicio
      si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        coge-zumbador;
        coge-zumbador;
      fin
      sino
      inicio
        avanza;
      fin;
    fin;

    si frente-bloqueado y junto-a-zumbador entonces
   inicio
     coge-zumbador;
     coge-zumbador;
     coge-zumbador;
   fin;

    mira-sur;
    mientras frente-libre hacer
      avanza;

    mira-este;
    si frente-libre entonces
      avanza;

    mira-norte; avanza;
    mientras frente-libre hacer
    inicio
      si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        coge-zumbador;
        coge-zumbador;
      fin
      sino
      inicio
        avanza;
      fin;
    fin;

    si frente-bloqueado y junto-a-zumbador entonces
   inicio
     coge-zumbador;
     coge-zumbador;
     coge-zumbador;
   fin;

    mira-sur;
    mientras frente-libre hacer
      avanza;

    mira-este;
    si frente-libre entonces
      avanza;

    mira-norte;

    mientras derecha-libre hacer
  inicio
    mientras frente-libre hacer
    inicio
      si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        coge-zumbador;
        coge-zumbador;
      fin
      sino
      inicio
        avanza;
      fin;
    fin;

    si frente-bloqueado y junto-a-zumbador entonces
   inicio
     coge-zumbador;
     coge-zumbador;
     coge-zumbador;
   fin;

    mira-sur;
    mientras frente-libre hacer
      avanza;

    mira-este;
    si frente-libre entonces
      avanza;

    mira-norte;
  fin;
  mientras frente-libre hacer
    inicio
      si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        coge-zumbador;
        coge-zumbador;
      fin
      sino
      inicio
        avanza;
      fin;
    fin;

    si frente-bloqueado y junto-a-zumbador entonces
   inicio
     coge-zumbador;
     coge-zumbador;
     coge-zumbador;
   fin;

    mira-sur;
    mientras frente-libre hacer
      avanza;

    mira-este;
    si frente-libre entonces
      avanza;

    mira-norte;


  mira-oeste;
  mientras frente-libre hacer avanza;
  mientras algun-zumbador-en-la-mochila hacer
  inicio
    deja-zumbador;
    retrocede;
    deja-zumbador;
    deja-zumbador;
    avanza;
  fin;
fin;

define-nueva-instruccion barre como
inicio
  mira-norte;
  mientras junto-a-zumbador hacer coge-zumbador;
  mientras algun-zumbador-en-la-mochila hacer
  inicio
    deja-zumbador;
    si frente-libre entonces
      avanza;
  fin;
  mira-sur;
  mientras frente-libre hacer avanza;
  mira-este;
  avanza;
  mira-norte;
  mientras junto-a-zumbador hacer coge-zumbador;
  mientras algun-zumbador-en-la-mochila hacer
  inicio
    deja-zumbador;
    deja-zumbador;
    si frente-libre entonces
      avanza;
  fin;
  mientras frente-libre hacer avanza;
  mira-este;
  mientras frente-libre hacer avanza;
  mira-norte;
fin;

define-nueva-instruccion aleja como
inicio
  mira-sur;
  mientras frente-libre hacer
  avanza;
  mira-oeste;
  mientras frente-libre hacer
  avanza;
  mira-norte;

  si junto-a-zumbador entonces
  inicio
    mientras junto-a-zumbador hacer coge-zumbador;
    mira-oeste;

    mira-este;
    mientras frente-libre hacer avanza;
    mira-norte;

    mientras junto-a-zumbador y frente-libre hacer avanza;
    si no-junto-a-zumbador entonces
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
  fin;

  mira-sur;
  mientras frente-libre hacer avanza;
  mira-oeste;
  mientras frente-libre hacer avanza;
  mira-este;
  avanza;
  mira-norte;
  si junto-a-zumbador entonces
  inicio
    mientras junto-a-zumbador hacer coge-zumbador;

    si frente-libre entonces avanza;
    mientras junto-a-zumbador y frente-libre hacer avanza;
    si no-junto-a-zumbador entonces
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
  fin
  sino
  inicio
    si frente-libre entonces avanza;
    mientras junto-a-zumbador hacer coge-zumbador;
    si frente-libre entonces avanza;
    mientras junto-a-zumbador y frente-libre hacer avanza;
    si no-junto-a-zumbador entonces
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
  fin;

fin;

    inicia-ejecucion
    aleja;
    patio;
    barre;

        apagate;
    termina-ejecucion
finalizar-programa
