iniciar-programa
define-nueva-instruccion media-vuelta como
inicio
 repetir 2 veces
  gira-izquierda;
fin;
define-nueva-instruccion comparar(x) como
inicio
 si si-es-cero(x) entonces
  inicio
    sal-de-instruccion;
  fin
  sino
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     comparar(precede(x));
     deja-zumbador;
    fin
    sino
    inicio
     media-vuelta;
     avanza;
      gira-izquierda;
    fin;
  fin;
fin;


define-nueva-instruccion compara(x) como
inicio
 si si-es-cero(x) entonces
  inicio
    sal-de-instruccion;
  fin
  sino
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     compara(precede(x));
     si no-orientado-al-norte entonces
     deja-zumbador;
    fin
    sino
    inicio
     media-vuelta;
     avanza;
     repetir 3 veces
      gira-izquierda;
    fin;
  fin;
fin;

define-nueva-instruccion camino(x) como
inicio
 si junto-a-zumbador entonces
  inicio
   coge-zumbador;
   camino(sucede(x));
  fin
  sino
  inicio
  mientras no-orientado-al-norte hacer
  inicio
   repetir x veces
    deja-zumbador;
   avanza;
   compara(x);
   si no-orientado-al-norte entonces
   camino(0);
   fin;

  fin;
fin;

define-nueva-instruccion caminoarr(x) como
inicio
 si junto-a-zumbador entonces
  inicio
   coge-zumbador;
   caminoarr(sucede(x));
  fin
  sino
  inicio
  mientras no-orientado-al-este hacer
  inicio
   avanza;
   comparar(x);
   caminoarr(0);
   fin;

  fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer
     gira-izquierda;
    camino(0);
    caminoarr(0);
        apagate;
    termina-ejecucion
finalizar-programa
