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 tortuga(n) como
inicio
  si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      tortuga(sucede(n));
    fin
  sino
    inicio
      avanza;
      avanza;
      este;
      mientras no-junto-a-zumbador y frente-libre hacer avanza;
      si no-junto-a-zumbador entonces
        inicio
          oeste;
          mientras frente-libre hacer avanza;
          este;
        fin
      sino coge-zumbador;
      si frente-libre entonces
       inicio
         mientras frente-libre hacer
           inicio
             repetir n veces si frente-libre entonces avanza;
             deja-zumbador;
           fin;
       fin
      sino deja-zumbador;
    fin;
fin;
define-nueva-instruccion devolver como
inicio
  oeste;
  mientras frente-libre hacer avanza;
  sur;
  avanza;
  norte;
fin;

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

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

define-nueva-instruccion iguales(n) como
inicio
  si junto-a-zumbador y orientado-al-este entonces
    inicio
      coge-zumbador;
      iguales(sucede(n));
    fin
  sino
   inicio
     sur;
     avanza;
     repetir n veces
       inicio
         si junto-a-zumbador entonces coge-zumbador
         sino norte;
       fin;
     si no-orientado-al-norte entonces
       inicio
         si no-junto-a-zumbador entonces
           inicio
             devolver;
             sur;
             mientras frente-libre hacer avanza;
             repetir n veces deja-zumbador;
           fin;
       fin;
   fin;
fin;




    inicia-ejecucion
        norte;
        avanza;
        tortuga(0);
        devolver;
        conejo(0);
        devolver;
        este;
        sumar(0);
        devolver;
        avanza;
        avanza;
        este;
        sumar(0);
        oeste;
        mientras frente-libre hacer avanza;
        este;
        mientras orientado-al-este hacer
          inicio
            mientras no-junto-a-zumbador y frente-libre hacer avanza;
            si junto-a-zumbador entonces iguales(0);
            si orientado-al-norte entonces
              inicio
                avanza;
                este;
              fin;
            si frente-bloqueado entonces sur;  
          fin;
        apagate;
    termina-ejecucion
finalizar-programa
