iniciar-programa
define-nueva-instruccion media-vuelta como
repetir 2 veces
gira-izquierda;
define-nueva-instruccion gira-derecha como
repetir 3 veces
gira-izquierda;

define-nueva-instruccion mueve-en-la-uno-uno como inicio
si frente-libre y orientado-al-norte y junto-a-zumbador entonces inicio
avanza;
mueve-en-la-uno-uno;
fin;
si no-junto-a-zumbador entonces inicio
mientras algun-zumbador-en-la-mochila hacer
deja-zumbador;
 (*orienta*)
    mientras no-orientado-al-norte hacer
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    media-vuelta;
  (*fin de la orientacion*)
fin;
si frente-bloqueado y orientado-al-norte entonces inicio
media-vuelta;
mientras frente-libre hacer
avanza;
girA-izquierda;
si frente-libre y orientado-al-este entonces
avanza;
mueve-en-la-uno-uno
fin;
fin;

define-nueva-instruccion mueve-en-la-dos-uno como inicio
si frente-libre y orientado-al-norte y junto-a-zumbador entonces inicio
avanza;
mueve-en-la-dos-uno;
fin;
si no-junto-a-zumbador entonces inicio
mientras algun-zumbador-en-la-mochila hacer
deja-zumbador;
 (*orienta*)
    mientras no-orientado-al-norte hacer
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    media-vuelta;
  (*fin de la orientacion*)
fin;
si frente-bloqueado y orientado-al-norte entonces inicio
media-vuelta;
mientras frente-libre hacer
avanza;
girA-izquierda;
si frente-libre y orientado-al-este entonces
avanza;
mueve-en-la-dos-uno
fin;
fin;



define-nueva-instruccion coge-uno como inicio
si junto-a-zumbador y orientado-al-norte entonces inicio
coge-zumbador;
si no-junto-a-zumbador y frente-libre entonces inicio
avanza;
coge-uno;
fin
sino
si junto-a-zumbador entonces inicio
deja-zumbador;
fin;
fin;

si frente-libre y orientado-al-norte entonces inicio
avanza;
coge-uno;
fin
sino
si frente-bloqueado y orientado-al-norte entonces inicio
media-vuelta;
mientras frente-libre y orientado-al-sur hacer
avanza;
si izquierda-libre entonces inicio
gira-izquierda;
avanza;
gira-izquierda;
coge-uno;
fin
sino
si izquierda-bloqueada entonces inicio
gira-derecha;
mientras frente-libre hacer
avanza;
mientras algun-zumbador-en-la-mochila hacer
deja-zumbador;
fin;
fin;
fin;

define-nueva-instruccion coge-dos como inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
si junto-a-zumbador entonces
coge-zumbador;
si frente-libre y orientado-al-norte entonces inicio
avanza;
coge-dos;
fin;
fin;

si frente-libre y orientado-al-norte entonces inicio
avanza;
coge-dos;
fin
sino
si frente-bloqueado y orientado-al-norte entonces inicio
media-vuelta;
mientras frente-libre hacer
avanza;
si izquierda-libre entonces inicio
gira-izquierda;
avanza;
gira-izquierda;
coge-dos;
fin
sino
si izquierda-bloqueada entonces inicio
gira-derecha;
mientras frente-libre hacer
avanza;
media-vuelta;
avanza;
mientras algun-zumbador-en-la-mochila hacer
deja-zumbador;
fin;
fin;
fin;

define-nueva-instruccion sobrantes como inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
sobrantes;
fin;
si frente-libre y orientado-al-norte entonces inicio
avanza;
sobrantes;
fin
sino
si frente-bloqueado y orientado-al-norte entonces inicio
media-vuelta;
mientras frente-libre hacer
avanza;
si izquierda-libre entonces inicio
gira-izquierda;
avanza;
gira-izquierda;
sobrantes;
fin
sino
si izquierda-bloqueada entonces inicio
gira-derecha;
mientras frente-libre hacer
avanza;
mientras algun-zumbador-en-la-mochila hacer
deja-zumbador;
fin;
fin;
fin;

define-nueva-instruccion primeros como inicio
mientras frente-libre y no-junto-a-zumbador hacer
avanza;
si junto-a-zumbador entonces inicio
coge-zumbador;
primeros;
fin;
si frente-bloqueado entonces
media-vuelta;
mientras frente-libre y orientado-al-sur hacer inicio
avanza;
fin;
si orientado-al-sur entonces inicio
gira-izquierda;
avanza;
gira-izquierda;
si orientado-al-norte entonces
avanza;
fin;
fin;
define-nueva-instruccion primeros2 como inicio
mientras frente-libre y no-junto-a-zumbador hacer
avanza;
si junto-a-zumbador entonces inicio
coge-zumbador;
primeros2;
fin;
si frente-bloqueado entonces
media-vuelta;
mientras frente-libre y orientado-al-sur hacer inicio
avanza;
fin;
si orientado-al-sur entonces inicio
gira-izquierda;
avanza;
gira-izquierda;
fin;
fin;

define-nueva-instruccion reparte-uno como inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
reparte-uno;
deja-zumbador;
si frente-libre entonces
avanza;
fin;
fin;
define-nueva-instruccion reparte-dos como inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
si junto-a-zumbador entonces
coge-zumbador;
reparte-dos;
deja-zumbador;
deja-zumbador;
si frente-libre entonces
avanza;
fin;
fin;



    inicia-ejecucion
  (*orienta*)
    mientras no-orientado-al-norte hacer
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    media-vuelta;
  (*fin de la orientacion*)

    si junto-a-zumbador entonces inicio
    mientras junto-a-zumbador hacer
    coge-zumbador;
    avanza;
    mueve-en-la-uno-uno;
    fin;

    coge-uno;
    media-vuelta;
    avanza;
    gira-izquierda;
    (*mueve los zumbadores de la segunda fila*)
    si junto-a-zumbador y orientado-al-norte entonces inicio
    mientras junto-a-zumbador hacer
    coge-zumbador;
    avanza;
    mueve-en-la-dos-uno;
    fin;
    si no-junto-a-zumbador y orientado-al-norte entonces inicio
    gira-izquierda;
    avanza;
    gira-derecha;
    si orientado-al-norte entonces
    avanza;
    fin
    sino
    si junto-a-zumbador y orientado-al-norte entonces inicio
    avanza;
    fin;
    coge-dos;

    media-vuelta;
    avanza;
    gira-derecha;
    avanza;

    primeros;
    primeros2;
    sobrantes;

    si junto-a-zumbador entonces inicio
    gira-derecha;
    reparte-uno;
    fin;
    si orientado-al-norte entonces inicio
    media-vuelta;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    avanza
    fin
    sino
    si no-junto-a-zumbador entonces inicio
     media-vuelta;
     avanza;
     fin;

     si junto-a-zumbador entonces inicio
     mientras no-orientado-al-norte hacer
     gira-izquierda;
     reparte-dos;
     fin
     sino
     si no-junto-a-zumbador entonces inicio
     apagate;
     fin;




        apagate;
    termina-ejecucion
finalizar-programa
