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

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


      define-nueva-instruccion medir(e) como inicio
        si frente-libre entonces inicio
        avanza;
        si frente-libre entonces  inicio
        avanza;
        medir(sucede(sucede(e)));
        fin
        sino inicio
        media-vuelta;
        fin;
        fin
        sino inicio
         media-vuelta;
         fin;

        mientras orientado-al-sur y frente-libre  o orientado-al-oeste y frente-libre  hacer inicio
        avanza;
        fin;
        si frente-bloqueado y orientado-al-sur entonces inicio
        repetir e veces deja-zumbador;
        gira-izquierda;
        medir(1);
        fin;
        si frente-bloqueado y orientado-al-oeste entonces inicio
        media-vuelta;
        avanza;
        repetir e veces deja-zumbador;
        gira-izquierda;
        fin;
        fin;


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

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

       fin
       sino inicio
        si orientado-al-oeste entonces inicio
        media-vuelta;
        avanza;
        repetir n veces
         si junto-a-zumbador entonces inicio
           coge-zumbador;
         fin sino
         si no junto-a-zumbador entonces inicio
          deja-zumbador;
          fin;
        fin;
       fin;
       fin;

    define-nueva-instruccion  recoger(n) como inicio
      si junto-a-zumbador entonces inicio
       coge-zumbador;
       recoger(sucede(n));
       fin
       sino inicio
        mientras no orientado-al-oeste hacer inicio
        gira-izquierda;
        fin;
        mientras frente-libre hacer inicio
        avanza;
        fin;
        si frente-bloqueado entonces
        inicio
        gira-izquierda;
        fin;
         mientras frente-libre hacer inicio
        avanza;
        fin;
        si frente-bloqueado entonces
        inicio
        gira-izquierda;
        fin;
        repetir n veces avanza;
        gira-izquierda;
        repetir n veces avanza;
        sal-de-instruccion;
        fin;
        fin;

    define-nueva-instruccion  mide(n) como inicio
      si frente-libre entonces inicio
       avanza;
       avanza;
       mide(sucede(n));
       fin sino
       inicio
        media-vuelta;
        repetir n veces avanza;
        gira-izquierda;
        repetir n veces avanza;
        fin;
        fin;


    define-nueva-instruccion  deja1(n) como inicio
         si frente-libre y orientado-al-norte  entonces inicio
            repetir n veces avanza;
            gira-izquierda;
            repetir n veces avanza;
            deja-zumbador;
              media-vuelta;
              repetir n veces avanza;
              gira-derecha;
              repetir n veces avanza;
              media-vuelta;

            repetir n veces avanza;
            gira-derecha;
            repetir n veces avanza;
            deja-zumbador;
            si orientado-al-este entonces inicio
            media-vuelta;
            repetir n veces avanza;
            gira-izquierda;
            repetir n veces avanza;
              fin;
              fin;

        si frente-libre y orientado-al-sur  entonces inicio

            repetir n veces avanza;
            gira-izquierda;
            repetir n veces avanza;
            deja-zumbador;

              media-vuelta;
              repetir n veces avanza;
              gira-derecha;
              repetir n veces avanza;

              media-vuelta;
              repetir n veces avanza;
              gira-derecha;
              repetir n veces avanza;
              deja-zumbador;
              si frente-libre entonces inicio
                media-vuelta;
                repetir n veces avanza;
                gira-izquierda;
                repetir n veces avanza;
                deja1(sucede(n));
                fin
                sino inicio
                 media-vuelta;
                 repetir n veces avanza;
                 gira-izquierda;
                 repetir n veces avanza;
                 sal-de-instruccion;
                 fin;

               fin;
              fin;

         define-nueva-instruccion cubo(k) como inicio
           si orientado-al-norte y junto-a-zumbador entonces inicio
            mientras junto-a-zumbador hacer inicio
            coge-zumbador;
            fin;
            repetir k veces deja-zumbador;
            si frente-libre entonces inicio
            avanza;
            gira-derecha;
            fin
            sino inicio
            apagate;
            fin;
            cubo(sucede(k));
            fin;
           si frente-libre entonces inicio
             si no junto-a-zumbador entonces inicio
             repetir k veces deja-zumbador;
             avanza;
             cubo(k);
             fin;
            fin;
           si junto-a-zumbador entonces inicio
            coge-zumbador;
            gira-derecha;
            cubo(k);
            fin
            sino si frente-bloqueado entonces inicio
             media-vuelta;
             avanza;
             mientras junto-a-zumbador hacer  inicio
              coge-zumbador;
              si no junto-a-zumbador y frente-libre entonces inicio
              avanza;
              fin
              sino si no junto-a-zumbador y frente-bloqueado  entonces inicio
               apagate;
               fin;
               fin;
               fin;


            fin;

    inicia-ejecucion
     mientras no orientado-al-norte hacer inicio
      gira-izquierda;
      fin;
      si frente-libre entonces avanza;
      si frente-bloqueado entonces inicio
       media-vuelta;
       avanza;
       deja-zumbador;
       apagate;
       fin;
       media-vuelta;
       avanza;
       media-vuelta;
      medir(1);
      gira-izquierda; avanza;
      gira-derecha;
      compara(0);
      media-vuelta;
      avanza;
      gira-derecha;
      avanza;
      coge(0);
       si junto-a-zumbador entonces inicio
         gira-izquierda;
         mientras junto-a-zumbador hacer coge-zumbador;
         avanza;
         mientras junto-a-zumbador hacer coge-zumbador;
         media-vuelta;
         avanza;
         gira-derecha;
         avanza;

         fin
       sino inicio
         media-vuelta;
         avanza;
         gira-derecha;
         avanza;
         mientras junto-a-zumbador hacer coge-zumbador;
         media-vuelta;
         avanza;
         gira-izquierda;
       fin;

      si orientado-al-oeste entonces inicio
      gira-derecha;
      avanza;
      coge-zumbador;
      recoger(0);
      fin
      sino inicio
      avanza;
      gira-izquierda;
      avanza;
      coge-zumbador;
      recoger(0);
      fin;
      media-vuelta;
      mide(0);
      gira-derecha;
      deja1(1);
      deja-zumbador;
      cubo(1);


         apagate;
    termina-ejecucion
finalizar-programa
