iniciar-programa
define-nueva-instruccion gira(n) como
inicio
   repetir n veces
      gira-izquierda;
fin;
define-nueva-instruccion regresa1(n) como
inicio
   gira(1);
   si frente-bloqueado entonces
      apagate;
   repetir n veces
     si frente-libre entonces
      avanza;
   gira(1);
   mientras frente-libre hacer
       avanza;
   gira(2);
fin;
define-nueva-instruccion regresa como
inicio
   gira(1);
   si frente-libre entonces
      avanza;
   gira(1);
   repetir 50 veces
     si frente-libre entonces
       avanza;
   gira(2);
fin;
define-nueva-instruccion pinta(n) como
inicio
   repetir precede(n) veces
      inicio
         deja-zumbador;
         repetir precede(n) veces
         inicio
            avanza;
            deja-zumbador;
         fin;
         gira(1);
         avanza;
         gira(1);
         repetir precede(n) veces
            avanza;
         gira(2);
      fin;
      deja-zumbador;
      repetir precede(n) veces
      inicio
         avanza;
         deja-zumbador;
      fin;
      gira(2);
      repetir precede(n) veces
         avanza;
      gira(1);
      repetir precede(n) veces
         avanza;
      gira(1);
fin;
define-nueva-instruccion dfs(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      mientras junto-a-zumbador hacer
         coge-zumbador;
      dfs(n);
      pinta(n);
   fin
   sino
   si frente-libre entonces
   inicio
      avanza;
      dfs(n);
      repetir n veces
      si frente-libre entonces
         avanza;
   fin
   sino
   inicio
     si izquierda-libre entonces
     inicio
         regresa;
         dfs(n);
         regresa1(n);
      fin
      sino
      inicio
         mientras no-orientado-al-oeste hacer
            gira-izquierda;
         mientras frente-libre hacer
            avanza;
        gira(1);
        mientras frente-libre hacer
           avanza;
        gira(1);
     fin;
   fin;
fin;
define-nueva-instruccion come(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      come(sucede(n));
    fin
    sino
    inicio
       repetir n veces
          deja-zumbador;
       mientras no-orientado-al-oeste hacer
          gira-izquierda;
       repetir 2 veces
       inicio
          mientras frente-libre hacer
             avanza;
          gira(1);
       fin;
       repetir 50 veces
         si frente-libre entonces
          avanza;
       gira(1);
       repetir 50 veces
         si frente-libre entonces
          avanza;
       gira(1);
       dfs(n);
    fin;
fin;
define-nueva-instruccion busca como
inicio
   mientras orientado-al-oeste hacer
   inicio
      mientras frente-libre y no junto-a-zumbador hacer
         avanza;
      si junto-a-zumbador entonces
      inicio
         come(0);
         sal-de-instruccion;
      fin
      sino
      inicio
         si izquierda-libre entonces
         regresa
         sino
           apagate;
     fin;
fin;
fin;
inicia-ejecucion
  mientras no-orientado-al-este hacer
     gira-izquierda;
  repetir 2 veces
  inicio
     repetir 50 veces
        si frente-libre entonces
            avanza;
     gira(1);
  fin;

  busca;
  apagate;
  termina-ejecucion
finalizar-programa
