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 arriba como
  inicio
   norte;
   si frente-libre entonces avanza;
  fin;

define-nueva-instruccion abajo como
  inicio
   sur;
   si frente-libre entonces avanza;
  fin;

define-nueva-instruccion ir11 como
  inicio
   norte;
   repetir 8 veces si frente-libre entonces avanza;
   oeste;
   mientras frente-libre hacer avanza;
   sur;
   mientras frente-libre hacer avanza;
   norte;
  fin;

define-nueva-instruccion buscar(n) como
  inicio
   si no si-es-cero(n) entonces
     inicio
      si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         buscar(precede(n));
        fin
      sino
        inicio
         mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
         si frente-bloqueado entonces sur;
         si frente-libre y orientado-al-este entonces avanza;
        fin;
     fin
   sino
     inicio
      si no-junto-a-zumbador entonces
        inicio
         abajo;
         deja-zumbador;
         arriba;
         mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
         este;
         si frente-bloqueado entonces sur;
         si frente-libre y orientado-al-este entonces avanza;
        fin
      sino
        inicio
         mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
         si frente-bloqueado entonces sur;
         si frente-libre y orientado-al-este entonces avanza;
        fin;
     fin;
  fin;

define-nueva-instruccion tendedero(n) como
  inicio
   si junto-a-zumbador entonces
     inicio
      coge-zumbador;
      tendedero(sucede(n));
     fin
   sino
     inicio
      mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
      repetir 4 veces avanza;
      este;
      mientras orientado-al-este hacer buscar(n);
     fin;
  fin;

define-nueva-instruccion juntar como
  inicio
   abajo;
   oeste;
   mientras orientado-al-oeste hacer
     inicio
      mientras no-junto-a-zumbador y frente-libre hacer avanza;
      mientras junto-a-zumbador y orientado-al-oeste hacer
        inicio
         coge-zumbador;
         si frente-libre entonces avanza;
         si no-junto-a-zumbador o frente-bloqueado entonces
           inicio
            mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
            este;
           fin;
        fin;
        oeste;
        si frente-bloqueado y ningun-zumbador-en-la-mochila entonces este;
       si frente-libre y orientado-al-oeste entonces avanza;
     fin;
  fin;

define-nueva-instruccion compara(n) como
  inicio
   si no si-es-cero(n) entonces
     inicio
      si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         compara(precede(n));
         deja-zumbador;
        fin;
     fin
   sino
     inicio
      mientras junto-a-zumbador hacer coge-zumbador;
     fin;
  fin;

define-nueva-instruccion toma(n) como
  inicio
   si junto-a-zumbador entonces
     inicio
      coge-zumbador;
      toma(sucede(n));
     fin
   sino
     inicio
      avanza;
      compara(n);
      oeste;
      avanza;
      mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
      este;
     fin;
   fin;

define-nueva-instruccion pasadas(n) como
  inicio
   oeste;
   mientras frente-libre hacer avanza;
   este;
   repetir n veces
     inicio
      toma(0);
      avanza;
     fin;
  fin;

define-nueva-instruccion ordenar(n) como
  inicio
   si frente-libre entonces
     inicio
      avanza;
      ordenar(sucede(n));
     fin
   sino
     inicio
      repetir n veces
        inicio
         pasadas(n);
        fin;
     fin;
  fin;

define-nueva-instruccion llevar como
  inicio
   ir11;
   repetir 4 veces avanza;
   mientras junto-a-zumbador hacer coge-zumbador;
   sur;
   mientras frente-libre hacer avanza;
   mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
  fin;

inicia-ejecucion
  ir11;
  avanza;
  tendedero(0);
  juntar;
  ordenar(0);
  llevar;
        apagate;
    termina-ejecucion
finalizar-programa
