iniciar-programa
define-nueva-instruccion checar(z) como
inicio
        si junto-a-zumbador entonces
        inicio
                coge-zumbador;
                checar(precede(z));
                deja-zumbador;
        fin
        sino
        inicio
                si no si-es-cero(z) entonces
                inicio
                      deja-zumbador;
                fin;

        fin;
fin;
define-nueva-instruccion expande como
inicio
        repetir 4 veces
        inicio
                gira-izquierda;
                si frente-libre entonces
                inicio
                        avanza;
                        checar(9);

                        si izquierda-libre entonces
                        inicio
                            gira-izquierda;
                            avanza;
                            checar(9);
                            repetir 2 veces
                                gira-izquierda;
                                avanza;
                            gira-izquierda;
                        fin;
                        repetir 2 veces
                            gira-izquierda;
                            avanza;
                        repetir 2 veces
                            gira-izquierda;

                fin;


        fin;
fin;
define-nueva-instruccion checa(x) como
inicio
        si junto-a-zumbador entonces
        inicio
                coge-zumbador;
                checa(precede(x));
                deja-zumbador;
        fin
        sino
        inicio
                si si-es-cero(x) entonces
                inicio
                    expande;
                fin;

        fin;
fin;
    inicia-ejecucion
        mientras no-orientado-al-oeste hacer
        inicio
                gira-izquierda;
        fin;
        mientras frente-libre hacer
            avanza;
       gira-izquierda;
       mientras frente-libre hacer avanzA;
       repetir 2 veces
           gira-izquierda;
       mientras derecha-libre hacer
       inicio
                MIENTRAS frente-libre hacer
                inicio
                    checa(9);
                    avanzA;

                fin;
                checa(9);
                repetir 3 veces
                gira-izquierda;
                avanza;
                repetir 3 veces
                    gira-izquierda;
                mientras frente-libre hacer avanza;
                repetir 2 veces
                gira-izquierda;
       fin;
        MIENTRAS frente-libre hacer
                inicio
                    checa(9);
                    avanzA;

                fin;
                checa(9);
        apagate;
    termina-ejecucion
finalizar-programa
