iniciar-programa
define-nueva-instruccion media-vuelta como
inicio
 repetir 2 veces
  gira-izquierda;
fin;
define-nueva-instruccion gira-derecha como
inicio
 repetir 3 veces
  gira-izquierda;
fin;
define-nueva-instruccion cuadrop como
inicio
 repetir 4 veces
  inicio
   si frente-libre entonces
    inicio
     avanza;
     deja-zumbador;
     media-vuelta;
     avanza;
     media-vuelta;
    fin;
  gira-izquierda;
 fin;
 si frente-libre entonces
 inicio
  avanza;
  gira-izquierda;
  si frente-libre entonces
   inicio
    avanza;
    deja-zumbador;
    media-vuelta;
    avanza;
    media-vuelta;
   fin;
  media-vuelta;
  si frente-libre entonces
  inicio
   avanza;
   deja-zumbador;
   media-vuelta;
   avanza;
   media-vuelta;
  fin;
  gira-derecha;
  avanza;
  media-vuelta;
 fin;
 media-vuelta;
 si frente-libre entonces
  inicio
   avanza;
   gira-izquierda;
   si frente-libre entonces
    inicio
     avanza;
     deja-zumbador;
     media-vuelta;
     avanza;
     media-vuelta;
    fin;
   media-vuelta;
   si frente-libre entonces
    inicio
     avanza;
     deja-zumbador;
     media-vuelta;
     avanza;
     media-vuelta;
    fin;
   gira-derecha;
   avanza;
 fin
 sino
 inicio
  media-vuelta;
 fin;
fin;
define-nueva-instruccion bomba(x) como
inicio
 si si-es-cero(x) entonces
  inicio
   cuadrop;
  fin
  sino
  inicio
   si junto-a-zumbador entonces
   inicio
    coge-zumbador;
    bomba(precede(x));
    deja-zumbador;
   fin;
 fin;
fin;
define-nueva-instruccion cuadro como
inicio
 si junto-a-zumbador entonces
  inicio
   bomba(9);
   si frente-libre entonces
    inicio
     avanza;
     cuadro;
    fin
    sino
    inicio
     si izquierda-libre entonces
      inicio
       media-vuelta;
       mientras frente-libre hacer
        avanza;
       gira-derecha;
       avanza;
       gira-derecha;
       cuadro;
      fin;
     fin;
  fin
  sino
  inicio
   si frente-libre entonces
    inicio
     avanza;
     cuadro;
    fin
    sino
    inicio
     si izquierda-libre entonces
      inicio
       media-vuelta;
       mientras frente-libre hacer
        avanza;
       gira-derecha;
       avanza;
       gira-derecha;
       cuadro;
      fin;
     fin;
   fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-sur hacer
     gira-izquierda;
    mientras frente-libre hacer
     avanza;
    gira-derecha;
    mientras frente-libre hacer
     avanza;
    media-vuelta;
    cuadro;
        apagate;
    termina-ejecucion
finalizar-programa
