iniciar-programa
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 coge como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                coge;
                deja-zumbador;
            fin sino
                inicio
                    sur;
                    avanza;
                fin;
    fin;
define-nueva-instruccion resuelve(n) como
    inicio
        si no si-es-cero (n) entonces
            inicio
                si junto-a-zumbador entonces
                    inicio
                        coge-zumbador;
                        resuelve(precede(n));
                        si orientado-al-sur entonces deja-zumbador;
                    fin sino
                        inicio
                            sur;
                            avanza;
                        fin;
            fin sino
                inicio
                    si junto-a-zumbador entonces
                        inicio
                            coge-zumbador;
                            si junto-a-zumbador entonces
                                inicio
                                    mientras junto-a-zumbador hacer
                                        inicio
                                            coge-zumbador;
                                            avanza;
                                            deja-zumbador;
                                            norte;
                                            avanza;
                                            sur;
                                        fin;
                                        norte;
                                        avanza;
                                        oeste;
                                        avanza;
                                        deja-zumbador;
                                fin sino
                                    inicio
                                        norte;
                                        avanza;
                                        oeste;
                                        avanza;
                                        deja-zumbador;
                                    fin;

                        fin sino
                            inicio
                                sur;
                                avanza;
                            fin;
                fin;
    fin;
define-nueva-instruccion suma(n) como
    inicio
       si junto-a-zumbador entonces
           inicio
               coge;
           fin sino
               inicio
                   sur;
                   avanza;
               fin;
          resuelve(precede(n));
    fin;
define-nueva-instruccion base(n) como
    inicio
       si junto-a-zumbador entonces
           inicio
               coge-zumbador;
               base(sucede(n));
           fin sino
               inicio
                   sur;
                   avanza;
                   este;
                   repetir 11 veces avanza;
                   oeste;
                   mientras no orientado-al-este hacer
                       inicio
                           si orientado-al-sur entonces
                               inicio
                                   norte;
                                   repetir 2 veces avanza;
                                   oeste;
                                   si frente-libre entonces
                                       inicio
                                           avanza;
                                       fin sino apagate;
                               fin;
                           suma(n);
                       fin;
               fin;
    fin;
define-nueva-instruccion junta como
    inicio
       si junto-a-zumbador entonces
           inicio
               coge;
               norte;
               avanza;
               oeste;
               si frente-libre entonces avanza;
           fin sino avanza;
    fin;
    inicia-ejecucion
        repetir 2 veces avanza;
        este;
        repetir 11 veces avanza;
        oeste;
        mientras frente-libre hacer junta;
        norte;
        mientras no-junto-a-zumbador hacer avanza;
        base(0);
        apagate;
    termina-ejecucion
finalizar-programa
