iniciar-programa
define-nueva-instruccion gira(n) como
inicio
   repetir n veces
      gira-izquierda;
fin;
define-nueva-instruccion acaba como
inicio
   si no-junto-a-zumbador entonces
   inicio
      avanza;
      acaba;
      deja-zumbador;
   fin
   sino
   inicio
      mientras frente-libre hacer
         avanza;
      mientras junto-a-zumbador hacer
         coge-zumbador;
   fin;
fin;
define-nueva-instruccion abajo(n) como
inicio
   deja-zumbador;
   repetir precede(n) veces
       si frente-libre entonces
       inicio
         avanza;
       fin
       sino
       inicio
          gira(3);
          mientras junto-a-zumbador hacer
             coge-zumbador;
          acaba;
          deja-zumbador;
          apagate;
       fin;
       gira(1);
       si frente-libre entonces
          avanza
       sino
       inicio
          gira(3);
          mientras frente-libre hacer
             avanza;
          gira(3);
          mientras junto-a-zumbador hacer
             coge-zumbador;
          acaba;
          deja-zumbador;
          apagate;
       fin;
       gira(3);
       abajo(sucede(n));
     (*fin
     sino
     inicio
        gira(3);
        acaba;
          deja-zumbador;
     fin;*)
fin;
define-nueva-instruccion arriba(n) como
inicio
   si no si-es-cero(n) entonces
   inicio
      deja-zumbador;
      repetir precede(n) veces
         si frente-libre entonces
         inicio
            avanza;
            deja-zumbador;
         fin
         sino
         inicio
            gira(3);
            si frente-libre entonces
            inicio
               avanza;
               gira(3);
               abajo(1);
            fin
            sino
            inicio
               mientras no orientado-al-sur hacer
                  gira(1);
               mientras frente-libre hacer
                  avanza;
               mientras junto-a-zumbador hacer
                 coge-zumbador;
               gira(3);
               si frente-libre entonces
                   acaba;
               deja-zumbador;
               apagate;
            fin;
         fin;
      gira(3);
      si frente-libre entonces
         avanza
      sino
      inicio
         gira(3);
         mientras frente-libre hacer
            avanza;
         gira(3);
         mientras junto-a-zumbador hacer
             coge-zumbador;
         acaba;
         deja-zumbador;
         apagate;
      fin;
      gira(1);
      si frente-libre entonces
      arriba(precede(n))
      sino
      inicio
      gira(2);
      abajo(1);
   fin;
   fin
   sino
   inicio
      gira(2);
      abajo(1);
   fin;
fin;
define-nueva-instruccion come(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      come(sucede(n));
   fin
   sino
      arriba(n);
fin;
inicia-ejecucion
  mientras no-orientado-al-sur hacer
     gira-izquierda;
  si frente-libre entonces
  inicio
     mientras frente-libre hacer
        avanza;
     deja-zumbador;
     si izquierda-bloqueada entonces
     inicio
        gira(3);
        mientras frente-libre hacer
           avanza;
        mientras junto-a-zumbador hacer
           coge-zumbador;
        deja-zumbador;
        apagate;
     fin;
     gira(2);
     avanza;
     mientras no-junto-a-zumbador hacer
        avanza;
  fin;
  mientras no-orientado-al-norte hacer
     gira-izquierda;

  come(0);
  apagate;
  termina-ejecucion
finalizar-programa
