iniciar-programa

    define-nueva-instruccion norte como
    inicio
        mientras no-orientado-al-norte hacer
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion sur como
    inicio
        mientras no-orientado-al-sur hacer
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion este como
    inicio
        mientras no-orientado-al-este hacer
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion oeste como
    inicio
        mientras no-orientado-al-oeste hacer
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion gira-derecha como
    inicio
        repetir 3 veces
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion gira-doble como
    inicio
        repetir 2 veces
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion camina como
    inicio
        mientras frente-libre hacer
        inicio
            avanza;
        fin;
    fin;

    define-nueva-instruccion cuenta(x) como
    inicio
        si (no(orientado-al-oeste y frente-bloqueado)) entonces
        inicio
           si orientado-al-este entonces
           inicio
              si frente-libre entonces
              inicio
                 avanza;
                 cuenta(sucede(x));
              fin
              sino
              inicio
                  oeste;
                  cuenta(x);
              fin;
           fin
           sino
           inicio
               si frente-libre entonces
               inicio
                   avanza;
                   cuenta(sucede(x));
               fin;
           fin;
        fin
        sino
        inicio
            repetir x veces
            inicio
                deja-zumbador;
            fin;
        fin;
    fin;

    define-nueva-instruccion multiplica(x) como
    inicio
        si junto-a-zumbador entonces
        inicio
           coge-zumbador;
           multiplica(sucede(x));
        fin
        sino
        inicio
            norte;
            avanza;
            avanza;
            mientras junto-a-zumbador hacer
            inicio
                coge-zumbador;
                sur;
                camina;
                repetir x veces
                inicio
                    deja-zumbador;
                fin;
                norte;
                avanza;
                avanza;
            fin;
        fin;
    fin;

    define-nueva-instruccion resta(x) como
    inicio
        si (no(si-es-cero(x))) entonces
        inicio
        si junto-a-zumbador entonces
        inicio
           repetir x veces
           inicio
               si junto-a-zumbador entonces
               inicio
                   coge-zumbador;
               fin;
           fin;
           norte;
           avanza;
           deja-zumbador;
           sur;
           avanza;
           norte;
           resta(precede(x));
        fin
        sino
        inicio
            resta(precede(x));
        fin;
        fin;
    fin;

    define-nueva-instruccion jinal(x) como
    inicio
        si junto-a-zumbador entonces
        inicio
           coge-zumbador;
           jinal(sucede(x));
        fin
        sino
        inicio
            sur;
            avanza;
            norte;
            mientras junto-a-zumbador hacer
            inicio
                resta(x);
            fin;
        fin;
    fin;

    define-nueva-instruccion pasar como
    inicio
        si junto-a-zumbador entonces
        inicio                 
            coge-zumbador;
            pasar;
            deja-zumbador;
        fin
        sino
        inicio
            sur;
            camina;
        fin;
    fin;

    inicia-ejecucion
        este;
        cuenta(0);
        multiplica(0);
        sur;
        camina;
        norte;
        avanza;
        sur;
        jinal(0);
        sur;
        camina;
        norte;
        avanza;
        pasar;
        apagate;
    termina-ejecucion
finalizar-programa
