iniciar-programa
   define-nueva-instruccion media-Vuelta como inicio
   repetir 2 veces gira-izquierda;
   fin;

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

    define-nueva-instruccion empieza(n) como inicio
    repetir n veces inicio
          repetir n veces inicio
          deja-zumbador;
          fin;
          si frente-libre y  no si-es-cero(n) entonces inicio
          avanza;

           fin
      sino si si-es-cero(n) o frente-bloqueado entonces inicio
       si frente-bloqueado entonces inicio
       gira-derecha; avanza;  gira-izquierda;
       fin;
       sal-de-instruccion;
      fin;
   fin;
       si orientado-al-norte y no si-es-cero(n) entonces inicio
          media-vuelta;
          avanza;
          gira-izquierda;
          si frente-libre entonces inicio
          avanza;
          fin
          sino inicio
           gira-derecha;
           mientras frente-libre hacer avanza;
           mientras junto-a-zumbador hacer coge-zumbador;
           deja-zumbador;
           apagate;
           fin;


          gira-izquierda;
       fin;
    si no si-es-cero(n) entonces inicio
         empieza(precede(n));
         fin;

    fin;



     define-nueva-instruccion uno(n) como inicio
       si junto-a-zumbador entonces inicio
        coge-zumbador;
        uno(sucede(n));
        fin
        sino
        inicio
        empieza(n);
        fin;
     fin;


     define-nueva-instruccion abajo(n) como inicio
     repetir n veces inicio
         repetir n veces inicio
         deja-zumbador;
         fin;
       si frente-libre y  no si-es-cero(n) entonces inicio
       avanza;
       fin
       sino si si-es-cero(n) o frente-bloqueado entonces inicio
       sal-de-instruccion;
       fin;
     fin;


        si orientado-al-sur y no si-es-cero(n) entonces inicio
          media-vuelta;
          avanza;
          gira-derecha;
          si frente-libre entonces inicio
          avanza;
          fin
          sino
          si frente-bloqueado entonces inicio
            gira-derecha;
            mientras frente-libre hacer inicio avanza; fin;
            deja-zumbador;
            sal-de-instruccion;
            fin;

          gira-derecha;
        fin;
       si no si-es-cero(n) entonces inicio
         abajo(sucede(n));
         fin;
   fin;

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

   define-nueva-instruccion corta como inicio
    mientras frente-libre y no junto-a-zumbador hacer inicio
     avanza;
   fin;
     mientras junto-a-zumbador hacer inicio
     coge-zumbador;
   fin;
   si frente-libre entonces inicio
     corta;
     fin;
     fin;

   define-nueva-instruccion prueba(n) como inicio
    repetir n veces
      si frente-libre entonces inicio
        avanza;

      fin
      sino si frente-bloqueado entonces inicio
        media-vuelta;
        mientras frente-libre hacer inicio
         avanza;
         fin;
         gira-derecha;
         sal-de-instruccion;
       fin;
       si frente-libre entonces inicio
         media-vuelta;
        mientras frente-libre hacer inicio
         avanza;
         fin;
         gira-derecha;
         sal-de-instruccion;
       fin;
        si frente-bloqueado entonces inicio
        media-vuelta;
        mientras frente-libre hacer inicio
         avanza;
         fin;
         gira-derecha;
         repetir 3 veces coge-zumbador;
          si no junto-a-zumbador entonces inicio
             repetir 6 veces deja-zumbador;
         apagate;
         fin
         sino si  junto-a-zumbador entonces inicio
           repetir 3 veces deja-zumbador;
           sal-de-instruccion;
           fin;
        fin;

      fin;
    inicia-ejecucion

    si derecha-bloqueada y izquierda-bloqueada y frente-bloqueado entonces inicio
    mientras junto-a-zumbador hacer inicio coge-zumbador; fin;
    deja-zumbador;
    apagate;
    fin;

   mientras no orientado-al-este hacer inicio
   gira-izquierda;
    fin;
    prueba(6);
     mientras no orientado-al-norte hacer inicio
     gira-izquierda;
     fin;
    uno(0);
    mientras no orientado-al-sur hacer inicio gira-izquierda; fin;
    abajo(1);
    si frente-bloqueado entonces inicio
    gira-derecha;
    fin;
    si frente-libre entonces
    avanza;
    corta;
    media-vuelta;
    mide(0);

          apagate;
    termina-ejecucion
finalizar-programa
