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

define-nueva-instruccion ir-3-12 como inicio
    repetir 2 veces avanza;
    este;
    repetir 11 veces avanza;
fin;

define-nueva-instruccion toma-y-baja como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        toma-y-baja;
        deja-zumbador;
    fin sino inicio
        avanza;
    fin;
fin;

define-nueva-instruccion amontonar como inicio
   ir-3-12;
   repetir 11 veces inicio
        sur;
        toma-y-baja;
        toma-y-baja;
        norte;
        avanza;
        avanza;
        oeste;
        avanza;
    fin;
fin;

define-nueva-instruccion ir-1-3 como inicio
    sur;
    mientras frente-libre hacer avanza;
    oeste;
    mientras frente-libre hacer avanza;
    norte;
    avanza;
    avanza;
    avanza;
fin;

define-nueva-instruccion ir-1-12 como inicio
    sur;
    mientras frente-libre hacer avanza;
    oeste;
    mientras frente-libre hacer avanza;
    este;
    repetir 11 veces avanza;
    oeste;
fin;

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

define-nueva-instruccion resta(N)como inicio
    repetir N veces coge-zumbador;
    bajalos;
fin;

define-nueva-instruccion baja como inicio
    sur;
    avanza;
fin;



define-nueva-instruccion suma(N) como inicio

   si no si-es-cero (N) entonces inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            suma(precede(N));
        fin sino inicio
            norte;
            avanza;
            resta(sucede(N));
            oeste;
            avanza;
        fin;
    fin sino inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            oeste;
            avanza;
           deja-zumbador;
        fin sino inicio
            norte;
            avanza;
            resta(sucede(N));
            oeste;
            avanza;
        fin;
    fin;
fin;


define-nueva-instruccion tomar-base(N) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        tomar-base(sucede(N));
    fin sino inicio
        ir-1-12;
       norte;
       avanza;
       repetir 11 veces inicio
       repetir N veces deja-zumbador;
            oeste;
            avanza;
       fin;
       ir-1-12;
        repetir 11 veces inicio
            suma(precede(N));

        fin;
    fin;
fin;
   inicia-ejecucion
    amontonar;
    ir-1-3;
    tomar-base(0);
        apagate;
    termina-ejecucion
finalizar-programa
