iniciar-programa
define-nueva-instruccion gira(n) como
inicio
   repetir n veces
      gira-izquierda;
fin;
define-nueva-instruccion prueba(n) como
inicio
   si no-junto-a-zumbador entonces
   inicio
      si si-es-cero(precede(n)) entonces
      inicio
         gira(2);
         mientras no junto-a-zumbador hacer
         inicio
            deja-zumbador;
            avanza;
         fin;
         apagate;
      fin
      sino
      inicio
         si frente-libre entonces
         inicio
            avanza;
            prueba(precede(n));
         fin
         sino
         inicio
            gira(2);
            mientras no-junto-a-zumbador hacer
               avanza;
         fin;
       fin;
   fin
   sino
   inicio
      gira(2);
      avanza;
      mientras no-junto-a-zumbador hacer
         avanza;
   fin;
fin;


define-nueva-instruccion ini(n) como
inicio
   repetir precede(n) veces
      avanza;
   gira(2);
   mientras frente-libre o frente-bloqueado hacer
   inicio
      gira(1);
      avanza;
      si no-junto-a-zumbador entonces
      inicio
         deja-zumbador;
         gira(3);
         si frente-libre y no si-es-cero(precede(n)) entonces
         inicio
         avanza;
         prueba(precede(n));
         fin
         sino
           si si-es-cero(precede(n)) entonces
            apagate;
         coge-zumbador;
         gira(3);
      fin;
      gira(2);
      avanza;
      avanza;
      si no-junto-a-zumbador entonces
      inicio
         deja-zumbador;
         gira(1);
         si frente-libre y no si-es-cero(precede(n)) entonces
         inicio
           avanza;
           prueba(precede(n));
         fin
         sino
           si si-es-cero(precede(n)) entonces
            apagate;
         coge-zumbador;
         gira(1);
         fin;
      gira(2);
      avanza;
      gira(3);
      avanza;
   fin
fin;
define-nueva-instruccion long(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      si frente-libre entonces
      inicio
        avanza;
        long(sucede(n));
      fin
      sino
      inicio
         gira(2);
         ini(sucede(n));
      fin;
   fin
   sino
   inicio
      gira(2);
      avanza;
      ini(n);
   fin;

fin;
    inicia-ejecucion
       long(0);
        apagate;
    termina-ejecucion
finalizar-programa
