iniciar-programa

 define-nueva-instruccion gira-derecha como inicio
    gira-izquierda;
    gira-izquierda;
    gira-izquierda;
     fin;

    define-nueva-instruccion media-vuelta como inicio
 gira-izquierda;
 gira-izquierda;
 fin;


    define-nueva-instruccion dos(k) como inicio
       si junto-a-zumbador entonces inicio
        coge-zumbador;
        dos(sucede(K));

        fin
        sino
        inicio
         media-vuelta;
         avanza;
         mientras junto-a-zumbador hacer coge-zumbador;
         media-vuelta;
         mientras frente-libre hacer inicio
           avanza;
        fin;
         media-vuelta;
         repetir k veces inicio
          avanza;
          fin;
          deja-zumbador;
          sal-de-instruccion;
         fin;
       fin;

     define-nueva-instruccion uno(n) como inicio
       si junto-a-zumbador entonces inicio
        coge-zumbador;
        uno(sucede(n));
       fin
       sino
       si orientado-al-este entonces
       inicio
        media-vuelta;
        avanza;
        avanza;
        coge-zumbador;
         dos(0);
         repetir n veces inicio
         avanza;
         deja-zumbador;
         fin;
        fin;
        fin;

   define-nueva-instruccion mide(n) como inicio
      si frente-libre entonces inicio
         avanza;
         mide(sucede(n));
       fin
       sino inicio
         media-vuelta;
         repetir n veces avanza;
         repetir n veces deja-zumbador;
         gira-izquierda;
         mientras frente-libre hacer inicio avanza; fin;
          gira-derecha;
          mientras frente-libre hacer inicio avanza;
          fin;
          media-vuelta;
          fin;
       fin;
    define-nueva-instruccion mide2(n) como inicio
       si frente-libre y no junto-a-zumbador entonces inicio
        avanza;
        mide2(sucede(n));
        fin
        sino
        inicio
         media-vuelta;
         mientras frente-libre hacer avanza;
         gira-derecha;
         mientras frente-libre hacer avanza;
         gira-derecha;
         mientras no junto-a-zumbador hacer inicio avanza;
         fin;
         avanza;
         repetir n veces deja-zumbador;
         fin;
       fin;

     define-nueva-instruccion compara(n) como inicio
        si junto-a-zumbador entonces inicio
         coge-zumbador;
         compara(sucede(n));
        fin
        sino
        inicio
         media-vuelta;
          avanza;
         repetir n veces
         si junto-a-zumbador entonces inicio
          coge-zumbador;
         fin
         sino si no junto-a-zumbador entonces inicio
             media-vuelta;
           mientras frente-libre hacer avanza;
           gira-derecha;
           mientras frente-libre hacer avanza;
           si frente-bloqueado entonces inicio
            gira-izquierda; avanza;
            deja-zumbador;
            apagate;
            fin;
         fin;
         si junto-a-zumbador entonces inicio
           sal-de-instruccion;
           fin;
           fin;
        fin;


    define-nueva-instruccion mideultimo(n) como inicio
      si frente-libre entonces inicio
       avanza;
       mideultimo(Sucede(n));
     fin
     sino inicio
       gira-derecha;
       mientras frente-libre hacer inicio avanza; fin;
       gira-izquierda;
       avanza;
       repetir n veces deja-zumbador;
       deja-zumbador;
       apagate;
       fin;
      fin;

    inicia-ejecucion
    mientras no orientado-al-este hacer inicio
    gira-izquierda;
    fin;
    avanza;
    avanza;
    avanza;

    coge-zumbador;
    uno(0);
    gira-izquierda;
    mientras frente-libre hacer inicio avanza; fin;
    gira-derecha;
    mide(0);
    mide2(0);
    compara(0);
    mientras frente-libre hacer inicio avanza;
    fin;
    media-vuelta;
    mideultimo(0);
        apagate;
    termina-ejecucion
finalizar-programa
