iniciar-programa
define-nueva-instruccion g(h) como inicio
    repetir h veces gira-izquierda;
fin;
define-nueva-instruccion p(a) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        p(sucede(a));
    fin
    sino inicio
        repetir a veces deja-zumbador;
        avanza;
        repetir a veces deja-zumbador;
    fin;
fin;
define-nueva-instruccion postes(b) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        postes(sucede(b));
    fin
    sino inicio

        deja-zumbador;
        repetir b veces avanza;
        si junto-a-zumbador entonces inicio
           sal-de-instruccion;
        fin
        sino inicio
            si derecha-libre entonces inicio
                g(3);
            fin
            sino inicio

            fin;
            postes(b);
        fin;
    fin;
fin;
define-nueva-instruccion perimetro(c) como inicio
    si no junto-a-zumbador entonces inicio
        si derecha-bloqueada entonces inicio
           avanza;
           perimetro(sucede(c));
        fin
        sino inicio
            g(3);
            avanza;
            perimetro(c);
        fin;
    fin
    sino inicio
        g(2);
        coge-zumbador;
        mientras frente-libre hacer avanza;
        g(1);
        repetir 2 veces avanza;
        repetir c veces deja-zumbador;
        repetir 5 veces deja-zumbador;
        g(2);
        repetir 2 veces avanza;
        g(3);


    fin;
fin;
define-nueva-instruccion cuenta1(f) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        si derecha-libre entonces inicio
            g(3);
            mientras no junto-a-zumbador y frente-libre hacer avanza;
        fin
        sino inicio
            mientras no junto-a-zumbador y frente-libre hacer avanza;
        fin;
        cuenta1(sucede(f));
    fin
    sino inicio
        mientras no orientado-al-sur hacer gira-izquierda;
        mientras frente-libre hacer avanza;
        g(1);
        avanza;
        repetir f veces deja-zumbador;
        g(2);
        avanza;
        g(3);
    fin;
fin;

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

    inicia-ejecucion
    mientras no orientado-al-este hacer gira-izquierda;
    avanza;
    g(1);
    p(0);
    postes(0);
    g(3);
    avanza;
    mientras no junto-a-zumbador hacer avanza;
    cuenta1(0);
    mientras derecha-libre hacer avanza;
    deja-zumbador;
    avanza;
    perimetro(0);
    g(3);
    avanza;
    resta(0);


        apagate;
    termina-ejecucion
finalizar-programa
