iniciar-programa
    define-nueva-instruccion media-vuelta como
        repetir 2 veces
            gira-izquierda;
    define-nueva-instruccion gira-derecha como
        repetir 3 veces
            gira-izquierda;
    define-nueva-instruccion regresa como inicio
        media-vuelta;
        avanza;
        media-vuelta;
    fin;
    define-nueva-instruccion paso(x) como
        repetir 3 veces inicio
            si frente-libre y (no-orientado-al-este o izquierda-libre) entonces inicio
                avanza;
                si no-junto-a-zumbador y  no si-es-cero(x)  entonces inicio
                    gira-derecha;
                    si orientado-al-norte entonces inicio
                        repetir 2 veces
                            deja-zumbador;
                        paso(precede(x));
                        si frente-libre entonces inicio
                            avanza;
                            media-vuelta;
                        fin
                        sino
                            si orientado-al-sur y frente-bloqueado entonces inicio
                                si derecha-libre entonces inicio
                                    gira-derecha;
                                    avanza;
                                    gira-izquierda;
                                    deja-zumbador;
                                fin
                                sino
                                    apagate;
                            fin;
                    fin
                    sino
                        si orientado-al-este entonces inicio
                            repetir 2 veces
                                deja-zumbador;
                            paso(precede(x));
                            si frente-libre entonces inicio

                                avanza;
                                media-vuelta;
                            fin
                            sino
                                si orientado-al-sur y frente-bloqueado entonces inicio
                                    deja-zumbador;
                                    si derecha-libre entonces inicio
                                        gira-derecha;
                                        avanza;
                                        gira-izquierda;
                                        deja-zumbador;
                                    fin
                                    sino
                                        apagate;
                                fin;
                        fin
                        sino
                            si orientado-al-oeste entonces inicio
                                repetir 2 veces
                                    deja-zumbador;
                                paso(precede(x));
                                si frente-libre entonces inicio

                                    avanza;
                                    media-vuelta;
                                fin
                                sino
                                    si orientado-al-sur y frente-bloqueado entonces inicio

                                        deja-zumbador;
                                        deja-zumbador;
                                        si derecha-libre entonces inicio
                                            gira-derecha;
                                            avanza;
                                            gira-izquierda;
                                            deja-zumbador;
                                        fin
                                        sino
                                            apagate;
                                    fin;
                            fin
                            sino
                                si orientado-al-sur entonces inicio
                                    repetir 2 veces
                                        deja-zumbador;
                                    paso(precede(x));
                                    si frente-libre entonces inicio
                                        avanza;
                                        media-vuelta;
                                    fin
                                    sino
                                        si orientado-al-sur y frente-bloqueado entonces inicio
                                            deja-zumbador;
                                            deja-zumbador;
                                            si derecha-libre entonces inicio
                                                gira-derecha;
                                                avanza;
                                                gira-izquierda;
                                                deja-zumbador;
                                            fin
                                            sino
                                                apagate;
                                        fin;
                                fin;
                fin
                sino
                    regresa;
            fin
            sino
                si orientado-al-norte o (orientado-al-este y izquierda-bloqueada) entonces
                    si no-orientado-al-sur entonces inicio
                        mientras no-orientado-al-sur hacer
                            gira-izquierda;
                        mientras frente-libre hacer
                            avanza;
                        gira-derecha;
                        mientras frente-libre hacer             
                            avanza;
                        media-vuelta;
                        mientras frente-libre hacer inicio
                            si junto-a-zumbador entonces
                                repetir 2 veces
                                    coge-zumbador;
                            avanza;
                        fin;
                        media-vuelta;
                        si junto-a-zumbador entonces
                            repetir 2 veces
                                coge-zumbador;
                        repetir x veces
                            si frente-libre entonces inicio
                                avanza;
                            fin;

                        gira-izquierda;
                        deja-zumbador;

                    fin;
            si junto-a-zumbador entonces inicio
                coge-zumbador;
                si junto-a-zumbador entonces inicio
                    deja-zumbador;
                    gira-izquierda;
                fin
                sino
                    deja-zumbador;
            fin
            sino
                si no-junto-a-zumbador entonces
                    gira-izquierda;
        fin;
    define-nueva-instruccion cuenta(x) como
        si frente-libre entonces inicio
            avanza;
            cuenta(sucede(x));
        fin
        sino inicio
            media-vuelta;
            mientras no-junto-a-zumbador hacer
                avanza;
            media-vuelta;
            deja-zumbador;
            paso(x);
            apagate;
        fin;
    inicia-ejecucion
        deja-zumbador;
        gira-izquierda;
        mientras frente-libre hacer
            avanza;
        media-vuelta;
        cuenta(1);
        apagate;
    termina-ejecucion
finalizar-programa
