iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
  repetir 3 veces
    gira-izquierda;
fin;
define-nueva-instruccion paso-atras como
inicio
  repetir 2 veces
    gira-izquierda;
    avanza;
    repetir 2 veces
      gira-izquierdA;
fin;
define-nueva-instruccion mira-norte como
inicio
  mientras no-orientado-al-norte hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-sur como
inicio
  mientras no-orientado-al-sur hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-este como
inicio
  mientras no-orientado-al-este hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-oeste como
inicio
  mientras no-orientado-al-oeste hacer
    gira-izquierda;
fin;
define-nueva-instruccion ubicate como
inicio
  mira-norte;
  mientras frente-libre hacer
    avanzA;
  mira-oeste;
  mientras frente-libre hacer
    avanza;
  mira-sur;
  mientras frente-libre hacer
    avanza;
  mira-norte;
fin;
define-nueva-instruccion continua(n) como
inicio
  si no(si-es-cero(n)) y junto-a-zumbador entonces
  inicio
    coge-zumbador;
    continua(precede(n));
  fin
  sino
  inicio
    si si-es-cero(n) y no-junto-a-zumbador entonces
    inicio
      mira-norte;
      paso-atras;
      deja-zumbador;
      avanza;
      mira-este;
      si frente-libre entonces
      avanza
      sino
        mientras algun-zumbador-en-la-mochila hacer
          deja-zumbador;
    fin
    sino
    inicio
      si no-junto-a-zumbador entonces
      inicio
        mientras algun-zumbador-en-la-mochila hacer
          deja-zumbador;
        mira-norte;
      fin
      sino
      inicio
        repetir n veces
          deja-zumbador;
        mira-sur;
      fin;
    fin;
  fin;
fin;
define-nueva-instruccion color(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    color(sucede(n));
  fin
  sino
  inicio
    repetir 4 veces
      avanza;
    mira-este;
    mientras frente-libre hacer
    inicio
      continua(n);
      si no-orientado-al-este entonces
      inicio
         mira-este;
         avanza;
      fin;
    fin;
    continua(n);
  fin;
fin;
define-nueva-instruccion cuenta(x) como
inicio
  si junto-a-zumbador  entonces
  inicio
    coge-zumbador;
    si frente-libre entonces
    avanza;
    cuenta(Sucede(x));
  fin
  sino
  inicio
    mira-sur;
    mientras frente-libre hacer
      avanza;
    mira-oeste;
    mientras frente-libre hacer
      avanza;
    mira-norte;
    avanza;
    mira-este;
    mientras junto-a-zumbador hacer
      avanza;
    repetir 2 veces
      gira-izquierda;
    si frente-libre entonces
    inicio
      repetir 2 veces
        gira-izquierda;
    fin
    sino
      repetir 2 veces
        gira-izquierda;
    repetir x veces
      deja-zumbador;
    mira-norte;
    repetir 3 veces
      avanza;
    mira-oesTE;
    mientras frente-libre hacer
      avanza;
    mira-este;
  fin;
fin;
define-nueva-instruccion largo(n) como
inicio
  si frente-libre entonces
  inicio
    avanza;
    largo(sucede(n));
  fin
  sino
  inicio
    mira-oeste;
    mientras frente-libre hacer
       avanza;
    mira-norte;
    repetir 4 veces
      avanza;
    mira-este;
    si no(si-es-cero(n)) entonces
    inicio
    repetir n veces
    inicio
      mientras no-junto-a-zumbador y frente-libre hacer
        avanza;
      cuenta(0);
    fin;
    fin
    sino
      cuenta(0);
  fin;
fin;
define-nueva-instruccion compara(n) como
inicio
  si no(si-es-cero(N)) y junto-a-zumbador entonces
  inicio
    coge-zumbador;
    compara(precede(N));
  fin
  sino
  inicio
    si si-es-cero(n) y no-junto-a-zumbador entonces
    inicio
      mira-este;
      deja-zumbador;
      avanza;
      mira-sur;
    fin
    sino
    inicio
    si si-es-cero(n) y junto-a-zumbador entonces
       mira-norte
     sino
     inicio
      si no(si-es-cero(N)) y no-junto-a-zumbador entonces
      inicio
        mira-este;
        deja-zumbador;
        avanza;
        mira-sur;
      fin;
    fin;
    fin ;


  fin;
fin;
define-nueva-instruccion mayor(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    mayor(sucede(n));
  fin
  sino
  inicio
    mira-este;
    si frente-libre entonces
    inicio
    avanzA;
    si junto-a-zumbador entonces
    inicio
    compara(n);
    mientras junto-a-zumbador hacer
    inicio
      si orientado-al-norte entonces
      inicio
        repetir n veces
          deja-zumbador;
        mayor(0);
      fin
      sino
      inicio
      si no-orientado-al-sur entonces
        avanzA
      sino
        mira-este;
        compara(n);
     fin;
    fin;
    fin;
    fin;
    si no-junto-a-zumbador entonces
    inicio
      mira-sur;
      mientras frente-libre hacer
        avanza;
      mira-oeste;
      mientras frente-libre hacer
        avanza;
      repetir n veces
        deja-zumbador;
      apagate;
    fin;
  fin;
fin;
    inicia-ejecucion
    ubicate;
    avanza;
    color(0);
    mira-sur;
    mientras frente-libre hacer
      avanza;
    mira-oeste;
    mientras no-junto-a-zumbador y frente-libre hacer
      avanza;
    si junto-a-zumbador entonces
    mientras algun-zumbador-en-la-mochila hacer
      deja-zumbador;
    mientras frente-libre hacer
      avanzA;
    mira-este;
    largo(0);
    mira-sur;
    mientras frente-libre hacer
      avanza;
    mira-oeste;
    mientras frente-libre hacer
      avanza;
    mira-norte;
    avanza;
    mayor(0);
        apagate;
    termina-ejecucion
finalizar-programa
