iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion orientate como
    inicio
        sur;
        mientras frente-libre hacer avanza;
        oeste;
        mientras frente-libre hacer avanza;
        norte;
    fin;
define-nueva-instruccion contar(n) como
    inicio
        si  frente-libre y no-orientado-al-oeste entonces
            inicio
                si no junto-a-zumbador entonces
                    inicio
                        avanza;
                        contar(0);
                    fin;
            fin;
        si junto-a-zumbador y no-orientado-al-oeste entonces
            inicio
                coge-zumbador;
                si no-junto-a-zumbador y no-orientado-al-oeste entonces
                    inicio
                        contar(sucede(n));
                    fin sino
                        inicio
                            coge-zumbador;
                            si no-junto-a-zumbador entonces
                                inicio
                                    contar(sucede(sucede(n)));
                                fin sino
                                    inicio
                                        coge-zumbador;
                                        contar(sucede(sucede(sucede(n))));
                                    fin;
                        fin;
            fin;
        si frente-bloqueado y no-orientado-al-oeste entonces
            inicio
                sur;
                mientras frente-libre hacer avanza;
                este;
                si frente-libre entonces
                    inicio
                        avanza;
                        norte;
                        contar(0);
                    fin sino
                        inicio
                            oeste;
                            mientras frente-libre hacer avanza;
                        fin;
            fin;
        si si-es-cero(precede(precede(precede(n)))) entonces
            inicio

                        norte;
                        mientras junto-a-zumbador hacer avanza;
                        si no-junto-a-zumbador entonces deja-zumbador;
                        sur;
                        mientras frente-libre hacer avanzA;
                        este;
                        avanza;
                        norte;
                        mientras junto-a-zumbador hacer avanza;
                        si no-junto-a-zumbador entonces repetir 2 veces deja-zumbador;
                        sur;
                        mientras frente-libre hacer avanza;
                        oeste;
                        mientras frente-libre hacer avanza;
            fin;
         si si-es-cero (precede(precede(n))) entonces
             inicio
                     este;
                     avanza;

                     norte;
                     mientras junto-a-zumbador hacer avanza;
                     si no-junto-a-zumbador entonces repetir 2 veces deja-zumbador;
                     sur;
                     mientras frente-libre hacer avanza;
                     oeste;
                     mientras frente-libre hacer avanza;

             fin;
             si si-es-cero (precede(n)) entonces
                 inicio
                             norte;
                             mientras junto-a-zumbador hacer avanza;
                             deja-zumbador;
                             sur;
                             mientras frente-libre hacer avanza;
                             oeste;
                 fin;
         si si-es-cero (n) entonces oeste;
    fin;
    inicia-ejecucion
        orientate;
        contar(0);
        apagate;
    termina-ejecucion
finalizar-programa
