iniciar-programa
   define-nueva-instruccion gira(n) como
   inicio
      repetir n veces
        gira-izquierda;
   fin;  
   define-nueva-instruccion revisa como
   inicio
      mientras frente-libre y no junto-a-zumbador hacer
        avanza;
      si junto-a-zumbador y frente-libre entonces
      inicio
        avanza;
         mientras frente-libre y no junto-a-zumbador hacer
           avanza;
         si junto-a-zumbador entonces
         inicio
            mientras no-orientado-al-sur hacer
                 gira(1);
         fin
         sino
            gira(2);
      fin;
    fin;
    define-nueva-instruccion trae como
    inicio
       si junto-a-zumbador entonces
       inicio
          coge-zumbador;
          trae;
          deja-zumbador;
        fin
        sino
        inicio
           gira(2);
           avanza;
        fin;
    fin;
    define-nueva-instruccion acaba como
    inicio
        gira(2);
        mientras frente-libre hacer
           avanza;
        gira(3);
        avanza;
        gira(3);
        mientras frente-libre y no junto-a-zumbador hacer
           avanza;
        gira(1);
        trae;
        apagate;
     fin;
    define-nueva-instruccion quita como
    inicio
       mientras orientado-al-oeste hacer
       inicio
         si no junto-a-zumbador entonces
         inicio
           gira(1);
           avanza;
           mientras junto-a-zumbador hacer
             coge-zumbador;
           gira(2);
           avanza;
           gira(1);
          fin
          sino
          inicio
             coge-zumbador;
             gira(1);
             avanza;
             deja-zumbador;
             gira(2);
             avanza;
             gira(1);
          fin;
          si frente-libre entonces
             avanza
           sino
             gira(1);
       fin
    fin;
     define-nueva-instruccion deja(n) como
    inicio
       gira(2);
       mientras frente-libre hacer
          avanza;
       repetir n veces
          deja-zumbador;
        gira(2);
        avanza;
        mientras frente-libre y no-junto-a-zumbador hacer
          avanza;
    fin;
    define-nueva-instruccion coge1 como
    inicio
       si junto-a-zumbador y frente-libre entonces
       inicio
          avanza;
          coge1;
          deja-zumbador;
       fin
       sino
       inicio
          mientras frente-libre hacer
            avanza;
          gira(3);
          avanza;
          gira(3);
       fin;
    fin;
        define-nueva-instruccion coge2 como
    inicio
       si junto-a-zumbador y frente-libre entonces
       inicio
          avanza;
          coge2;
          deja-zumbador;
       fin
       sino
       inicio
          mientras frente-libre hacer
            avanza;
          gira(1);
          avanza;
          gira(1);
       fin;
    fin;
    inicia-ejecucion
        gira(3);
        mientras frente-libre hacer
           avanza;
        gira(1);
        mientras frente-libre y no junto-a-zumbador hacer
           avanza;
        gira(1);
        si no-junto-a-zumbador entonces
        inicio
           mientras frente-libre hacer
           avanza;
           apagate;
        fin;
         mientras frente-libre hacer
           avanza;
         gira(1);
          mientras frente-libre hacer
           avanza;
           gira(1);
        mientras orientado-al-sur hacer
        inicio
            mientras frente-libre y no-junto-a-zumbador hacer
               avanza;
            si junto-a-zumbador entonces
            inicio
               si frente-libre entonces
                 deja(2)
               sino
                 deja(1);
            fin;
           gira(3);
           si frente-libre entonces
           inicio
              avanza;
              si izquierda-libre entonces
              inicio
                 gira(1);
                 avanza;
                 gira(2);
              fin
              sino
                 gira(3);
              coge1;
              avanza;
               mientras frente-libre y no-junto-a-zumbador hacer
               avanza;
           fin
           sino
              gira(1);
           gira(1);
           si frente-libre entonces
           inicio
              avanza;
              si derecha-libre entonces
              inicio
                 gira(3);
                 avanza;
                 gira(2);
              fin
              sino
                 gira(1);
               coge2;
               avanza;
               mientras frente-libre y no-junto-a-zumbador hacer
               avanza;
           fin
           sino
              gira(3);
            gira(2);
           mientras frente-libre hacer
              avanza;
           gira(3);
           si frente-libre entonces
           inicio
              avanza;
              gira(3);
            fin;
        fin;
        gira(2);
        mientras frente-libre hacer
            avanza;
        gira(1);
        avanza;
        gira(1);
        mientras frente-libre hacer
        inicio
            mientras junto-a-zumbador hacer
              coge-zumbador;
           avanza;
        fin;
        mientras junto-a-zumbador hacer
              coge-zumbador;
        gira(1);
        avanza;
        gira(1);
       mientras frente-libre o frente-bloqueado hacer
       inicio
          revisa;
          si orientado-al-oeste entonces
             acaba
          sino
          si orientado-al-este entonces
          inicio
            mientras no-junto-a-zumbador hacer
               avanza;
            gira(3);
            avanza;
            trae;
            apagate;
          fin
          sino
          inicio
             gira(1);
             mientras frente-libre hacer avanza;
             gira(2);
             quita;
             gira(1);
             mientras frente-libre hacer
               avanza;
             gira(2);
          fin;
       fin;
       apagate;
    termina-ejecucion
finalizar-programa
