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 derecha como repetir 3 veces gira-izquierda;
define-nueva-instruccion JuntaTodo como
    inicio
       mientras frente-libre hacer
           inicio
               si no-junto-a-zumbador entonces avanza;
               si junto-a-zumbador entonces
                   inicio
                       coge-zumbador;
                   fin;
               si frente-bloqueado entonces
                   inicio
                      oeste;
                      mientras frente-libre hacer avanza;
                      norte;
                      si frente-libre entonces
                          inicio
                              avanza;
                              este;
                          fin sino
                              inicio
                                  sur;
                                  mientras frente-libre hacer avanza;
                              fin;
                   fin;
           fin;
    fin;
define-nueva-instruccion FormarPiramide(n) como
    inicio
       repetir n veces
           inicio
               deja-zumbador;
               si frente-libre entonces
                   inicio
                       si algun-zumbador-en-la-mochila entonces
                           inicio
                               avanza;
                           fin sino apagate;
                   fin;
           fin;
           oeste;
           si no-junto-a-zumbador entonces avanza;
           mientras junto-a-zumbador y frente-libre hacer avanza;
           si izquierda-libre  entonces
               inicio
                   este;
                   avanza;
               fin;
           este;
           avanza;
           norte;
           avanza;
           este;
           FormarPiramide(precede(precede(n)));
    fin;
define-nueva-instruccion base(n) como
    inicio
       mientras algun-zumbador-en-la-mochila hacer
           inicio
               repetir n veces deja-zumbador;
               si algun-zumbador-en-la-mochila entonces
                   inicio
                       si frente-libre entonces avanza;
                       base(sucede(sucede(n)));
                   fin;
           fin;
           si ningun-zumbador-en-la-mochila entonces
               inicio
                   oeste;
                   mientras junto-a-zumbador  hacer
                       inicio
                          mientras junto-a-zumbador hacer coge-zumbador;
                          si frente-libre entonces
                              inicio
                                  avanza;
                              fin sino
                                  inicio
                                      este;
                                      FormarPiramide(n);
                                  fin;

                        fin;
                   fin;
    fin;
    inicia-ejecucion
        este;
        JuntaTodo;
        este;
        base(1);
        apagate;
    termina-ejecucion
finalizar-programa
