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 ir11 como
 inicio
  oeste;
  mientras frente-libre hacer avanza;
  sur;
  mientras frente-libre hacer avanza;
  norte;
 fin;

define-nueva-instruccion vaciar como
 inicio
  mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
 fin;


define-nueva-instruccion encontrar como
 inicio
  repetir 2 veces avanza;
  este;
   mientras no orientado-al-norte hacer
    inicio
     mientras no junto-a-zumbador y frente-libre hacer avanza;
     si junto-a-zumbador entonces sal-de-instruccion;
     si frente-bloqueado entonces
      inicio
       norte;
       si frente-libre entonces avanza
       sino sal-de-instruccion;
       si derecha-bloqueada entonces oeste
       sino este;
      fin;
    fin;
 fin;

define-nueva-instruccion ordenar como
 inicio
  si junto-a-zumbador entonces
   inicio
    coge-zumbador;
    ordenar;
     si frente-libre entonces avanza;
   fin

    sino
     inicio
      ir11;
      este;
     fin;
 fin;

define-nueva-instruccion sobras como
 inicio
  ir11;
  avanza;
  este;
  repetir 2 veces avanza;
  vaciar;
  ir11;
 fin;

define-nueva-instruccion irn como
 inicio
  ir11;
  avanza;
 fin;

define-nueva-instruccion dejar22 como
 inicio
  ir11;
  avanza;
  este;
  avanza;
  vaciar;
 fin;

define-nueva-instruccion eliminar(n) como
 inicio
  si junto-a-zumbador entonces
   inicio
    coge-zumbador;
     eliminar(sucede(n));
      mientras frente-libre hacer
       inicio
        mientras no junto-a-zumbador y frente-libre hacer avanza;
        si junto-a-zumbador entonces
         inicio
          repetir n veces si junto-a-zumbador entonces coge-zumbador;
           si junto-a-zumbador entonces
            inicio
             vaciar;
             avanza;
            fin
             sino
              inicio
               dejar22;
               ir11;
               este;
              fin;
         fin;

       fin;
   fin
    sino
     inicio
      vaciar;
      ir11;
      este;
     fin;
 fin;

 define-nueva-instruccion qitar1n como
  inicio
   coge-zumbador;
   avanza;
   deja-zumbador;
   sur;
   avanza;
  fin;

 define-nueva-instruccion contar(n) como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     contar(sucede(n));
    fin
     sino
      inicio
       vaciar;
       ir11;
       este;
      fin;
    mientras frente-libre hacer
     inicio
      mientras no junto-a-zumbador y frente-libre hacer avanza;
      si junto-a-zumbador entonces
       inicio
        repetir n veces si junto-a-zumbador entonces coge-zumbador;
        si frente-libre entonces avanza;
       fin;
     fin;
  fin;

 define-nueva-instruccion limpiar11 como
  inicio
   ir11;
   mientras junto-a-zumbador hacer coge-zumbador;
   este;
   avanza;
   vaciar;
   ir11;
  fin;

 define-nueva-instruccion recoger22 como
  inicio
   avanza;
   este;
   avanza;
   mientras junto-a-zumbador hacer coge-zumbador;
   ir11;
   vaciar;
  fin;

  define-nueva-instruccion terminar como
   inicio
   avanza;
    mientras no junto-a-zumbador y frente-libre hacer avanza;
    coge-zumbador;
    ir11;
    deja-zumbador;
   fin;

    inicia-ejecucion
          mientras frente-libre hacer
           inicio
            encontrar;
             si junto-a-zumbador entonces
              inicio
               ordenar;
               oeste;
               avanza;
               deja-zumbador;
               ir11;
              fin
               sino
                inicio
                 ir11;
                 sur;
                fin;
           fin;
          sobras;
          irn;
          si no junto-a-zumbador entonces apagate;
          eliminar(0);
          irn;
          qitar1n;
          contar(0);
          dejar22;
          limpiar11;
          recoger22;
          terminar;
        apagate;
    termina-ejecucion
finalizar-programa
