iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
   repetir 3 veces
     gira-izquierda;
fin;
define-nueva-instruccion mira-norte como
inicio
   mientras no-orientado-al-norte hacer
     gira-izquierda;
fin;
define-nueva-instruccion mira-este como
inicio
   mientras no-orientado-al-este hacer
     gira-izquierda;
fin;
define-nueva-instruccion mira-sur como
inicio
   mientras no-orientado-al-sur hacer
     gira-izquierda;
fin;
define-nueva-instruccion mira-oeste como
inicio
   mientras no-orientado-al-oeste hacer
     gira-izquierda;
fin;
define-nueva-instruccion acomoda(m) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      acomoda(sucede(m));
      deja-zumbador;
   fin
   sino
   inicio
      mira-oeste;
      mientras frente-libre hacer
        avanza;
      gira-derecha;
      avanza;
      gira-derecha;
      repetir precede(m) veces
        avanza;
   fin;
fin;
define-nueva-instruccion paso-atras como
inicio
   repetir 2 veces
     gira-izquierda;
  avanza;
  repetir 2 veces
    gira-izquierda;
fin;
define-nueva-instruccion lleva(z) como
inicio
    si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       lleva(sucede(z));
       deja-zumbador;
    fin
    sino
    inicio

       repetir z veces
         deja-zumbador;
       avanza;
    fin;
fin;
define-nueva-instruccion resultado(m) como
inicio
   si junto-a-zumbador entonces
   inicio
       coge-zumbador;
       resultado(sucede(m));
   fin
   sino
   inicio
      repetir m veces
        deja-zumbador;
      mira-oeste;
      mientras frente-libre hacer
        avanza;
      mira-sur;
      mientras frente-libre hacer
        avanza;
      mira-este;
      repetir precede(m) veces
        avanza;
      si no-junto-a-zumbador entonces
      inicio
        repetir m veces
          deja-zumbador;
      fin;
      mira-oeste;
      mientras frente-libre hacer
        avanza;
      mira-norte;
      avanza;
      mira-este;
      mientras no-junto-a-zumbador hacer
        avanza;
   fin;
fin;
define-nueva-instruccion resta(m) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        resta(sucede(m));
    fin
    sino
    inicio
       mientras no-junto-a-zumbador y frente-libre hacer
       inicio
          avanza;

       fin;
       si junto-a-zumbador entonces
       inicio
        repetir m veces
           inicio
              coge-zumbador;
           fin;
           resultado(0);
           repetir m veces
             deja-zumbador;
        fin
        sino
          sal-de-instruccion;
    fin;
fin;
define-nueva-instruccion cuenta(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      avanza;
      cuenta(sucede(n));
   fin
   sino
   inicio
      mira-oeste;
      mientras frente-libre hacer
        avanza;
      mira-este;
      repetir n veces
      inicio
         acomoda(0);
         mira-oeste;
         mientras frente-libre hacer
           avanza;
         gira-izquierda;
         avanza;
         gira-izquierda;
         mientras no-junto-a-zumbador y frente-libre hacer
           avanza;
      fin;
      mira-oeste;
      mientras frente-libre hacer
        avanza;
      mira-norte;
      avanza;
      gira-derecha;
   fin;

       mientras  frente-libre hacer
       inicio
          mientras no-junto-a-zumbador y frente-libre hacer
             avanza;
          si junto-a-zumbador entonces
          resta(0);
       fin;

fin;
define-nueva-instruccion menor como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      menor;
      deja-zumbador;
   fin
   sino
   inicio
      mira-oeste;
      mientras frente-libre hacer
        avanza;
   fin;
fin;

    inicia-ejecucion
    mira-este;
    cuenta(0);
    mira-sur;
    mientras frente-libre hacer
      avanza;
    mira-oeste;
    mientras frente-libre hacer
      avanza;
    mira-este;
    mientras no-junto-a-zumbador y frente-libre hacer
    inicio
       avanza;
    fin;
    si no-junto-a-zumbador entonces
      apagate
    sino
    inicio
       menor;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
