iniciar-programa
define-nueva-instruccion gira(n) como inicio
   repetir n veces
      gira-izquierda;
fin;
define-nueva-instruccion norte como inicio
   mientras no-orientado-al-norte hacer
      gira(1);
fin;
define-nueva-instruccion sur como inicio
   mientras no-orientado-al-sur hacer
      gira(1);
fin;
define-nueva-instruccion este como inicio
   mientras no-orientado-al-este hacer
      gira(1);
fin;
define-nueva-instruccion oeste como inicio
   mientras no-orientado-al-oeste hacer
      gira(1);
fin;
define-nueva-instruccion karelotitlan(n) como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      si frente-libre entonces inicio
         avanza;
      fin
      sino inicio
         si orientado-al-este entonces inicio
            sur;
            avanza;
            si izquierda-bloqueada entonces inicio
               oeste;
               mientras frente-libre hacer
                  avanza;
               este;
               karelotitlan(sucede(n));
            fin
            sino inicio
               oeste;
               mientras frente-libre hacer
                  avanza;
               sur;
               mientras frente-libre hacer
                  avanza;
               este;
               mientras junto-a-zumbador hacer
                  avanza;
               repetir sucede(n) veces
                  deja-zumbador;
               si frente-libre entonces inicio
                  oeste;
                  mientras frente-libre hacer
                     avanza;
                  norte;
                  mientras frente-libre hacer
                     avanza;
                  este;
                  karelotitlan(0);
               fin
               sino inicio
                  apagate;
               fin;
            fin;
         fin;
      fin;
      karelotitlan(sucede(n));
   fin
   sino inicio
      si frente-libre entonces inicio
         avanza;
         karelotitlan(n);
      fin
      sino inicio
         si orientado-al-este entonces inicio
            sur;
            si frente-libre entonces inicio
               avanza;
               si izquierda-bloqueada y frente-libre entonces inicio
                  oeste;
                  mientras frente-libre hacer
                     avanza;
                  este;
                  karelotitlan(n);
               fin
               sino inicio
                  oeste;
                  mientras frente-libre hacer
                     avanza;
                  sur;
                  mientras frente-libre hacer
                     avanza;
                  este;
                  mientras junto-a-zumbador hacer
                     avanza;
                  repetir n veces
                     deja-zumbador;
                  si frente-libre entonces inicio
                     oeste;
                     mientras frente-libre hacer
                        avanza;
                     norte;
                     mientras frente-libre hacer
                        avanza;
                     este;
                     karelotitlan(0);
                  fin
                  sino inicio
                     apagate;
                  fin;
               fin;
            fin;
         fin;
      fin;
   fin;
fin;
    inicia-ejecucion
       norte;
       mientras frente-libre hacer
          avanza;
       este;
       karelotitlan(0);
        apagate;
    termina-ejecucion
finalizar-programa