iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;

define-nueva-instruccion comprobar como
inicio
  si junto-a-zumbador entonces coge-zumbador;
fin;


define-nueva-instruccion tortas como
inicio
  si junto-a-zumbador entonces
    inicio
      si junto-a-zumbador entonces
         inicio
           comprobar;
           si no-junto-a-zumbador entonces
             inicio
               deja-zumbador;
               sal-de-instruccion;
             fin
           sino coge-zumbador;
         fin;
      norte;
      si frente-libre entonces
        inicio
          avanza;
          tortas;
          sur;
          avanza;
        fin;
       sur;
      si frente-libre entonces
        inicio
          avanza;
          tortas;
          norte;
          avanza;
        fin;
       este;
      si frente-libre entonces
        inicio
          avanza;
          tortas;
          oeste;
          avanza;
        fin;
        oeste;
      si frente-libre entonces
        inicio
          avanza;
          tortas;
          este;
          avanza;
        fin;
    fin;
fin;

define-nueva-instruccion ireskina como
inicio
   sur;
   mientras frente-libre hacer avanza;
   oeste;
   mientras frente-libre hacer avanza;
   este;
fin;


define-nueva-instruccion dejar(n) como
inicio
  si algun-zumbador-en-la-mochila entonces
    inicio
      deja-zumbador;
      dejar(sucede(n));
    fin
  sino
    inicio
       mientras junto-a-zumbador hacer coge-zumbador;
       repetir n veces deja-zumbador;
    fin;
fin;

define-nueva-instruccion gira como
inicio
  este;
  mientras frente-libre hacer avanza;
  sur;
  avanza;
  oeste;
fin;

define-nueva-instruccion repartir(n) como
inicio
  mientras orientado-al-oeste hacer
    inicio
      si no-junto-a-zumbador y frente-libre entonces avanza;
      si junto-a-zumbador y orientado-al-oeste y (frente-libre o izquierda-libre) entonces
        inicio
          coge-zumbador;
          si no-junto-a-zumbador entonces
            inicio
               repartir(sucede(n));
            fin
          sino coge-zumbador;
        fin;
       si frente-libre y orientado-al-oeste entonces avanza
       sino
         inicio
         si orientado-al-oeste entonces inicio
           si izquierda-libre entonces gira
           sino
            inicio
             este;
             repetir n veces repetir 2 veces si junto-a-zumbador entonces coge-zumbador;
            fin;
          fin;
         fin;
    fin;
fin;

define-nueva-instruccion comprobar2 como
inicio
  si algun-zumbador-en-la-mochila entonces
    inicio
       deja-zumbador;
       si ningun-zumbador-en-la-mochila entonces
         inicio
           coge-zumbador;
           repartir(1);
         fin
       sino
         inicio
           coge-zumbador;
           repartir(0);
         fin;
    fin
  sino repartir(0);
fin;

define-nueva-instruccion mitad(n) como
inicio
  si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      coge-zumbador;
      mitad(sucede(n));
    fin
  sino repetir n veces deja-zumbador;
fin;

    inicia-ejecucion
    tortas;
    ireskina;
    si algun-zumbador-en-la-mochila entonces dejar(0)
    sino
      inicio
        mientras junto-a-zumbador hacer coge-zumbador;
        apagate;
      fin;
    norte;
    mientras frente-libre hacer avanza;
    este;
    mientras frente-libre hacer avanza;
    oeste;
    comprobar2;
    ireskina;
    mitad(0);

        apagate;
    termina-ejecucion
finalizar-programa
