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 comprobar como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         si no-junto-a-zumbador entonces
         inicio
            si derecha-libre entonces
            inicio
               este;
               avanza;
               sur;
            fin;
         fin
         sino
         inicio
            si derecha-libre y frente-libre entonces inicio
              deja-zumbador;deja-zumbador;
              este;
              avanza;
              norte;
            fin
            sino sur;
         fin;

      fin
      sino
      inicio
         sur;
         deja-zumbador;
      fin;
   fin;
fin;

define-nueva-instruccion subir(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      subir(sucede(n));
   fin
   sino
   inicio
      norte;
   fin;
   si orientado-al-norte y no si-es-cero(n) entonces
   inicio
     repetir n veces deja-zumbador;
     repetir precede(n) veces
     inicio
        si frente-libre y orientado-al-norte entonces
        inicio
           avanza;
           repetir n veces deja-zumbador;
        fin
        sino sur;

     fin;

       si orientado-al-norte y  derecha-libre y no si-es-cero(precede(n))  entonces
       inicio
          comprobar;
       fin
       sino
       inicio
          si derecha-bloqueada y orientado-al-norte entonces oeste;
       fin;
   fin;
fin;

define-nueva-instruccion girar como
inicio
   si no-orientado-al-oeste entonces
   inicio
      si izquierda-libre entonces
      inicio
         este;
         avanza;
         sur;
      fin
      sino oeste;
  fin;
fin;

define-nueva-instruccion marcar como
inicio
   sur;
   si frente-libre entonces
   inicio
      mientras frente-libre hacer avanza;
      deja-zumbador;
      norte;
      avanza;
      mientras no-junto-a-zumbador hacer avanza;
   fin;
fin;

define-nueva-instruccion bajar(n) como
inicio
   si frente-libre y orientado-al-sur entonces
   inicio
      repetir n veces
      inicio
         si no-junto-a-zumbador y frente-libre y orientado-al-sur entonces repetir sucede(n) veces deja-zumbador;
         si frente-libre y orientado-al-sur entonces avanza sino norte;
         si no-junto-a-zumbador y frente-libre y orientado-al-sur entonces repetir sucede(n) veces deja-zumbador;
      fin;
      si orientado-al-sur y frente-libre  entonces girar;
      bajar(sucede(n));
   fin;
fin;

define-nueva-instruccion contar(n) como
inicio
   si no-junto-a-zumbador entonces
   inicio
      avanza;
      contar(sucede(n));
   fin
   sino
   inicio
      mientras junto-a-zumbador hacer coge-zumbador;
      repetir sucede(n) veces deja-zumbador;
   fin;
fin;

    inicia-ejecucion
        si no-junto-a-zumbador entonces apagate;
        marcar;
        subir(0);
        girar;
        si no-orientado-al-oeste entonces bajar(0)
        sino
        inicio
           sur;
           mientras frente-libre hacer avanza;
        fin;
        sur;
        mientras frente-libre hacer avanza;
        oeste;

        contar(0);
        apagate;
    termina-ejecucion
finalizar-programa
