iniciar-programa
   define-nueva-instruccion norte como inicio
       mientras no-orientado-al-norte hacer inicio
           gira-izquierda;
       fin;
   fin;

   define-nueva-instruccion este como inicio
       mientras no-orientado-al-este hacer inicio
           gira-izquierda;
       fin;
   fin;

   define-nueva-instruccion oeste como inicio
       mientras no-orientado-al-oeste hacer inicio
           gira-izquierda;
       fin;
   fin;

   define-nueva-instruccion sur como inicio
       mientras no-orientado-al-sur hacer inicio
           gira-izquierda;
       fin;
   fin;

   define-nueva-instruccion pon (p) como inicio
      si no-junto-a-zumbador entonces inicio
          repetir sucede(p) veces inicio
              deja-zumbador;
          fin;
      fin;
   fin;

   define-nueva-instruccion camina como inicio
      si frente-libre entonces inicio
         avanza;
      fin;
   fin;

   define-nueva-instruccion sube(n) como inicio
      si frente-libre entonces inicio
        si no si-es-cero(n) entonces  inicio
            repetir n veces inicio
               pon(n);
               camina;
            fin;
            pon(n);
            este;
            camina;
            norte;
            sube(precede (n));
        fin;
      fin;
   fin;

   define-nueva-instruccion regresa como inicio
        este;
        camina;
        norte;
        camina;
   fin;

   define-nueva-instruccion verificaRoze como inicio
     sur;
     camina;
     oeste;
     camina;
     si junto-a-zumbador entonces inicio
        coge-zumbador;
        si junto-a-zumbador entonces inicio
            coge-zumbador;
           si junto-a-zumbador entonces inicio
               deja-zumbador;
               deja-zumbador;
               norte;
               camina;
            fin sino inicio
               deja-zumbador;
               deja-zumbador;
               regresa;
            fin;
        fin sino inicio
           deja-zumbador;
           regresa;
        fin;
     fin sino inicio
        norte;
        camina;
        si junto-a-zumbador entonces inicio
           oeste;
           camina;
       fin;

     fin;
   fin;

   define-nueva-instruccion cuenta(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         cuenta( sucede (n) );
      fin sino inicio
         sube( precede (n) );
         pon(0);
         si frente-bloqueado entonces inicio
           verificaRoze;
         fin;
      fin;
   fin;

     define-nueva-instruccion baja(n) como inicio
        si frente-libre   entonces inicio
           repetir n veces  inicio
               pon(n);
               camina;
           fin;
           pon(n);
           si frente-libre entonces inicio
              este;
              camina;
              sur;
              baja( sucede (n));
           fin;
        fin sino inicio
           si izquierda-libre y no-junto-a-zumbador entonces inicio
              oeste;
              camina;
           fin sino inicio
             oeste;
           fin;

        fin;
     fin;

    define-nueva-instruccion ir_11 como inicio
        norte;
        repetir 2 veces inicio
           gira-izquierda;
           mientras frente-libre hacer inicio
              avanza;
           fin;
        fin;
        este;
    fin;

     define-nueva-instruccion mide como inicio
        si frente-libre entonces inicio
           avanza;
           mide;
        fin sino inicio
           ir_11;
           mientras junto-a-zumbador hacer inicio
              coge-zumbador;
           fin;
        fin;
        deja-zumbador;
     fin;

    inicia-ejecucion
        norte;
        cuenta(0);
        este;
        camina;
        sur;
        baja(0);
        oeste;
        mide;
        apagate;
    termina-ejecucion
finalizar-programa