iniciar-programa
define-nueva-instruccion gira(e) como repetir e veces gira-izquierda;
define-nueva-instruccion termina como inicio
mientras junto-a-zumbador hacer inicio
   coge-zumbador;
 si frente-libre entonces  avanza;
fin;
 gira(2);
 mientras frente-libre hacer avanza;
 mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
 gira(3);
 avanza; gira(3);
 si junto-a-zumbador entonces termina sino mientras no orientado-al-este hacer gira-izquierda;

FIN;
define-nueva-instruccion aunNo como inicio
 mientras junto-a-zumbador hacer inicio
   coge-zumbador;
 si frente-libre entonces  avanza;
fin;
 gira(2);
 mientras frente-libre hacer avanza;
 mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
 gira(3);
 avanza; gira(3);
 si junto-a-zumbador entonces aunNO sino mientras no orientado-al-norte hacer gira-izquierda;
fin;


 define-nueva-instruccion compruebaAscendencia como inicio
  mientras junto-a-zumbador y frente-libre hacer avanza;
  gira(3);
 si frente-libre entonces avanza;
 si no junto-a-zumbador entonces inicio
 gira(3);
 avanza;
 gira(1);
 fin;
    si junto-a-zumbador entonces inicio
     gira(3);
     mientras frente-libre hacer avanza;
     gira(2);
     compruebaAscendencia;
     fin sino inicio
     gira(3);
     avanza;
     si no junto-a-zumbador entonces inicio
      mientras frente-libre hacer avanza;
      si no junto-a-zumbador entonces inicio
      gira(3);
      avanza; gira(3);
      termina;
      apagate;
      fin;
      gira(1);
      mientras frente-libre hacer avanza;
      gira(2);
      mientras no junto-a-zumbador hacer avanza;
      gira(3);
      aunNo;
      si orientado-al-norte entonces sal-de-instruccion;
        fin sino inicio
        si frente-bloqueado entonces inicio
          gira(1);
      mientras frente-libre hacer avanza;
      gira(2);
      mientras no junto-a-zumbador hacer avanza;
      gira(3);
      aunNo;
      si orientado-al-norte entonces sal-de-instruccion;
        fin;
          gira(2);
          compruebaAscendencia;
        fin;
     fin;
 FIN;
 define-nueva-instruccion despliega como inicio
 mientras junto-a-zumbador hacer inicio
   mientras junto-a-zumbador hacer coge-zumbador;
    mientras algun-zumbador-en-la-mochila hacer inicio
      deja-zumbador;
   si frente-libre entonces   avanza;
    fin;
   gira(2);
   mientras frente-libre hacer avanza;
   gira(1); avanza;
   gira(1);
    fin;
   gira(1);  avanza;
   mientras junto-a-zumbador hacer avanza; gira(2);  avanza;  gira(1);
   compruebaAscendencia;
    si orientado-al-norte entonces  inicio
    gira(3);
    avanza; gira(1);
    sal-de-instruccion;
    fin;
 FIN;


define-nueva-instruccion levy(n) como inicio
   si junto-a-zumbador entonces inicio
   coge-zumbador;
   levy(sucede(n));
    fin sino inicio
    gira(3);
    avanza;
    si junto-a-zumbador entonces inicio
    gira(1);
    repetir n veces inicio
    si junto-a-zumbador entonces coge-zumbador sino inicio
     repetir  n  veces deja-zumbador;
     gira(1);
     avanza;
     gira(3);
     sal-de-instruccion;
    fin;

    fin;
   si junto-a-zumbador entonces inicio
    gira(1);
    avanza;
    repetir n veces deja-zumbador;
    gira(2);
    avanza;
    gira(1);
    sal-de-instruccion;
   fin sino inicio
    gira(1);
    avanza;
    repetir n veces deja-zumbador;
    gira(2); avanza;
    gira(1);
    sal-de-instruccion;
   fin;
     fin sino inicio
      gira(2);
      avanza;
      repetir n veces deja-zumbador;
       mientras junto-a-zumbador hacer avanza;
       gira(2); avanza;
       gira(1);
     despliega;
    fin;
    fin;
 si algun-zumbador-en-la-mochila entonces  deja-zumbador;
fin;
    inicia-ejecucion
    mientras no orientado-al-este hacer gira-izquierda;
    avanza; avanza; gira(1);
  mientras orientado-al-norte hacer   levy(0);
        apagate;
    termina-ejecucion
finalizar-programa
