iniciar-programa
    define-prototipo-instruccion cuenta(p);

    define-nueva-instruccion fufurufu(l) como
    inicio
        si no si-es-cero(l) entonces
        inicio
            si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                fufurufu(precede(l));
                deja-zumbador;
            fin
            sino
            inicio
               mientras no-orientado-al-este hacer gira-izquierda;
            fin;
        fin
        sino
        inicio
            mientras no-orientado-al-oeste hacer gira-izquierda;
        fin;

    fin;

    define-nueva-instruccion busk(j) como
    inicio
    repetir 4 veces
    inicio
    si no-junto-a-zumbador entonces
    inicio

        si orientado-al-norte entonces
        inicio
                    si frente-bloqueado entonces
                    inicio
                    gira-izquierda;
                    busk(j);
                    fin
                    sino
                    inicio
                    avanza;
                    fufurufu(j);
                    si orientado-al-oeste entonces
                    inicio
                        repetir 3 veces gira-izquierda;
                        repetir 2 veces gira-izquierda;
                        avanza;
                        repetir 2 veces gira-izquierda;
                        gira-izquierda;

                    fin
                    sino
                    inicio
                        gira-izquierda;
                        repetir 2 veces gira-izquierda;
                        avanza;
                        repetir j veces deja-zumbador;
                        repetir 2 veces gira-izquierda;
                        avanza;
                        mientras frente-bloqueado hacer gira-izquierda;
                        si no-junto-a-zumbador entonces apagate;
                        cuenta(0);
                    fin;
                    fin;
        fin
        sino
        inicio
            si orientado-al-sur entonces
            inicio
                  si frente-bloqueado entonces
                    inicio
                    gira-izquierda;
                    busk(j);
                    fin
                    sino
                    inicio
                    avanza;
                    fufurufu(j);
                    si orientado-al-oeste entonces
                    inicio
                        repetir 1 veces gira-izquierda;
                        repetir 2 veces gira-izquierda;
                        avanza;
                        repetir 2 veces gira-izquierda;
                        gira-izquierda;

                    fin
                    sino
                    inicio
                        repetir 3 veces gira-izquierda;

                        repetir 2 veces gira-izquierda;
                        avanza;
                        repetir j veces deja-zumbador;
                        repetir 2 veces gira-izquierda;
                        avanza;
                        mientras frente-bloqueado hacer gira-izquierda;
                        si no-junto-a-zumbador entonces apagate;
                        cuenta(0);
                    fin;
                    fin;
            fin
            sino
            inicio
                si orientado-al-este entonces
                inicio
                    si frente-bloqueado entonces
                    inicio
                    gira-izquierda;
                    busk(j);
                    fin
                    sino
                    inicio
                    avanza;
                    fufurufu(j);
                    si orientado-al-oeste entonces
                    inicio
                        repetir 2 veces gira-izquierda;
                        repetir 2 veces gira-izquierda;
                        avanza;
                        repetir 2 veces gira-izquierda;
                        gira-izquierda;

                    fin
                    sino
                    inicio

                        repetir 2 veces gira-izquierda;
                        avanza;
                        repetir j veces deja-zumbador;
                        repetir 2 veces gira-izquierda;
                        avanza;
                        mientras frente-bloqueado hacer gira-izquierda;
                        si no-junto-a-zumbador entonces apagate;
                        cuenta(0);
                    fin;
                    fin;
                fin

                sino
                inicio
                      si frente-bloqueado entonces
                    inicio
                    gira-izquierda;
                    busk(j);
                    fin
                    sino
                    inicio
                    avanza;
                    fufurufu(j);
                    si orientado-al-oeste entonces
                    inicio

                        repetir 2 veces gira-izquierda;
                        avanza;
                        repetir 2 veces gira-izquierda;
                        gira-izquierda;

                    fin
                    sino
                    inicio
                        repetir 2 veces gira-izquierda;

                        repetir 2 veces gira-izquierda;
                        avanza;
                        repetir j veces deja-zumbador;
                        repetir 2 veces gira-izquierda;
                        avanza;
                        mientras frente-bloqueado hacer gira-izquierda;
                          si no-junto-a-zumbador entonces apagate;
                        cuenta(0);
                    fin;
                    fin;
                fin;
            fin;






        fin;
     fin;
     fin;
     apagate;
    fin;
    define-nueva-instruccion cuenta(p) como
    inicio
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            cuenta(sucede(p));
        fin
        sino
        inicio
            busk(p);
        fin;
    fin;

    inicia-ejecucion

        cuenta(0);
        apagate;
    termina-ejecucion
finalizar-programa
