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
   sur;
   mientras frente-libre hacer avanza;
   oeste;
   mientras frente-libre hacer avanza;
   este;
  fin;

define-nueva-instruccion acomodary(n) como
  inicio
   si junto-a-zumbador entonces
     inicio
      coge-zumbador;
      acomodary(sucede(n));
     fin
   sino
     inicio
      repetir n veces deja-zumbador;
      oeste;
      avanza;
      arriba;
      este;
      mientras orientado-al-este hacer
        inicio
         repetir n veces
           inicio
            si frente-libre entonces
              inicio
               si orientado-al-este entonces avanza;
              fin
            sino sur;
           fin;
           si si-es-cero(n) entonces sur;
         deja-zumbador;
        fin;
     fin;
  fin;

define-nueva-instruccion acomodarx(n) como
  inicio
   si junto-a-zumbador entonces
     inicio
      coge-zumbador;
      acomodarx(sucede(n));
     fin
   sino
     inicio
      repetir n veces deja-zumbador;
      arriba;
      avanza;
      este;
      mientras orientado-al-este hacer
        inicio
         repetir n veces
           inicio
            si frente-libre entonces
              inicio
               si orientado-al-este entonces avanza;
              fin
            sino sur;
           fin;
           si si-es-cero(n) entonces sur;
         deja-zumbador;
        fin;
     fin;
  fin;

define-nueva-instruccion medir(n) como
  inicio
   si frente-libre entonces
     inicio
      avanza;
      medir(sucede(n));
     fin
   sino
     inicio
      abajo;
      este;
      avanza;
      avanza;
      oeste;
      repetir n veces deja-zumbador;
     fin;
  fin;

define-nueva-instruccion buscar como
  inicio
   arriba;
   avanza;
   este;
   mientras orientado-al-este hacer
     inicio
      mientras no-junto-a-zumbador y frente-libre hacer avanza;
      si junto-a-zumbador entonces
        inicio
         abajo;
         si no-junto-a-zumbador entonces
           inicio
            arriba;
            este;
            si frente-libre entonces avanza;
           fin
         sino
           inicio
            oeste;
            medir(0);
           fin;
        fin;
      si frente-bloqueado entonces sur;
     fin;
  fin;

    inicia-ejecucion
     ir11;
     acomodarx(0);
     ir11;
     avanza;
     acomodary(0);
     ir11;
     buscar;
        apagate;
    termina-ejecucion
finalizar-programa
