iniciar-programa
define-nueva-instruccion toca-pared como inicio
    mientras frente-libre hacer inicio
        avanza;
    fin;
fin;
define-nueva-instruccion gira(n) como inicio
    repetir n veces inicio
        gira-izquierda;
    fin;
fin;
define-nueva-instruccion esquina como inicio
    mientras no-orientado-al-sur hacer inicio
        gira-izquierda;
    fin;
    toca-pared;
    gira(3);
    toca-pared;
    gira(2);
fin;
define-nueva-instruccion busca(x) como inicio
    repetir x veces inicio
        si frente-libre entonces inicio
            avanza;
        fin
        sino inicio
            gira-izquierda;
            avanza;
        fin;
        mientras no-junto-a-zumbador hacer inicio
            si frente-libre entonces inicio
                avanza;
            fin
            sino inicio
                gira-izquierda;
            fin;
        fin;
    fin;
fin;
define-nueva-instruccion recoger(q) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        recoger(sucede(q));
    fin
    sino inicio
        busca(q);
    fin;
fin;
define-nueva-instruccion solucion(a) como inicio
    esquina;
    repetir a veces inicio
        recoger(0);
    fin;
fin;
define-nueva-instruccion cuenta-todo(x) como inicio
    si no-orientado-al-sur o frente-libre entonces inicio
        si junto-a-zumbador entonces inicio
            si frente-libre entonces inicio
                avanza;
            fin
            sino inicio
                gira-izquierda;
                avanza;
            fin;
            cuenta-todo(sucede(x));
        fin
        sino inicio
            si frente-libre entonces inicio
                avanza;
            fin
            sino inicio
                gira-izquierda;
            fin;
            cuenta-todo(x);
        fin;
    fin;
    si orientado-al-sur y frente-bloqueado entonces inicio
        solucion(x);
    fin;
fin;
define-nueva-instruccion contar como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        contar;
        deja-zumbador;
    fin
    sino inicio
        esquina;
    fin;
fin;
    inicia-ejecucion
        esquina;
        avanza;
        cuenta-todo(0);
        contar;
        apagate;
    termina-ejecucion
finalizar-programa