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 funcion como
 inicio
  si junto-a-zumbador entonces
   inicio
    coge-zumbador;
    si junto-a-zumbador entonces
     inicio
      coge-zumbador;
       si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         si frente-libre entonces
          avanza;
         funcion;
         gira-derecha;
         mientras frente-libre hacer
          avanza;
         gira-izquierda;
         mientras frente-libre hacer
          avanza;
         gira-izquierda;
         gira-izquierda;
         mientras junto-a-zumbador hacer
          avanza;
         deja-zumbador;
         gira-derecha;
         avanza;
         gira-derecha;
         mientras frente-libre hacer
          avanza;
         media-vuelta;
         mientras junto-a-zumbador hacer
          avanza;
         deja-zumbador;
         deja-zumbador;
         media-vuelta;
       fin
       sino
       inicio
        funcion;
        gira-derecha;
        mientras frente-libre hacer
         avanza;
        gira-izquierda;
        mientras frente-libre hacer
         avanza;
        gira-izquierda;
        avanza;
        gira-izquierda;
        mientras junto-a-zumbador hacer
         avanza;
        repetir 2 veces
         deja-zumbador;
        media-vuelta;
       fin;
     fin
     sino
      inicio
       funcion;
       gira-derecha;
       mientras frente-libre hacer
        avanza;
       gira-izquierda;
       mientras frente-libre hacer
        avanza;
       gira-izquierda;
       gira-izquierda;
       mientras junto-a-zumbador hacer
        avanza;
       deja-zumbador;
       media-vuelta;
      fin;
   fin
   sino
    inicio
     si frente-libre entonces
      inicio
       avanza;
       funcion;
      fin
      sino
      inicio
       si izquierda-libre y frente-bloqueado entonces
       inicio
        media-vuelta;
        mientras frente-libre hacer
         avanza;
        gira-derecha;
        avanza;
        gira-derecha;
        funcion;
       fin
       sino
       inicio
        media-vuelta;
        mientras frente-libre hacer
         avanza;
        gira-izquierda;
        mientras frente-libre hacer
         avanza;
        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;
     funcion;
        apagate;
    termina-ejecucion
finalizar-programa
