iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
 repetir 3 veces
  gira-izquierda;
fin;
define-nueva-instruccion media-vuelta como
inicio
 repetir 2 veces
  gira-izquierda;
fin;
define-nueva-instruccion super-avanza como
inicio
 mientras frente-libre hacer
  avanza;
fin;
define-nueva-instruccion lugar como
inicio
 si junto-a-zumbador entonces
  inicio
   coge-zumbador;
   lugar;
   avanza;
  fin
  sino
  inicio
   super-avanza;
   media-vuelta;
  fin;
fin;
define-nueva-instruccion altura como
inicio
 si junto-a-zumbador entonces
  inicio
   coge-zumbador;
   altura;
   avanza;
   deja-zumbador;
   fin
   sino
   inicio
    media-vuelta;
    avanza;
    mientras no-junto-a-zumbador hacer
     avanza;
    gira-derecha;
  fin;
fin;
define-nueva-instruccion largo como
inicio
 si junto-a-zumbador entonces
  inicio
   coge-zumbador;
   largo;
   avanza;
   deja-zumbador;
  fin
  sino
  inicio
   avanza;
   mientras no-junto-a-zumbador hacer
    avanza;
   gira-derecha;
   mientras junto-a-zumbador y frente-libre hacer
    avanza;
   gira-derecha;
   fin;
 fin;
 define-nueva-instruccion cuentap como
 inicio
  si frente-libre entonces
   inicio
    avanza;
    cuentap;
    deja-zumbador;
   fin
   sino
   inicio
    gira-derecha;
    super-avanza;
    gira-izquierda;
    avanza;
    deja-zumbador;
   fin;
 fin;

 define-nueva-instruccion alejada como
 inicio
  media-vuelta;
  super-avanza;
  media-vuelta;
  cuentap;
 fin;
define-nueva-instruccion der(x) como
  inicio
    si no si-es-cero(x) entonces
     inicio
      si frente-libre entonces
       inicio
        avanza;
        der(precede(x));
       fin
       sino
       inicio
        gira-derecha;
        super-avanza;
        gira-izquierda;
        avanza;
        deja-zumbador;
        apagate;
       fin;
     fin
     sino
     inicio
     alejada;
     apagate;
     fin;
  fin;
 define-nueva-instruccion cuenta(x) como
 inicio
  si no-junto-a-zumbador entonces
   inicio
     avanza;
     cuenta(sucede(x));
   fin
   sino
   inicio
    mientras junto-a-zumbador hacer
     avanza;
    der(x);
   fin;
 fin;

    inicia-ejecucion
    gira-derecha;
    avanza;
    media-vuelta;
    lugar;
    media-vuelta;
    avanza;
    media-vuelta;
    deja-zumbador;
    avanza;
    mientras no-junto-a-zumbador hacer
     avanza;
     coge-zumbador;
    altura;
    media-vuelta;
    super-avanza;
    gira-izquierda;
    avanza;
    mientras no-junto-a-zumbador hacer
     avanza;
    media-vuelta;
    coge-zumbador;
    largo;

    media-vuelta;
    mientras frente-libre hacer
     avanza;
    media-vuelta;
    cuenta(0);


        apagate;
    termina-ejecucion
finalizar-programa
