iniciar-programa
define-nueva-instruccion mira-este como
inicio
   mientras no-orientado-al-este hacer
     gira-izquierda;
fin;
define-nueva-instruccion gira-derecha como
inicio
   repetir 3 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-oeste como
inicio
  mientras no-orientado-al-oeste hacer
    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 lleva como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    lleva;
    deja-zumbador;
  fin
  sino
  inicio
    paso-atras;
  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;
    gira-derecha;
    repetir 2 veces
      avanza;
    mira-este;
    mientras junto-a-zumbador hacer
    inicio
      coge-zumbador;
      avanza;
      repetir 2 veces
      inicio
        repetir n veces
          deja-zumbador;
       coge-zumbador;
      fin;
      paso-atras;
    fin;
    avanza;
    lleva;
  fin;
fin;
define-nueva-instruccion pasos(n) como
inicio
   si junto-a-zumbador entonces
   inicio
     coge-zumbador;
     pasos(sucede(n));
   fin
   sino
   inicio
     repetir n veces
       deja-zumbador;
     avanza;
     repetir precede(n) veces
       deja-zumbador;
   fin;
fin;
define-nueva-instruccion horizontal(n) como
inicio
  si frente-libre entonces
  inicio
    avanza;
    horizontal(n);
    avanza;
  fin
  sino
  inicio
  si junto-a-zumbador entonces
  inicio
    repetir n veces
    inicio
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
      fin;
    fin;
    mira-sur;
    mientras frente-libre hacer
      avanza;
    deja-zumbador;
    repetir 2 veces
      gira-izquierda;
    repetir 2 veces
      avanza;
     gira-izquierda;
    fin
    sino
      apagate;
    mira-este;
  fin;
fin;
define-nueva-instruccion total(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    total(sucede(n));
  fin
  sino
  inicio
     repetir n veces
       deja-zumbador;
     mira-norte;
     avanza;
     gira-izquierda;
     horizontal(n);
     mira-sur;
     avanza;
     gira-izquierda;
     avanza;
  fin;
fin;
    inicia-ejecucion
    largo(1);
    mira-sur;
    avanza;
    gira-izquierda;
    mientras junto-a-zumbador hacer
    inicio
      pasos(0);
    fin;
    gira-izquierda;
    avanza;
    gira-izquierda;
    mientras no-junto-a-zumbador hacer
      avanza;
    mira-sur;
    mientras junto-a-zumbador hacer
    inicio
      avanza;
      gira-izquierda;
      mientras junto-a-zumbador hacer
      inicio
         total(0);
      fin;
     mira-norte;
     avanza;
     gira-izquierda;
     mientras frente-libre hacer
       avanza;
     mira-sur;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
