iniciar-programa
define-nueva-instruccion derecha como
inicio
   repetir 3 veces
      gira-izquierda;
fin;
define-nueva-instruccion u como
inicio
   repetir 2 veces
      gira-izquierda;
fin;
define-nueva-instruccion lleva como
inicio

   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      lleva;
      deja-zumbador;
   fin
   sino
      avanza;
fin;
define-nueva-instruccion cuenta(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      cuenta(sucede(n));
   fin
   sino
   inicio
      repetir n veces
         deja-zumbador;
      avanza;
      derecha;
      avanza;
      repetir n veces
         deja-zumbador;
      u;
      avanza;
      gira-izquierda;
   fin;
fin;
define-nueva-instruccion trae como
inicio
    si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       trae;
       deja-zumbador;
    fin
    sino
    inicio
       avanza;
       gira-izquierda;
       gira-izquierda;
    fin;
 fin;
define-nueva-instruccion revisa como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        avanza;
        si junto-a-zumbador entonces
        inicio
           coge-zumbador;
           gira-izquierda;
           gira-izquierda;
           avanza;
           gira-izquierda;
           gira-izquierda;
           revisa;
           deja-zumbador;
           avanza;
           gira-izquierda;
           gira-izquierda;
        fin
        sino
        inicio
           gira-izquierda;
           gira-izquierda;
           avanza;
           gira-izquierda;
           gira-izquierda;
           trae;
        fin;
        deja-zumbador;
        avanza;
        gira-izquierda;
        gira-izquierda;
    fin;
fin;
define-nueva-instruccion ordena(n) como
inicio
repetir n veces
       inicio
         mientras no-orientado-al-oeste hacer
            gira-izquierda;
         mientras frente-libre hacer
            avanza;
        gira-izquierda;
        gira-izquierda;
        mientras frente-libre y junto-a-zumbador hacer
        inicio
           avanza;
           si junto-a-zumbador entonces
           inicio
              u;
              avanza;
              u;       
              revisa;
              avanza;
           fin
        fin;
       fin;
fin;
define-nueva-instruccion c(n) como
inicio
   si junto-a-zumbador y frente-libre entonces
   inicio
      avanza;
      c(sucede(n));
   fin
   sino
   inicio
      u;
      mientras frente-libre hacer
         avanza;
      u;
      ordena(n);
   fin;
fin;
    inicia-ejecucion
    si frente-libre entonces
       avanza;
    mientras junto-a-zumbador y frente-libre hacer
    inicio
       u;
       avanza;
       u;
       c(1);
        u;
        mientras frente-libre hacer
           avanza;
        u;
        trae;
        cuenta(0);
        si frente-libre entonces
           avanza
        sino
           apagate;
        si no-junto-a-zumbador entonces
            apagate;
        u;
        mientras junto-a-zumbador hacer
        inicio
            lleva;
            u;
            avanza;
            si frente-libre entonces
            inicio
               avanza;
               u;
            fin;
        fin;
        mientras no-orientado-al-oeste hacer
           u;
        mientras frente-libre hacer
           avanza;
        u;
        si frente-libre entonces
          avanza;
    fin;
        apagate;
        apagate;
    termina-ejecucion
finalizar-programa
