                iniciar-programa
define-nueva-instruccion gira(q) como repetir q veces gira-izquierda;
define-nueva-instruccion construccion como inicio
    mientras frente-libre hacer inicio
        mientras junto-a-zumbador y frente-libre hacer avanza;
        si junto-a-zumbador entonces inicio
                gira(2);
                sal-de-instruccion;
                fin sino inicio
                    gira(2);
                    si frente-libre entonces avanza;
                    gira(1);
                    mientras junto-a-zumbador y frente-libre hacer avanza;
                    si junto-a-zumbador entonces inicio
                       gira(3);
                       mientras frente-libre hacer avanza;
                       gira(3);
                       mientras frente-libre hacer avanza;
                       gira(3);
                       mientras junto-a-zumbador y frente-libre hacer avanza;
                       gira(2);
                       sal-de-instruccion;
                       fin sino inicio
                            gira(1);
                            si frente-libre entonces avanza;
                            gira(1);
                            mientras frente-libre hacer inicio
                               si no junto-a-zumbador entonces deja-zumbador;
                               si frente-libre entonces avanza;
                               si frente-bloqueado y no junto-a-zumbador entonces deja-zumbador;
                               fin;
                               gira(2);
                               mientras junto-a-zumbador y frente-libre hacer avanza;
                               si junto-a-zumbador entonces inicio
                                  gira(3);
                                  fin sino inicio
                                       gira(2);
                                       si frente-libre entonces avanza;
                                       gira(1);
                                       fin;
                                       mientras frente-libre hacer inicio
                                            si no junto-a-zumbador entonces deja-zumbador;
                                           si frente-libre entonces avanza;
                                           si frente-bloqueado y no junto-a-zumbador entonces deja-zumbador;
                                           fin;
                                           gira(3);
                                           mientras frente-libre hacer avanza;
                                           gira(3);
                            fin;
                    fin;
        fin;
    fin;
    define-nueva-instruccion impar(z) como inicio
        si frente-libre entonces inicio
            avanza;
            gira(1);
            repetir z veces avanza;
            mientras no orientado-al-norte hacer gira(1);
            repetir 4 veces inicio
                repetir z veces inicio
                    repetir 2 veces inicio
                            coge-zumbador;
                            si no junto-a-zumbador entonces inicio
                                deja-zumbador;
                                repetir z veces deja-zumbador;
                                si frente-libre entonces avanza;
                                fin;
                        FIN;
                    fin;
                    gira(3);
                fin;
                repetir z veces avanza;
                gira(1);
                impar(sucede(z));
            fin;
        fin;
        define-nueva-instruccion a(x) como inicio
        si junto-a-zumbador y frente-libre y orientado-al-sur entonces inicio
            si frente-libre Y JUNTO-A-ZUMBADOR entonces avanza;
            si frente-libre y junto-a-zumbador entonces inicio
                avanza;
                a(sucede(x));
                fin sino inicio
            si frente-bloqueado entonces inicio
                gira(2);
                    mientras junto-a-zumbador y frente-libre hacer avanza;
                    gira(2);
                    mientras no junto-a-zumbador y frente-libre hacer avanza;
                    gira(1);
                    mientras frente-libre y junto-a-zumbador hacer inicio
                        si junto-a-zumbador entonces coge-zumbador;
                        si frente-libre entonces avanza;
                        si no junto-a-zumbador entonces inicio
                                gira(2);
                                si frente-libre entonces avanza;
                                fin;
                                si junto-a-zumbador y frente-bloqueado entonces coge-zumbador;
                        fin;
                        mientras no orientado-al-sur hacer gira(1);
                        mientras frente-libre  hacer inicio
                            si junto-a-zumbador entonces coge-zumbador;
                            si frente-libre entonces avanza;
                            si frente-bloqueado y junto-a-zumbador entonces coge-zumbador;
                            fin;
                            gira(3);
                            mientras frente-libre hacer avanza;
                            gira(3);
                            a(x);
                    fin;
                    fin;
            fin sino inicio
            mientras no orientado-al-norte hacer gira(1);
            repetir x veces avanza;
                           gira(3);
                           repetir x veces avanza;
                           gira(2);
                           impar(1);

                fin;
        fin;
    inicia-ejecucion
    mientras no orientado-al-norte hacer gira(1);
    deja-zumbador;
    construccion;
    mientras no junto-a-zumbador y frente-libre hacer avanza;
    a(0);
        apagate;
    termina-ejecucion
finalizar-programa
