iniciar-programa
    define-nueva-instruccion g(h) como
    inicio
          repetir h veces
          gira-izquierda;
    fin;
    define-nueva-instruccion cosa(c) como
    inicio
          si izquierda-libre entonces
              inicio
                  g(1);
                  avanza;
                  g(3);
                  cosa(sucede(c));
              fin
          sino
              inicio
                  si frente-libre entonces
                      inicio
                          avanza;
                          g(3);
                          mientras frente-libre y izquierda-libre hacer avanza;
                          si frente-libre y izquierda-bloqueada entonces
                          mientras frente-libre y izquierda-bloqueada hacer
                          avanza;
                          si frente-libre y izquierda-libre entonces
                          inicio
                              g(2);
                              avanza;
                              g(3);
                          fin
                          sino
                          g(1);
                          cosa(sucede(c));
                      fin
                  sino
                      inicio
                          g(3);
                          mientras izquierda-bloqueada hacer
                          avanza;
                          repetir sucede(c) veces
                          deja-zumbador;
                      fin;
              fin;

    fin;
    define-nueva-instruccion begin como
    inicio
        mientras no-orientado-al-este hacer
        g(1);
        mientras no-junto-a-zumbador hacer
        avanza;
        repetir 250 veces
        coge-zumbador;
        g(2);
        avanza;
        avanza;
        g(3);
        avanza;
        avanza;
        g(3);
        avanza;
        g(1);
        mientras frente-libre hacer avanza;
        g(2);
    fin;
    define-nueva-instruccion ya(k) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                ya(sucede(k));
            fin
        sino
            inicio
                mientras frente-libre hacer avanza;
                g(3);
                mientras frente-libre hacer avanza;
                repetir k veces
                deja-zumbador;
                apagate;
            fin;
    fin;
    define-nueva-instruccion compara(n) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                compara(sucede(n));
            fin
        sino
            inicio
                repetir 3 veces avanza;
                repetir n veces
                    inicio
                        si junto-a-zumbador entonces
                        coge-zumbador;
                    fin;
                si junto-a-zumbador entonces
                    inicio
                        repetir n veces deja-zumbador;
                        ya(0);
                    fin
                 sino
                     inicio
                         mientras frente-libre hacer avanza;
                         g(3);
                         mientras frente-libre hacer avanza;
                         repetir n veces
                         deja-zumbador;
                         apagate;
                     fin;
            fin;

    fin;

    define-nueva-instruccion final como
    inicio
        g(1);
        compara(0);
    fin;
    define-nueva-instruccion medio como
    inicio
     g(3);
     repetir 3 veces avanza;
     g(3);
     avanza;
     g(1);
     mientras frente-libre hacer
     avanza;
     g(2);
    fin;
    inicia-ejecucion
    begin;
    cosa(0);
    medio;
    cosa(0);
    final;
        apagate;
    termina-ejecucion
finalizar-programa
