iniciar-programa
define-nueva-instruccion m como repetir 2 veces gira-izquierda;
define-nueva-instruccion d como repetir 3 veces gira-izquierda;
define-nueva-instruccion ubicate como
inicio
    mientras no-orientado-al-norte hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    repetir 3 veces gira-izquierda;
    avanza;
    gira-izquierda;
    avanza;
    gira-izquierda;
    avanza;
    d;
    mientras junto-a-zumbador hacer avanza;
    m;
    avanza;
fin;
define-nueva-instruccion multiplicar(num) como
inicio
    si junto-a-zumbador entonces
    inicio
        si junto-a-zumbador entonces coge-zumbador;
        multiplicar(num);
        repetir num veces deja-zumbador;
    fin
    sino
    inicio
        gira-izquierda;
        avanza;
        d;
        avanza;
        d;
        avanza;
    fin;
fin;
define-nueva-instruccion cuenta(num) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        cuenta(sucede(num));
    fin
    sino
    inicio
        avanza;
        multiplicar(num);
    fin;
fin;
define-nueva-instruccion ubicate2 como
inicio
    gira-izquierda;
    avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
    gira-izquierda;
    repetir 2 veces avanza;
    gira-izquierda;
    mientras no-junto-a-zumbador hacer avanza;
    m;
    mientras junto-a-zumbador hacer coge-zumbador;
    mientras frente-libre hacer avanza;
    m;
    mientras algun-zumbador-en-la-mochila hacer
    inicio
        deja-zumbador;
        avanza;
    fin;
    m;
    mientras frente-libre hacer avanza;
    gira-izquierda;
    avanza;
    gira-izquierda;
    mientras frente-libre hacer avanza;
    mientras junto-a-zumbador hacer coge-zumbador;
    m;
    mientras frente-libre hacer avanza;
    d;
    avanza;
    d;
fin;
define-nueva-instruccion divide como
inicio
mientras algun-zumbador-en-la-mochila hacer
        inicio
            mientras junto-a-zumbador hacer
            inicio
               si algun-zumbador-en-la-mochila entonces deja-zumbador
               sino
               inicio
                   m;
                   avanza;
                   mientras frente-libre hacer
                   inicio
                       coge-zumbador;
                       avanza;
                   fin;
                   coge-zumbador;
                   gira-izquierda;
                   avanza;
                   gira-izquierda;
                   mientras frente-libre hacer avanza;
                   m;
                   avanza;
                   mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                   mientras frente-libre hacer avanza;
                   d;
                   avanza;
                   d;
                   mientras junto-a-zumbador hacer avanza;
                   m;
                   avanza;
                   mientras junto-a-zumbador hacer coge-zumbador;
                   deja-zumbador;
                   mientras frente-libre hacer avanza;
                   gira-izquierda;
                   avanza;
                   gira-izquierda;
                   mientras frente-libre hacer avanza;
                   d;
                   avanza;
                   gira-izquierda;
                   avanza;
                   gira-izquierda;
                   avanza;
                   mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                   apagate;
               fin;
               avanza;
            fin;
            si no-junto-a-zumbador entonces
            inicio
                repetir 2 veces gira-izquierda;
                mientras frente-libre hacer avanza;
                repetir 2 veces gira-izquierda;
            fin;
        fin;
fin;
    inicia-ejecucion
    ubicate;
    si frente-libre entonces cuenta(0)
    sino
    inicio
        gira-izquierda;
        avanza;
        d;
        avanza;
        d;
        avanza;
    fin;
    ubicate2;
    divide;
    mientras junto-a-zumbador hacer coge-zumbador;
    deja-zumbador;
    mientras no-orientado-al-este hacer gira-izquierda;
    avanza;
    gira-izquierda;
    mientras frente-libre hacer avanza;
    d;
    avanza;
    gira-izquierda;
    avanza;
    gira-izquierda;
    avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
        apagate;
    termina-ejecucion
finalizar-programa
