iniciar-programa
    define-nueva-instruccion g(h) como
    inicio
        repetir h veces
        gira-izquierda;
    fin;
    define-nueva-instruccion cosa(b) como
    inicio
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            cosa(sucede(b));
            fin
            sino
                inicio
                   si no si-es-cero(precede(b)) entonces
                   inicio
                   repetir precede(b) veces
                   deja-zumbador;
                   avanza;
                   repetir b veces
                   deja-zumbador;
                   g(2);
                   avanza;
                   g(2);
                fin
                sino
                inicio
                avanza;
                deja-zumbador;
                g(2);
                avanza;
                g(2);
                fin;
        fin;
    fin;
    define-nueva-instruccion begin como
    inicio
        avanza;
        avanza;
        g(3);
        si no-junto-a-zumbador entonces
        apagate;
        cosa(0);
    fin;
    define-nueva-instruccion por(k) como
    inicio
         si junto-a-zumbador entonces
             inicio
                 coge-zumbador;
                 avanza;
                 repetir k veces
                 deja-zumbador;
                 g(2);
                 avanza;
                 g(2);
             fin;
    fin;
    define-nueva-instruccion resultado(r) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                resultado(sucede(r));
            fin
        sino
            inicio
               g(2);
               avanza;
               avanza;
               repetir r veces
               deja-zumbador;
               avanza;
               g(2);
            fin;
    fin;
    define-nueva-instruccion multi(k) como
    inicio
         avanza;
         repetir precede(k) veces
         deja-zumbador;
         mientras junto-a-zumbador hacer
             por(k);
         g(2);
         avanza;
         mientras junto-a-zumbador hacer
         coge-zumbador;
         g(2);
         avanza;
         avanza;
         resultado(0);

    fin;
    define-nueva-instruccion resultado2(kr) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                resultado2(sucede(kr));
            fin
        sino
            inicio
               g(2);
               avanza;
               repetir kr veces
               deja-zumbador;
               avanza;
               g(2);
            fin;
    fin;
    define-nueva-instruccion factorial(k) como
    inicio
         si junto-a-zumbador entonces
             inicio
                coge-zumbador;
                factorial(sucede(k));
             fin
         sino
             inicio
                 si no si-es-cero(precede(k)) entonces
                 inicio
                 repetir k veces
                 deja-zumbador;
                 coge-zumbador;
                 avanza;
                 mientras junto-a-zumbador hacer
                 inicio
                            coge-zumbador;
                            avanza;
                            repetir k veces
                            deja-zumbador;
                            g(2);
                            avanza;
                            g(2);
                  fin;
                        avanza;
                        resultado2(0);
fin;
             fin;
            fin;
    define-nueva-instruccion div(n) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                div(sucede(n));
            fin
         sino
             inicio
                 avanza;
                 g(2);
                 si junto-a-zumbador entonces
                     inicio
                         mientras junto-a-zumbador hacer
                             inicio
                                 repetir n veces
                                 coge-zumbador;
                                 avanza;
                                 avanza;
                                 g(3);
                                 avanza;
                                 deja-zumbador;
                                 g(2);
                                 avanza;
                                 g(1);
                                 avanza;
                                 avanza;
                                 g(2);
                             fin;
                     avanza;
                     g(3);
                     avanza;
                     g(3);
                     apagate;
                     fin;
             fin;
    fin;
    define-nueva-instruccion final(a) como
    inicio
        si junto-a-zumbador entonces
            inicio
               coge-zumbador;
               final(sucede(a))
            fin
           sino
               inicio
               g(2);
               avanza;
               g(1);
               avanza;
               avanza;
               g(2);
               repetir a veces
               deja-zumbador;
               avanza;
               apagate;
               fin;
    fin;
    define-nueva-instruccion ver(v) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                ver(sucede(v));
            fin
        sino
            inicio
            avanza;
            repetir v veces
            coge-zumbador;
            si junto-a-zumbador entonces
                inicio
                repetir v veces
                deja-zumbador;
                g(2);
                avanza;
                repetir v veces
                deja-zumbador;
                g(2);
                avanza;
                g(3);
                fin
             sino
                 inicio
                     g(3);
                     avanza;
                     final(0);
                 fin;

    fin;
    fin;
    define-nueva-instruccion comprobar como
        inicio
            g(3);
            avanza;
            g(2);
            ver(0);
        fin;
    inicia-ejecucion
    begin;
    mientras junto-a-zumbador hacer
    inicio
    comprobar;
    factorial(0);
    fin;
    g(3);
    avanza;
    g(1);
    si no-junto-a-zumbador entonces
    apagate;
    cosa(0);
    mientras junto-a-zumbador hacer
    factorial(0);
    avanza;
    g(1);
    div(0);
        apagate;
    termina-ejecucion
finalizar-programa
