iniciar-programa
define-nueva-instruccion norte como
inicio
   mientras no-orientado-al-norte hacer gira-izquierda;
fin;
define-nueva-instruccion este como
inicio
   mientras no-orientado-al-este hacer gira-izquierda;
fin;
define-nueva-instruccion sur como
inicio
   mientras no-orientado-al-sur hacer gira-izquierda;
fin;
define-nueva-instruccion oeste como
inicio
   mientras no-orientado-al-oeste hacer gira-izquierda;
fin;
define-nueva-instruccion ir-11 como
inicio
   oeste;
   mientras frente-libre hacer avanza;
   sur;
   mientras frente-libre hacer avanza;
   este;
fin;
define-nueva-instruccion coge-zum como
inicio
   este;
   mientras no-junto-a-zumbador hacer avanza;
   repetir 250 veces coge-zumbador;
fin;
define-nueva-instruccion llena como
inicio
   si frente-libre entonces
   inicio
   mientras frente-libre hacer
     inicio
        deja-zumbador;
        avanza;
     fin;
   llena;
   fin
 sino
   inicio
     si frente-bloqueado y no-junto-a-zumbador entonces
       inicio
          deja-zumbador;
          este;
       fin;
     si frente-libre entonces
       inicio
          avanza;
          sur;
          mientras frente-libre hacer avanza;
          norte;
          llena;
       fin;
   fin;
fin;
define-nueva-instruccion coge como
inicio
   si frente-libre entonces
   inicio
   mientras frente-libre hacer
     inicio
        coge-zumbador;
        avanza;
     fin;
   coge;
   fin
 sino
   inicio
     si frente-bloqueado y junto-a-zumbador entonces
       inicio
          coge-zumbador;
          este;
       fin;
     si frente-libre entonces
       inicio
          avanza;
          sur;
          mientras frente-libre hacer avanza;
          norte;
          coge;
       fin;
   fin;
fin;

define-nueva-instruccion ir-1 como
inicio
   ir-11;
   norte;
   repetir 2 veces avanza;
   este;
   repetir 3 veces avanza;
fin;
define-nueva-instruccion ir-2 como
inicio
   ir-1;
   oeste;
   avanza;
   norte;
   repetir 3 veces avanza;
   este;
   avanza;

fin;
define-nueva-instruccion compara(x) como
inicio
   si no si-es-cero(x)entonces
     inicio
       si junto-a-zumbador entonces
         inicio
            coge-zumbador;
            compara(precede(x));
            deja-zumbador;
         fin
       sino
         inicio
            repetir x veces deja-zumbador;
         fin;
     fin;
fin;

define-nueva-instruccion toma(x) como
inicio
   si junto-a-zumbador entonces
     inicio
        coge-zumbador;
        toma(sucede(x));
     fin
   sino
    inicio
       mientras no-orientado-al-este hacer gira-izquierda;
       avanza;
       compara(x);
       mientras no-orientado-al-oeste hacer gira-izquierda;
       avanza;
       mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
       mientras no-orientado-al-este hacer gira-izquierda;
    fin;
fin;
    inicia-ejecucion
        coge-zum;
        ir-1;
        norte;
        llena;
        sur;
        mientras frente-libre hacer avanza;
        oeste;
        ir-2;
        norte;
        llena;
        sur;
        mientras frente-libre hacer avanza;
        ir-11;
        mientras no-junto-a-zumbador hacer avanza;
        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
        ir-1;
        norte;
        coge;
         sur;
        mientras frente-libre hacer avanza;
        ir-11;
        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
        ir-2;
        norte;
        coge;
         sur;
        mientras frente-libre hacer avanza;
        ir-11;
        avanza;
        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
        ir-11;
        toma(0);
        mientras junto-a-zumbador hacer coge-zumbador;
        repetir 4 veces avanza;
        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
        oeste;
        repetir 3 veces avanza;
        mientras junto-a-zumbador hacer coge-zumbador;
        avanza;
        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;

        apagate;
    termina-ejecucion
finalizar-programa
