iniciar-programa
    define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
    define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
    define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
    define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;

    define-nueva-instruccion bloq como
    inicio
        sur;
        si frente-libre entonces avanza;
        oeste;
        avanza;
        mientras junto-a-zumbador y frente-libre  hacer avanza;
        este;
        si no-junto-a-zumbador entonces avanza;
    fin;

    define-nueva-instruccion res como
    inicio
        oeste;
        mientras frente-libre  hacer avanza;
        norte;
        avanza;
    fin;

    define-nueva-instruccion ornum2(n) como
    inicio
        si junto-a-zumbador entonces
        inicio
            si no si-es-cero(n) entonces
            inicio
                coge-zumbador;
                ornum2(precede(n));
                deja-zumbador;
            fin;
       fin sino
       inicio
           oeste;
           avanza;
       fin;
    fin;

    define-nueva-instruccion ornum1(n) como
    inicio
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            ornum1(sucede(n));
        fin sino
        inicio
            avanza;
            ornum2(n);
            si junto-a-zumbador entonces
            inicio
                repetir 2 veces gira-izquierda;
                avanza;
                repetir n veces deja-zumbador;
            fin sino repetir n veces deja-zumbador;
        fin;
    fin;

    define-nueva-instruccion suma(n) como
    inicio
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            si no-junto-a-zumbador entonces
            inicio
                avanza;
                oeste;
            fin;
            suma(sucede(n));
        fin sino
        inicio
            res;
            repetir n veces deja-zumbador;
            sur;
            avanza;
            este;
            repetir 20 veces si no-junto-a-zumbador entonces avanza;
            si junto-a-zumbador entonces
            inicio
                oeste;
                avanza;
                este;
            fin sino apagate;
            repetir n veces deja-zumbador;
            oeste;
         fin;
    fin;

    define-nueva-instruccion contar(x) como
    inicio
        si junto-a-zumbador y no-orientado-al-oeste entonces
        inicio
            avanza;
            contar(sucede(x));
        fin sino
        si si-es-cero(precede(x)) entonces apagate;
        si no si-es-cero(x) entonces
        inicio
            repetir precede(x) veces
            inicio
              bloq;
              mientras junto-a-zumbador hacer
              inicio
                 mientras no-orientado-al-oeste hacer ornum1(0);
                 este;
                 avanza;
              fin;
            fin;
            bloq;
            suma(0);
            contar(precede(x));
        fin;
    fin;

    inicia-ejecucion
        contar(0);
        apagate;
    termina-ejecucion
finalizar-programa
