iniciar-programa
define-prototipo-instruccion resultado(n);
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur 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 ir11 como
    inicio
       oeste;
       mientras frente-libre hacer avanzA;
       sur;
       mientras frente-libre hacer avanza;
       norte;
    fin;
define-nueva-instruccion compara(n) como
    inicio
        si orientado-al-sur entonces oeste;
        si no si-es-cero(n) entonces
            inicio
                si junto-a-zumbador entonces
                    inicio
                        coge-zumbador;
                        compara(precede(n));
                        si no-orientado-al-este entonces deja-zumbador;
                    fin sino
                        inicio
                            norte;
                            si derecha-bloqueada entonces
                                inicio
                                    oeste;
                                fin;
                        fin;
            fin sino
                inicio
                    si no-junto-a-zumbador entonces
                        inicio
                            este;
                            si frente-libre entonces avanza;
                            mientras no-junto-a-zumbador y frente-libre hacer avanza;
                        fin sino
                            inicio
                                norte;
                                si derecha-bloqueada entonces sur;
                            fin;
                fin;
         si frente-bloqueado y no-orientado-al-sur entonces oeste;
         si orientado-al-oeste entonces
             inicio
                 si junto-a-zumbador entonces mientras junto-a-zumbador hacer coge-zumbador;
                 mientras frente-libre hacer avanza;
                 deja-zumbador;
                 este;
                 avanza;
                 mientras no-junto-a-zumbador y frente-libre hacer avanza;
                 si no-junto-a-zumbador entonces apagate;
                 resultado(0);
             fin;

    fin;
define-nueva-instruccion resultado(n) como
    inicio
        si junto-a-zumbador entonces
            inicio
               coge-zumbador;
               norte;
               resultado(Sucede(n));
            fin sino
                inicio
                    mientras frente-libre hacer
                        inicio
                            si orientado-al-norte entonces
                                inicio
                                    este;
                                    si frente-libre entonces avanza;
                                    mientras no-junto-a-zumbador y frente-libre hacer avanza;
                                    si no-junto-a-zumbador  entonces
                                        inicio
                                            oeste;
                                            mientras frente-libre hacer avanza;
                                            este;
                                            deja-zumbador;
                                            avanza;
                                            mientras no-junto-a-zumbador y frente-libre hacer avanza;
                                            si frente-bloqueado y no-junto-a-zumbador entonces
                                                inicio
                                                    ir11;
                                                    apagate;
                                                fin;
                                            resultado(0);
                                        fin sino
                                            inicio
                                               compara(n);
                                            fin;
                                     si frente-bloqueado entonces
                                         inicio
                                             oeste;
                                             mientras frente-libre hacer avanza;
                                             deja-zumbador;
                                             este;
                                             avanza;
                                             mientras no-junto-a-zumbador y frente-libre hacer avanza;
                                             resultado(0);
                                         fin;
                                fin;
                            compara(n);
                        fin;
                fin;
    fin;
define-nueva-instruccion contar como
    inicio
        si junto-a-zumbador y frente-libre entonces
            inicio
                avanza;
                contar;
                resultado(0);
            fin sino
                inicio
                    oeste;
                    mientras frente-libre hacer avanza;
                    este;
                fin;
    fin;
define-nueva-instruccion zapatos como
    inicio
       norte;
       mientras junto-a-zumbador hacer
           inicio
               mientras junto-a-zumbador hacer coge-zumbador;
               si frente-libre entonces avanza;
           fin;
       sur;
       mientras frente-libre hacer avanza;
       mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
       este;
    fin;
    inicia-ejecucion
        ir11;
        este;
        zapatos;
        mientras frente-libre hacer
            inicio
                avanza;
                zapatos;
            fin;
        oeste;
        mientras frente-libre hacer avanza;
        este;
        si frente-bloqueado entonces
            inicio
                si junto-a-zumbador entonces mientras junto-a-zumbador hacer coge-zumbador;
                deja-zumbador;
                apagate;
            fin;
        contar;
        apagate;
    termina-ejecucion
finalizar-programa
