iniciar-programa
    define-nueva-instruccion media-vuelta como
        repetir 2 veces
            gira-izquierda;
    define-nueva-instruccion gira-derecha como
        repetir 3 veces
            gira-izquierda;
    define-nueva-instruccion residuo como
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            residuo;
            deja-zumbador;
        fin
        sino inicio
            avanza;
            media-vuelta;
        fin;
    define-nueva-instruccion mayor(x) como
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            mayor(sucede(x));
        fin
        sino inicio
            avanza;
            repetir x veces
                si junto-a-zumbador entonces
                    coge-zumbador
                sino inicio
                    repetir x veces
                        deja-zumbador;
                    coge-zumbador;
                    media-vuelta;
                fin;
           si orientado-al-oeste entonces inicio
               avanza;
               repetir x veces
                   deja-zumbador;
               media-vuelta;
               avanza;
               media-vuelta;
          fin
          sino inicio
              media-vuelta;
              residuo;
              repetir x veces
                  deja-zumbador;
              avanza;
              repetir x veces
                  deja-zumbador;
              media-vuelta;
         fin;
      fin;
    define-nueva-instruccion divide2(n) como
       si no-orientado-al-sur y junto-a-zumbador entonces inicio
           repetir n veces
                si junto-a-zumbador entonces
                    coge-zumbador
                sino
                    gira-izquierda;
            si junto-a-zumbador entonces inicio
                divide2(n);
                deja-zumbador;
            fin
            sino inicio
                 si no-orientado-al-sur entonces
                     gira-izquierda;
                 avanza;
                 gira-izquierda;
                 avanza;
                 avanza;
                 gira-derecha;
            fin;
      fin
      sino inicio
          si no-orientado-al-sur entonces
              gira-izquierda;
          avanza;
          gira-izquierda;
          avanza;
          avanza;
          gira-derecha;
      fin;


    define-nueva-instruccion divide(n) como
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            divide(sucede(n));
        fin
        sino inicio
            avanza;
            mientras no-orientado-al-norte hacer
                repetir n veces
                    si junto-a-zumbador entonces
                        coge-zumbador
                    sino inicio
                        media-vuelta;
                        avanza;
                        gira-izquierda;
                        repetir n veces
                            deja-zumbador;
                        coge-zumbador;
                    fin;
           gira-izquierda;
           avanza;
           repetir n veces
               deja-zumbador;
           media-vuelta;
           avanza;
           media-vuelta;
           si no-junto-a-zumbador entonces inicio
               gira-derecha;
               avanza;
               gira-izquierda;
               avanza;
               divide2(n);
               deja-zumbador;
           fin;
      fin;
    define-nueva-instruccion cuenta(n) como
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            cuenta(n);
            repetir n veces
                deja-zumbador;
        fin
        sino inicio
            gira-izquierda;
        fin;

    define-nueva-instruccion multiplica(n) como
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            multiplica(sucede(n));
        fin
        sino inicio
            avanza;
            cuenta(n);
        fin;
    define-nueva-instruccion duplica(n) como
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            duplica(sucede(n));
            deja-zumbador;
        fin
        sino inicio
            repetir n veces
                deja-zumbador;
            avanza;
        fin;

    inicia-ejecucion
        mientras no-orientado-al-oeste hacer
            gira-izquierda;
        mientras frente-libre hacer
            avanza;
        gira-izquierda;
        mientras frente-libre hacer
            avanza;
        media-vuelta;
        duplica(0);
        media-vuelta;
        avanza;
        gira-izquierda;
        avanza;
        gira-izquierda;
        duplica(0);
        gira-izquierda;
        multiplica(0);
        avanza;
        gira-izquierda;
        mayor(0);
        divide(0);
        mientras junto-a-zumbador y frente-libre hacer inicio
            divide(0);
       fin;

        apagate;
    termina-ejecucion
finalizar-programa
