iniciar-programa
    define-nueva-instruccion gd como
    inicio
       repetir 3 veces
       gira-izquierda;
    fin;

    define-nueva-instruccion mv como
    inicio
       repetir 2 veces
       gira-izquierda;
    fin;

     define-nueva-instruccion cuenta2(x) como
     inicio
         si frente-libre entonces
         inicio
            avanza;
            cuenta2 (sucede(x));
         fin
         sino
         inicio
            mv;
            mientras frente-libre hacer
                avanza;
              gira-izquierda;
            mientras frente-libre hacer
               avanza;
               repetir 2 veces
            repetir x veces
              deja-zumbador;
              mv;
            avanza;
            repetir 2 veces
          repetir x veces
            deja-zumbador;
         fin;
     fin;

    define-nueva-instruccion cuenta3(x) como
     inicio
         si frente-libre entonces
         inicio
            avanza;
            cuenta3 (sucede(x));
         fin
         sino
         inicio
            mv;
            mientras frente-libre hacer
                avanza;
              mv;
              avanza;
              gd;
              mientras frente-libre hacer
                 avanza;
            repetir 3 veces
            repetir x veces
              deja-zumbador;
              mv;
            avanza;
            repetir 3 veces
          repetir x veces
            deja-zumbador;
         fin;
     fin;

     define-nueva-instruccion ultimax(c) como
     inicio
        si junto-a-zumbador entonces
       inicio
       coge-zumbador;
        ultimax(sucede(c))
        fin
        sino
        inicio
         mv;
         avanza;
         repetir c veces
         deja-zumbador;
        fin;
     fin;

    inicia-ejecucion
       mientras no orientado-al-este hacer
            gira-izquierda;
       mientras no-junto-a-zumbador hacer
            avanza;
       repetir 500 veces
            coge-zumbador;
       mv;
       avanza;
       avanza;
       gd;
       avanza;
       avanza;
       gd;
       cuenta2(0);
       repetir 4 veces
          avanza;
       gd;
       repetir 2 veces
          avanza;
        cuenta3(0);
       gira-izquierda;
       avanza;
       mv;
       mientras junto-a-zumbador hacer
       inicio
          inicio
          coge-zumbador;
          avanza;
          mv;
          fin;
       fin;
       si orientado-al-este entonces
       inicio
          gd;
          avanza;
          gira-izquierda;
         mientras junto-a-zumbador hacer
          coge-zumbador;
          avanza;
          ultimax(0);
       fin;
     apagate;
    termina-ejecucion
finalizar-programa
