iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
  repetir 3 veces
    gira-izquierda;
fin;
define-nueva-instruccion mira-este como
inicio
  mientras no-orientado-al-este hacer
    gira-izquierda;
fin;
define-nueva-instruccion paso-atras como
inicio
  repetir 2 veces
    gira-izquierdA;
  avanza;
  repetir 2 veces
    gira-izquierda;
fin;
define-nueva-instruccion mira-norte como
inicio
  mientras no-orientado-al-norte hacer
    gira-izquierdA;
fin;
define-nueva-instruccion mira-oeste como
inicio
  mientras no-orientado-al-oeste hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-sur como
inicio
  mientras no-orientado-al-sur hacer
    gira-izquierda;
fin;
define-nueva-instruccion cuenta(m) como
inicio
  si orientado-al-norte y junto-a-zumbador entonces
  inicio
    coge-zumbador;
    si frente-libre entonces
      avanza
    sino
    inicio
     si derecha-libre entonces
     inicio
       gira-derecha;
       avanza;
       mira-sur;
       mientras frente-libre hacer
         avanza;
       repetir 2 veces
        paso-atras;
      mira-norte;
     fin
     sino
     inicio
     si derecha-bloqueada entonces
     inicio
       mira-sur;
       mientras frente-libre hacer
       avanza;
     fin;
     fin;
    fin;

   cuenta(sucede(m))

  fin
  sino
  inicio
    si orientado-al-sur entonces
    inicio
      gira-derecha;
      mientras frente-libre hacer
        avanza;
      mira-este;
      mientras junto-a-zumbador y frente-libre hacer
        avanza;
      repetir m veces
        deja-zumbador;

    fin;
    si no-junto-a-zumbador y no-orientado-al-sur entonces
    inicio
 si frente-libre entonces
 inicio
      avanza;
      cuenta(m);
 fin
    sino
    inicio
     si derecha-libre entonces
     inicio
       gira-derecha;
       avanza;
       mira-sur;
       mientras frente-libre hacer
         avanza;
       repetir 2 veces
        paso-atras;
      mira-norte;
      si junto-a-zumbador entonces
        cuenta(m)
      sino
      inicio
        mientras no-junto-a-zumbador y frente-libre hacer
          avanza;
        si frente-bloqueado entonces
        cuenta(m);
        si junto-a-zumbador entonces
          cuenta(m);
      fin;
     fin
     sino
     inicio
     si derecha-bloqueada entonces
     inicio
       mira-sur;
       mientras frente-libre hacer
       avanza;
       cuenta(m);
     fin;
     fin;
    fin;
    fin;
  fin;
fin;
define-nueva-instruccion distancia(n) como
inicio
  si frente-libre entonces
  inicio
    avanza;
    distancia(sucede(n));
  fin
  sino
  inicio
    repetir 2 veces
      gira-izquierda;
    mientras frente-libre hacer
      avanza;
   mira-norte;
   repetir 2 veces
     avanza;
   repetir n veces
   inicio
     cuenta(0);
     mira-oeste;
      mientras frente-libre hacer
        avanza;
     mira-norte;
     repetir 2 veces
       avanza;
   fin;
  fin;
fin;
    inicia-ejecucion
      gira-derecha;
      distancia(1);
        apagate;
    termina-ejecucion
finalizar-programa

