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

     fin;
     define-nueva-instruccion cuenta(n) como
     inicio
         si junto-a-zumbador entonces
         inicio
           coge-zumbador;
           cuenta(sucede(n));
         fin
         sino
         inicio
            mientras no-junto-a-zumbador hacer
               avanza;
            coge-zumbador;
            gira(1);
            llena(n);
         fin;
     fin;
     define-nueva-instruccion m(n) como
     inicio
     si frente-libre entonces
     inicio
        avanza;
        avanza;
        m(sucede(sucede(n)));
        avanza;
     fin
     sino
     inicio
        repetir n veces
           repetir n veces
              deja-zumbador;
        gira(2);
     fin;
     fin;
    inicia-ejecucion
        mientras no-orientado-al-oeste hacer
           gira-izquierda;
        mientras frente-libre hacer
           avanza;
           gira(1);
         mientras frente-libre hacer
            avanza;   
         gira(1);
          si frente-bloqueado entonces
         inicio
            deja-zumbador;
            apagate;
         fin;
         m(1);
         deja-zumbador;
         gira(2);
         mientras frente-libre hacer
            avanza;
         gira(2);
         cuenta(0);
        apagate;
    termina-ejecucion
finalizar-programa
