iniciar-programa
define-nueva-instruccion gira(k) como
repetir k veces gira-izquierda;
define-nueva-instruccion rest(p) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        rest(sucede(p));
    fin sino inicio
    repetir p veces deja-zumbador;
        avanza;
        repetir p veces coge-zumbador;
        gira(2);
        mientras junto-a-zumbador hacer inicio
            coge-zumbador;
            repetir 2 veces avanza;
            gira(1);
            avanza;
            deja-zumbador;
            gira(2);
            avanza;
            gira(3);
            avanza;
            deja-zumbador;
            avanza;
            gira(2);
        fin;
    fin;
fin;
define-nueva-instruccion multiplica(n) como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    multiplica(n);
    repetir n veces deja-zumbador;
    fin;
fin;
define-nueva-instruccion fac(n) como inicio
    si junto-a-zumbador entonces inicio
       coge-zumbador;
       fac(sucede(n));
    fin sino inicio
        avanza;
        gira(1);
        deja-zumbador;
        avanza;
    fin;
     si junto-a-zumbador entonces inicio
           gira(2);
           coge-zumbador;
            avanza;
            multiplica(n);
            gira(2);
            avanza;
        fin;
fin;
    inicia-ejecucion
    avanza;
    rest(0);
    avanza;
    fac(0);
        apagate;                           
    termina-ejecucion
finalizar-programa
