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 derecha como repetir 3 veces 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 contar(n) como
  inicio
    si junto-a-zumbador entonces
      inicio
       coge-zumbador;
       contar(sucede(n));
      fin
    sino
      inicio
       ir11;
       este;
       repetir n veces
         inicio
          deja-zumbador;
          si frente-libre entonces avanza;
         fin;
     fin;
  fin;

define-nueva-instruccion recoge como
  inicio
    si junto-a-zumbador entonces contar(0);
    ir11;
  fin;

define-nueva-instruccion zum como
  inicio
    avanza;
    mientras no-junto-a-zumbador y frente-libre hacer avanza;
    si orientado-al-norte y frente-bloqueado y izquierda-bloqueada y no-junto-a-zumbador entonces apagate;
    este;
    recoge;
    avanza;
  fin;

define-nueva-instruccion irzum como
  inicio
   avanza;
   mientras no-junto-a-zumbador y frente-libre hacer avanza;
   si frente-bloqueado y no-junto-a-zumbador entonces derecha;
   si junto-a-zumbador entonces
     inicio
      sur;
      avanza;
      este;
     fin;
   mientras no-junto-a-zumbador y frente-libre hacer avanza;
   si no-junto-a-zumbador y frente-bloqueado entonces
     inicio
      ir11;
      zum;
     fin;
   si junto-a-zumbador entonces recoge;
  fin;

    inicia-ejecucion
    zum;
    mientras orientado-al-norte hacer
      inicio
        irzum;
      fin;
        apagate;
    termina-ejecucion
finalizar-programa
