iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
repetir 3 veces
inicio
gira-izquierda;
fin;
fin;
define-nueva-instruccion gira-180 como
inicio
repetir 2 veces
inicio
gira-izquierda;
fin;
fin;
         define-nueva-instruccion kaka(n) como
         inicio
        si junto-a-zumbador entonces
        inicio
          coge-zumbador;
          kaka(sucede(n));

        fin
        sino
        inicio
        si derecha-bloqueada entonces
        inicio
        gira-izquierda;
        fin;
         si orientado-al-norte entonces
         inicio
           si frente-libre entonces
           inicio
           avanza;
           fin;
           si no-junto-a-zumbador entonces
           inicio
           gira-180;
           mientras frente-libre hacer
           inicio
           avanza;
           fin;
           gira-izquierda;
           fin;
           si junto-a-zumbador entonces
           inicio
           kaka(n);
           fin;
         fin;
         si orientado-al-este entonces
         inicio
           si no-junto-a-zumbador entonces
           inicio
             mientras frente-libre y no-junto-a-zumbador hacer
             inicio
             avanza;
             fin;
           fin;
           si junto-a-zumbador entonces
           inicio
           kaka(n);
           fin;
           si frente-bloqueado y no-junto-a-zumbador y orientado-al-este entonces
           inicio
           gira-izquierda;
           avanza;
           gira-izquierda;
           mientras frente-libre hacer
           inicio
           avanza;
           fin;
           gira-izquierda;
           mientras frente-libre hacer
           inicio
           avanza;
           fin;
           repetir n veces
           inicio
           si orientado-al-sur entonces
           inicio
             si algun-zumbador-en-la-mochila entonces
             inicio
           deja-zumbador;
             fin;
           gira-izquierda;
           fin
           sino
           inicio
           gira-derecha;
           fin;
           fin;
           apagate;
           fin;
         fin;
        fin;
         fin;

         define-nueva-instruccion iguala(n) como
         inicio
            si junto-a-zumbador entonces
        inicio
          si si-es-cero(n) entonces
          inicio
          kaka(n);
          fin;
          coge-zumbador;
          iguala(precede(n));

        fin
        sino
        inicio
        si derecha-bloqueada entonces
        inicio
        gira-izquierda;
        fin;
         si orientado-al-norte entonces
         inicio
           si frente-libre entonces
           inicio
           avanza;
           fin;
           si no-junto-a-zumbador entonces
           inicio
           gira-180;
           mientras frente-libre hacer
           inicio
           avanza;
           fin;
           gira-izquierda;
           fin;
           si junto-a-zumbador entonces
           inicio
           iguala(n);
           fin;
         fin;
         si orientado-al-este entonces
         inicio
           si no-junto-a-zumbador entonces
           inicio
             mientras frente-libre y no-junto-a-zumbador hacer
             inicio
             avanza;
             fin;
           fin;
           si junto-a-zumbador entonces
           inicio
           iguala(n);
           fin;
           si frente-bloqueado y no-junto-a-zumbador y orientado-al-este entonces
           inicio
           gira-izquierda;
           avanza;
           gira-izquierda;
           mientras frente-libre hacer
           inicio
           avanza;
           fin;
           gira-izquierda;
           mientras frente-libre hacer
           inicio
           avanza;
           fin;
           repetir n veces
           inicio
           si orientado-al-sur entonces
           inicio
             si algun-zumbador-en-la-mochila entonces
             inicio
           deja-zumbador;
             fin;
           gira-izquierda;
           fin
           sino
           inicio
           gira-derecha;
           fin;
           fin;
           apagate;
           fin;
         fin;
        fin;
         fin;
      define-nueva-instruccion peso(n) como
      inicio
        si junto-a-zumbador entonces
        inicio
          coge-zumbador;
          peso(sucede(n));

        fin
        sino
        inicio
        si derecha-bloqueada entonces
        inicio
        gira-izquierda;
        fin;
         si orientado-al-norte entonces
         inicio
           si frente-libre entonces
           inicio
           avanza;
           fin;
           si no-junto-a-zumbador entonces
           inicio
           gira-180;
           mientras frente-libre hacer
           inicio
           avanza;
           fin;
           gira-izquierda;
           fin;
           si junto-a-zumbador entonces
           inicio
           peso(n);
           fin;
         fin;
         si orientado-al-este entonces
         inicio
           si no-junto-a-zumbador entonces
           inicio
             mientras frente-libre y no-junto-a-zumbador hacer
             inicio
             avanza;
             fin;
           fin;
           si junto-a-zumbador entonces
           inicio
           peso(n);
           fin;
           si frente-bloqueado y no-junto-a-zumbador y orientado-al-este entonces
           inicio
           gira-izquierda;
           avanza;
           gira-derecha;
           repetir 3 veces
           inicio
           avanza;
           fin;
           gira-derecha;
           avanza;
           gira-izquierda;
            iguala(n);
           fin;
         fin;
        fin;
      fin;
    inicia-ejecucion
    repetir 5 veces
    inicio
    avanza;
    fin;
    gira-derecha;
    avanza;
    gira-derecha;
    avanza;
    gira-izquierda;
      peso(0);
        apagate;
    termina-ejecucion
finalizar-programa
